1.介绍

数据结构是计算机科学的主要分支之一定义数据的组织,管理和存储以获得有效的访问和修改。基于存储,访问和使用类型,存在许多数据结构。

在本教程中,我们将调查多个高级数据结构。

2.线性数据结构

我们称数据结构为线性如果其元素形成线性序列。让我们讨论几种类型的线性数据结构。

2.1。自组织名单

一个自组织列表让我们重新排序其元素基于某些算法来提高平均元素访问时间。它类似于a链接名单除了重组能力。

在链表中,搜索过程要求将链表中的每个元素与项进行比较,直到找到项或到达链表的末尾。因此,在最坏的情况下,我们需要搜索N元素,在哪里N是列表的大小。自组织列表尝试通过将访问的元素移动到列表的头部来改进平均搜索时间。

让我们讨论几种决定重组过程的算法。我们可以从进入前面的方法开始。

在该技术中,如果访问元素,则将其移至列表的头部。该方法具有既理性和缺点。如果访问它,它易于实现,只要访问元素即可。另一方面,它可以优先考虑不经常访问的元素。例如,如果甚至访问了一个罕见的元素,它将移动到列表的头部,并且即使在未来未再次访问,也会给出最大优先级。因此,它可以打破列表的最佳结构:

接下来,我们有一个计数方法。在计数方法中,每个方法都会跟踪搜索的次数。基于下降顺序的计数值排序节点:

2.2。圆形缓冲

一种圆形缓冲或环形缓冲区是数据结构使用单个固定大小的缓冲区,就像连接端到端一样。名称是因为缓冲区的开始和结束已连接,它看起来像一个圆圈。

循环缓冲器对非圆形数据缓冲器的一个有用特性(例如,)在消耗一个时,它不需要在围绕周围的元素播放。如果使用非圆形缓冲器,则需要在消耗一个时换所有元素。

最初,循环缓冲区开始为空,具有定义的长度。在下图中,缓冲区的大小为:

让我们假设值一个是写在循环缓冲区的中心。精确的启动位置在循环缓冲区中并不重要:

之后,想象一下,在循环缓冲器 - 两个和三个中添加了两个元素 - 在一个之后放置:

如果删除了两个元素,则将删除循环缓冲区内的两个最旧的值。循环缓冲器使用FIFO(首先,首先)逻辑。在此示例中,一个和两个是第一个进入圆形缓冲器的。它们是第一个被移除的,在缓冲区内留下三个:

如果缓冲区有五个元素,那么它已满:

循环缓冲区的另一个有趣属性是,当它已满并且后续写入时,它开始覆盖最旧的数据。在当前示例中,添加了两个元素 - A&B - 将覆盖三个和四:

循环缓冲是具有固定最大尺寸的队列的绝佳选择。如果需要为队列采用最大大小,则循环缓冲区是完全理想的实现,因为所有队列操作都在恒定的时间内执行。但是,扩展循环缓冲器需要转换存储器,这是一种昂贵的操作。在这种情况下,链接的列表方法可以是更好的方法。

2.3。间隙缓冲区

间隙缓冲区是数据结构让我们执行群集在同一位置附近的有效插入和删除操作。这是文本编辑器中的流行数据结构,其中大多数文本更改在光标的当前位置或附近发生。该文本在两个连续的段中存储在一个大缓冲区中,它们之间的间隙用于插入新文本:

快速的棕色狐狸[]懒惰的狗

移动光标涉及将文本从间隙的一侧复制到另一侧。插入操作在第一个段的末尾添加新文本,而删除删除删除。

让我们用一个例子来解释这一点。初始状态如下所示:

狗的快速[]

用户插入新文本:

快速棕色狐狸跳跃[]在狗身上

用户在单词之后移动光标

快速的棕色狐狸跳过[]狗

用户添加了一个名为的新单词懒惰的,并且系统创造了一个新的差距:

敏捷的棕色狐狸跳过了懒狗

