有没有想过数据是如何数据库管理好了吗?或者它是如何在我们的指挥下如此容易地获得的?这是有可能的帮助数据结构. 借助数据结构,可以从数据库中高效地插入、更新、排列、重新排列、删除和检索数据。它们有助于以一种高度可访问的方式组织存储,以便对其进行修改或简单地检索。
数据结构有助于在更深层次上理解问题的本质,从而提供更好的理解。程序员使用它们以有序有效的方法求解算法。明智地选择数据结构可以提高计算机程序的性能。
数据结构每天都在被我们使用,无处不在。从在游戏中存储可能的移动到在咖啡馆存储我们通常选择的汉堡,数据结构无处不在。
常用的数据结构有堆栈、队列和堆. 它们是我们计算机中引入的最古老的数据结构,并且都是常用的。堆栈和队列都允许我们以两种非常可选的方式线性、动态地存储和检索数据项,而堆允许我们分层管理数据。了解它们的属性以及它们之间的差异非常重要,以便能够适当地实现它们。
堆栈、队列和堆之间的区别
堆栈 | 队列 | 堆 |
线性数据结构 | 线性数据结构 | 非线性数据结构 |
后进先出(后进先出) | 先进先出(FIFO) | 堆中的元素遵循堆属性 |
插入和删除从一端进行 | 队列中的插入和删除操作在列表的两端进行 | 二叉树结构,在插入和删除时比较节点 |
插入操作称为推操作。 | 插入操作称为排队操作。 | - - - - - - |
没有类型的堆栈 |
|
|
删除操作称为弹出操作。 | 删除操作称为出队列操作。 | - - - - - - |
我们只维护一个指针 | 我们维护两个指针来访问列表 | 不使用指针 |
内存是以连续、连续的方式分配的 | 内存是以连续、连续的方式分配的 | 内存是按随机顺序分配的 |
内存不足 | 内存可以扩展 | 记忆的碎片 |
有界容量 | 不一定是有界容量 | 可以调整大小 |
没有内存空间的浪费,因为只使用一个指针 | 使用两个指针会浪费内存空间 | 内存管理很复杂 |
用于递归和回溯 | 用于顺序算法 | 适用于堆排序(最佳性能),选择算法 |
堆栈是什么?
堆栈是一种线性的、动态的数据集,它限制数据只能从顶部添加或删除。简单地解释一下,这种数据结构的工作原理就像把一本书叠在另一本书上。我们放在最上面的最后一本书是最先从栈中取出的那本书。这意味着它遵循后进先出原则(LIFO)。
我们只能访问堆栈的一端来执行操作。上)。因此,当你想按照相反的顺序取出东西而不是放入东西时,你必须使用堆栈。最低的元素或插入在最前面的元素是堆栈中最长的。
可以使用此数据结构执行各种函数、解析器、表达式求值、递归算法或回溯算法。在堆栈上执行两个基本操作,即。推和流行。
推送操作通常用于将项目添加到堆栈中,而删除操作被理解为POP。
除此之外,我们还可以使用peek(返回堆栈顶部的项目)和isEmpty(检查堆栈是否包含项目)。由于堆栈上的操作数量是有限的,因此它被认为是一种受限制的数据结构。
堆栈可以通过数组或使用链表轻松实现。
什么是排队?
队列是一种抽象的数据类型,它是一种简单的数据结构,使用指针来表示动态集。
从列表中删除队列中的项目的顺序与将它们添加到列表中的顺序相同。这意味着他们遵循先进先出原则(FIFO)。举个例子,我们排队买车票;在这里,第一个进入队列的人也是第一个离开队列的。因此,当你想按照放东西的顺序取出东西时,你必须使用队列。
当数据插入到队列中时,它被称为enqueue,当数据从队列中删除时,它被调用出列。
队列可用于实现缓存、宽度优先搜索或先到先服务(FCFS)算法。它可以使用数组或更好的链表来实现。
什么是堆?
堆是一种非线性的数据结构,这意味着它分层地排列数据。它是一个基于树的结构,它保持了堆始终是一个完整的二叉树的事实,树的所有层次都是满的。它还遵循heap属性,该属性表示所有节点都大于或等于或小于或等于它的每个子节点。堆有两种类型,即最小堆(父节点小于其子节点)和最大堆(父节点大于子节点)。
堆需要大量的计算时间,内存管理也很复杂。
作者
乌帕萨尼虾
麻省理工学院的世界和平大学