首页 > 其他分享 >面试

面试

时间:2023-10-22 18:34:00浏览次数:32  
标签:队列 元素 链表 面试 数组 数据结构 节点

什么是数据结构?

简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。

为什么我们需要数据结构?

数据是计算机科学当中最关键的实体,而数据结构则可以将数据以某种组织形式存储,因此,数据结构的价值不言而喻。

无论你以何种方式解决何种问题,你都需要处理数据——无论是涉及员工薪水、股票价格、购物清单,还是只是简单的电话簿问题。

数据需要根据不同的场景,按照特定的格式进行存储。有很多数据结构能够满足以不同格式存储数据的需求。

常见的数据结构

首先列出一些最常见的数据结构,我们将逐一说明:

  • 数组
  • 队列
  • 链表
  • 字典树(这是一种高效的树形结构,但值得单独说明)
  • 散列表(哈希表)

**
**

数组

数组是最简单、也是使用最广泛的数据结构。栈、队列等其他数据结构均由数组演变而来。下图是一个包含元素(1,2,3和4)的简单数组,数组长度为4。

图片

每个数据元素都关联一个正数值,我们称之为索引,它表明数组中每个元素所在的位置。大部分语言将初始索引定义为零。关注Java技术栈微信公众号,回复"面试"获取更多博主精心整理的面试题。

以下是数组的两种类型:

  •  一维数组(如上所示)

  • 多维数组(数组的数组)

数组的基本操作

**
**

  • Insert——在指定索引位置插入一个元素

  • Get——返回指定索引位置的元素

  • Delete——删除指定索引位置的元素

  • Size——得到数组所有元素的数量

面试中关于数组的常见问题

**
**

  • 寻找数组中第二小的元素

  • 找到数组中第一个不重复出现的整数

  • 合并两个有序数组

  • 重新排列数组中的正值和负值

著名的撤销操作几乎遍布任意一个应用。但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态(当然,它会受限于一定的数量)。这没办法用数组实现。但有了栈,这就变得非常方便了。

可以把栈想象成一列垂直堆放的书。为了拿到中间的书,你需要移除放置在这上面的所有书。这就是LIFO(后进先出)的工作原理。

下图是包含三个数据元素(1,2和3)的栈,其中顶部的3将被最先移除:

图片

栈的基本操作

**
**

  • Push——在顶部插入一个元素

  • Pop——返回并移除栈顶元素

  • isEmpty——如果栈为空,则返回true

  • Top——返回顶部元素,但并不移除它

面试中关于栈的常见问题

**
**

  • 使用栈计算后缀表达式

  • 对栈的元素进行排序

  • 判断表达式是否括号平衡

队列

与栈相似,队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO(后进先出),而队列是FIFO,即先进先出。

一个完美的队列现实例子:售票亭排队队伍。如果有新人加入,他需要到队尾去排队,而非队首——排在前面的人会先拿到票,然后离开队伍。

下图是包含四个元素(1,2,3和4)的队列,其中在顶部的1将被最先移除:

图片

移除先入队的元素、插入新元素

队列的基本操作

**
**

  • Enqueue() —— 在队列尾部插入元素

  • Dequeue() ——移除队列头部的元素

  • isEmpty()——如果队列为空,则返回true

  • Top() ——返回队列的第一个元素

面试中关于队列的常见问题

**
**

  • 使用队列表示栈

  • 对队列的前k个元素倒序

  • 使用队列生成从1到n的二进制数

链表

链表是另一个重要的线性数据结构,乍一看可能有点像数组,但在内存分配、内部结构以及数据插入和删除的基本操作方面均有所不同。关注Java技术栈微信公众号,回复"面试"获取更多博主精心整理的面试题。

链表就像一个节点链,其中每个节点包含着数据和指向后续节点的指针。 链表还包含一个头指针,它指向链表的第一个元素,但当列表为空时,它指向null或无具体内容。

链表一般用于实现文件系统、哈希表和邻接表。

这是链表内部结构的展示:

图片

链表包括以下类型:

  • 单链表(单向)

  • 双向链表(双向)

链表的基本操作:

**
**

  • InsertAtEnd - 在链表的末尾插入指定元素

  • InsertAtHead - 在链接列表的开头/头部插入指定元素

  • Delete  - 从链接列表中删除指定元素

  • DeleteAtHead - 删除链接列表的第一个元素

  • Search  - 从链表中返回指定元素

  • isEmpty - 如果链表为空,则返回true

面试中关于链表的常见问题

**
**

  • 反转链表

  • 检测链表中的循环

  • 返回链表倒数第N个节点

  • 删除链表中的重复项

图是一组以网络形式相互连接的节点。节点也称为顶点。 一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。

图片

图的类型

**
**

  • 无向图

  • 有向图

在程序语言中,图可以用两种形式表示:

**
**

  • 邻接矩阵

  • 邻接表

常见图遍历算法

**
**

  • 广度优先搜索

  • 深度优先搜索

面试中关于图的常见问题

**
**

  • 实现广度和深度优先搜索

  • 检查图是否为树

  • 计算图的边数

  • 找到两个顶点之间的最短路径

树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。

树形结构被广泛应用于人工智能和复杂算法,它可以提供解决问题的有效存储机制。

这是一个简单树的示意图,以及树数据结构中使用的基本术语:

图片

Root - 根节点

Parent - 父节点

Child - 子节点

Leaf - 叶子节点

Sibling - 兄弟节点

以下是树形结构的主要类型:

**
**

  • N元树

  • 平衡树

  • 二叉树

  • 二叉搜索树

  • AVL树

  • 红黑树

  • 2-3树

其中,二叉树和二叉搜索树是最常用的树。