间隙缓冲区中的文本表示为两个单独的字符串,占用额外的空间很小。因此,与诸如链接列表之类的更复杂的数据结构相比,可以非常快速地搜索和显示它。但是,文本中的不同位置的操作和填充差距的位置(即,需要创建的新差距)可能需要复制大多数文本,这对于大文件尤其低效。

GAP缓冲区实现假设重新评名文本很少发生足够的成本可以通过更常见的便宜操作摊销。这使得GAP缓冲区更简单地替代绳索数据结构,用于文本编辑器

2.4。哈希阵列树

哈希阵列树是一种数据结构维护存储数据元素的单独内存片段或叶子数组。该数据结构的主要好处是,与动态阵列不同,在传染区中存储元素,它会减少由于自动调整大小所需的元素复制量。

散列数组树的顶级目录包含两个叶阵列的功率,尺寸与顶级目录相同。使用两个尺寸的原因是通过比特操作更快地用于更快的物理寻址,而不是使用商的算术运算和余数。

哈希阵列树的结构类似于具有链接列表碰撞链的哈希表,这是其名称的基础。此外,完整的哈希阵列树最多可以保持m ^ 2.元素数,其中m是顶级目录的大小。在上图中,顶级目录大小是四个。因此,可以在树中容纳最多16个元件。

3.非线性数据结构

非线性数据结构与线性数据结构相反,在线性数据结构中,元素不是以线性或连续的方式组织的。树或堆是非线性数据结构的一个例子。让我们在本节讨论其他一些非线性数据结构:

3.1。绳索

绳子是树数据结构由较小的字符串组成,用于存储和操纵长串。绳索,也知道电线为此目的是有效的。例如,文本编辑程序可以使用绳索表示文本,以便它可以有效地管理插入,删除和更新操作:

一根绳子是一种二叉树其中每个引线节点保持一个字符串和长度。在树中进一步的每个节点将所有叶子的长度的总和保持在其左子树中的所有叶子的总和。例如,重量九个的节点获得其值,因为其左子树具有长度(Hello_)六和(My_)三个。

具有两个子子的节点将字符串划分为两部分。左子树存储字符串的第一部分,右子树存储串的第二部分,节点的权重是第一部分的长度。

3.2。splay tree.

肖像树是一个二进制搜索树另一个属性用于再次快速搜索最近访问的元素。与二进制搜索树一样,splay树执行插入,查找和删除O (log N)时间。对于许多非随机操作序列,Splay树比其他搜索树更好。

SPLAY TREE的所有正常操作都基于基本操作,该操作被称为张开。元素的Splaying树的扮演树重新排列树,以便操作中的元素出现在树的根目录中。有几种方式可以实现。例如,可以执行基本的二进制搜索以在树中的操作中查找元素,然后使用树旋转技术在树顶部移动元素。还有其他自上而下的算法可以将搜索和树旋转在单个相中组合。

在上图中,我们正在搜索位于叶节点的元件20。在旋转的末端,元件20移动到树的根,并且树也平衡。

3.3。二进制堆

二进制堆是一种堆数据结构,它采用二叉树的形式常用于实现优先队列。二叉堆是带有两个附加约束的二叉树:

  • 二进制堆必须是一个完整的二叉树,该树要求所有级别的树都需要完整,除了可能是最后一个。此外,它还要求任务是,如果最后一个级别未完成,则必须从左到右填充所有元素
  • 存储在每个节点中的密钥大于或等于或等于或等于节点儿童中的键

父密钥大于或等于子密钥的堆被称为最大堆积。而如果父密钥小于或等于子密钥,则它被称为MIN-HEAP。

4。结论

在本文中,我们讨论了几种高级数据结构。雷竞技app官网网站

首先,我们解释了一种线性数据结构,并研究了几种候选数据结构,如自组织列表、循环缓冲区、间隙缓冲区和哈希数组树数据结构。

最后,我们了解了包括树木,堆和图形的非雷竞技app官网网站线性数据结构。在此类别中,我们讨论了绳索,splay树和二进制堆数据结构。

评论在本文上关闭!