什么是数据结构? 数据结构是一种组织数据的方式,以便有效地使用数据。不同类型的数据结构适用于不同类型的应用程序,有些数据结构对特定任务高度专业化。例如,B-树特别适合于数据库的实现,而编译器实现通常使用哈希表来查找标识符。(来源: 维基页面 )
什么是线性和非线性数据结构?
- 线性的: 如果一个数据结构的元素形成一个序列或一个线性列表,则称其为线性结构。示例:数组。链表、堆栈和队列
- 非线性: 如果节点的遍历本质上是非线性的,则称数据结构为非线性的。示例:图形和树。
在不同的数据结构上可以执行哪些不同的操作?
- 插入 ? 在给定的数据项集合中添加新数据项。
- 删除 ? 从给定的数据项集合中删除现有数据项。
- 穿越 ? 仅访问每个数据项一次,以便对其进行处理。
- 搜索 ? 如果数据项存在于给定的数据项集合中,请找出该数据项的位置。
- 分类 ? 以某种顺序排列数据项,即数字数据按升序或降序排列,字母数字数据按字典顺序排列。
- 数组的大小是固定的,链表的大小是动态的。
- 在元素数组中插入和删除新元素的成本很高,而插入和删除都可以在链表中轻松完成。
- 链接列表中不允许随机访问。
- 链表的每个元素都需要为指针留出额外的内存空间。
- 阵列具有更好的缓存局部性,这会在性能上产生很大的差异。
什么是堆栈,在哪里可以使用它? 堆栈是一种线性数据结构,其顺序为LIFO(后进先出)或FILO(先进后出),用于访问元素。堆栈的基本操作包括: 推,弹出,偷看
Stack的应用:
什么是队列,它与 堆栈以及它是如何实现的? 队列 是一个线性结构,它遵循 F 第一 我 N F 第一 O ut(FIFO)用于访问元件。主要包括以下对队列的基本操作: 排队 , 前后 堆栈和队列的区别在于删除。在堆栈中,我们删除最近添加的项目;在队列中,我们删除最近添加最少的项目。队列和堆栈都可以使用数组和链表实现。
什么是中缀、前缀、后缀符号?
- 中缀符号: 十、 + Y–运算符写入其操作数之间。这是我们写表达式的惯常方式。一种表达方式,如
A * ( B + C ) / D
- 后缀符号(也称为“反向波兰符号”): X Y + 运算符在其操作数之后写入。上面给出的中缀表达式等价于
A B C + * D/
- 前缀符号(也称为“波兰语符号”): +X Y 运算符写在操作数之前。上面给出的表达式相当于
/ A * + B C D
在这些符号之间转换: 点击这里
什么是链表及其类型?
链表是一种线性数据结构(如数组),其中每个元素都是一个单独的对象。列表中的每个元素(即节点)都由两项组成——数据和对下一个节点的引用。链表的类型:
- 单链表: 在这种类型的链表中,每个节点存储列表中下一个节点的地址或引用,最后一个节点的下一个地址或引用为空。例如1->2->3->4->NULL
- 双链接列表: 在这里 这里有两个与每个节点相关联的参考,一个参考点指向下一个节点,另一个参考点指向前一个节点。例如:空23->空
- 循环链表: 循环链表是一种链表,其中所有节点都连接成一个圆。结尾没有空值。循环链表可以是单循环链表或双循环链表。例如1->2->3->1[最后一个节点的下一个指针指向第一个]
图的BFS和DFS使用哪些数据结构?
- 队列用于BFS
- 堆栈用于DFS。 DFS也可以使用递归实现 (注意递归也使用函数调用堆栈)。
可以在每个节点中使用单指针变量实现双链接吗? 双链表可以用一个指针实现。看见 XOR链表——一种内存高效的双链表
如何使用队列实现堆栈? 堆栈可以使用两个队列来实现。让待实现的堆栈为“s”,用于实现的队列为“q1”和“q2”。堆栈“s”可以通过两种方式实现:
- 方法1(通过增加推送操作的成本)
- 方法2(通过提高pop操作成本)参见 使用队列实现堆栈
如何使用堆栈实现队列? 队列可以使用两个堆栈实现。让待实现的队列为q,用于实现q的堆栈为stack1和stack2。q可以通过两种方式实现:
- 方法1(通过增加排队操作的成本)
- 方法2(通过增加出列操作的成本)参见 使用堆栈实现队列
应该使用哪种数据结构来实现LRU缓存?
我们使用两种数据结构来实现LRU缓存。
- 队列 它是使用双链表实现的。队列的最大大小将等于可用的总帧数(缓存大小)。最近使用的页面将接近后端,最近使用的页面将接近前端。
- 杂烩 以页码为键,相应队列节点的地址为值。看见 如何实现LRU缓存方案?应该使用什么样的数据结构?
如何检查给定的二叉树是否为BST? 如果对二叉树的顺序遍历进行了排序,那么二叉树就是BST。其思想是简单地进行顺序遍历,并在遍历时跟踪之前的键值。如果当前键值更大,则继续,否则返回false。看见 检查二叉树是否为BST的程序 更多细节。
链表问题
树遍历问题
将DLL就地转换为二叉树 看见 已排序DLL到平衡BST的就地转换
将二叉树就地转换为DLL 看见 将给定的二叉树转换为双链表|集1 , 将给定的二叉树转换为双链表|集2
删除单链表中的给定节点 在单链表中,如果只有一个指向要删除节点的指针,如何删除它?
反转链表 编写一个函数来反转链表
检测链表中的循环 编写一个C函数来检测链表中的循环 .
字典和拼写检查使用哪种数据结构? 字典和拼写检查的数据结构?
你可能也喜欢
- 实践 测验 关于数据结构
- 最后时刻的笔记 –DS
- 常见面试难题
- 亚马逊最常被问到的面试问题
- 微软最常被问到的面试问题
- 埃森哲最常被问到的面试问题
- 常见的OOP面试问题
- 常见的C++面试问题,
- 常见的C编程面试问题|集1
- 常见的C编程面试问题|集2
- 常见DBMS面试问题|集1
- 常见操作系统面试问题|集1
- 常见的数据结构面试问题
- 常见面试问题
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论