面试中关于树结构的常见问题:

**
**

  • 求二叉树的高度

  • 在二叉搜索树中查找第k个最大值

  • 查找与根节点距离k的节点

  • 在二叉树中查找给定节点的祖先节点

字典树(Trie)

字典树,也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。

以下是在字典树中存储三个单词“top”,“so”和“their”的例子:

图片

这些单词以顶部到底部的方式存储,其中绿色节点“p”,“s”和“r”分别表示“top”,“thus”和“theirs”的底部。

面试中关于字典树的常见问题

**
**

  • 计算字典树中的总单词数

  • 打印存储在字典树中的所有单词

  • 使用字典树对数组的元素进行排序

  • 使用字典树从字典中形成单词

  • 构建T9字典(字典树+ DFS )

哈希表

哈希法(Hashing)是一个用于唯一标识对象并将每个对象存储在一些预先计算的唯一索引(称为“键(key)”)中的过程。因此,对象以键值对的形式存储,这些键值对的集合被称为“字典”。可以使用键搜索每个对象。基于哈希法有很多不同的数据结构,但最常用的数据结构是哈希表。

哈希表通常使用数组实现。

散列数据结构的性能取决于以下三个因素:

**
**

  • 哈希函数

  • 哈希表的大小

  • 碰撞处理方法

下图为如何在数组中映射哈希键值对的说明。该数组的索引是通过哈希函数计算的。

图片

面试中关于哈希结构的常见问题:

**
**

  • 在数组中查找对称键值对
  • 追踪遍历的完整路径
  • 查找数组是否是另一个数组的子集
  • 检查给定的数组是否不相交

作者:用户6928304583721
链接:https://juejin.cn/post/7291474621660889125
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:队列,元素,链表,面试,数组,数据结构,节点
From: https://www.cnblogs.com/aoshine/p/17780811.html

相关文章

  • 数据结构面试常问问题--保研及考研复试
    前言:Hello大家好,我是Dream。今年保研上岸山东大学人工智能专业(经验贴),现在将我自己的专业课备考知识点整理出来,分享给大家,希望可以帮助到大家!这是重点知识总结,如果你想看全部的内容的话,这里我给大家都已经打包好了,需要自取:保研复试全套材料+408专业课知识总结及思维导图(点击即可......
  • 面试必刷TOP101:9、删除链表的倒数第n个节点
    一、题目二、题解2.1双指针由于我们需要找到倒数第n个节点,因此可以使用两个指针fast和slow同时对链表进行遍历,并且fast比slow超前n个节点。当fast遍历到链表的末尾时,slow就恰好处于倒数第n个节点。具体地,初始时fast和slow均指向头节点。首先使用fast对链表......
  • 嵌入式面试刷题(day1)
    (文章目录)前言最近我打算出一套笔试刷题的总结,帮助大家解决一些笔试的经典和容易出错的题目,并且将这些知识点讲解明白。我将会在牛客网上刷题,节省大家的时间将最值得关注的题目呈现给大家。一、由for(;;)引出的一系列问题在C/C++的for循环中,我们可以省略循环语句的各个参......
  • 2023 Java面试题,看看你能答出来几道题目。
    下面是近一个月市面上收集的几道面试题(有传统企业,也有电商),答案会不定期更新在本篇文章中,你如有不同的见解,也可在评论区交流。1、jwt如何应用2、聊聊权限校验框架security,它由哪些部分组成3、业务设计:10min内超过30次登录限制登录。使用redis中zset实现,限流算法4、springboot......
  • 面试必刷TOP101:8、链表中倒数最后k个结点
    一、题目输入一个长度为n的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为0的链表。二、题解2.1快慢指针第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指......
  • 【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!
    正文亲爱的小伙伴们,大家好!我是小米,一个热爱技术分享的程序员,今天我为大家带来了一篇有关美团面试题的热门话题:ConcurrentHashMap和Hashtable有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理解,所以务必认真学习,不仅仅是为了通过面试,更是为了提高自己在多线程编......
  • HTML+CSS面试题
    1、内元素和块级元素的区别?行内元素:不会独立出现在一行,单独使用的时候后面不会有换行符的元素。eg:span,strong,img,a等。这些元素,默认的高宽,总是其内容的高宽。并且,margin和padding值,只有左右有效。块级元素:独立在一行的元素,他们后面会自动带有换行符。eg:div,p,form,u......
  • Python高频面试题——如何在字符串中删除指定字符,掌握strip()、replace()和re.sub ()
    关于python删除字符串是面试python测试开发工程师的一个经典问题。问题很简单,但是一下子就能测试出来被面试者是否能够熟练的进行python相关编码工作!对于有些临时抱佛脚的同学来讲,一看删除,很自然就说用remove、del相关方法,听到这里,就知道面试者根本不知道这个答案啦!因为对于这个问......
  • 字符逆序改错题,面试中经常遇到,本人已经遇到两次!!
    题目:请找出下面代码的所有错误,说明:一下代码是把一个字符串倒序,如"abcd"倒序为"dcba",以下是引用的代码1#include"string.h"2main()3{4char*pSrc="hello,world";5char*pDest=NULL;6intiLen=strlen(pSrc);7pDest=(char*)......
  • 互联网大厂现状,一边裁员工,一边面试新人!
    前言经过二十年的快速发展,Android行业已经过了壮年,不再允许野蛮生长。目前进入老年期。放低门槛、跑马圈地的快速扩张时期已经过去,现在需求更加精细化。在这个时期,大厂开始对员工进行筛选、留下能力强、有竞争力的人才,而对那些工作效率低下的员工进行裁员。这种做法其实是合理的,任......