📜  数据结构简介 | 10 种最常用的数据结构

📅  最后修改于: 2021-09-08 12:49:32             🧑  作者: Mango

数据结构是在计算机中组织数据以便有效使用数据的一种特殊方式。这个想法是为了减少不同任务的空间和时间复杂性。

以下是一些流行数据结构的概述:

  1. 数组:数组是存储在连续内存位置的项目的集合。这个想法是将多个相同类型的项目存储在一起。这使得通过简单地将偏移量添加到基值,即数组的第一个元素的内存位置(通常由数组的名称表示)来更容易地计算每个元素的位置。

  2. 链表:与数组一样,链表是一种线性数据结构。与数组不同,链表元素不存储在连续的位置;元素使用指针链接。

    链表

  3. 堆栈:堆栈是一种线性数据结构,它遵循执行操作的特定顺序。顺序可能是 LIFO(后进先出)或 FILO(先进后出)。

    在栈中主要进行以下三个基本操作:

    • 推送:在堆栈中添加一个项目。如果堆栈已满,则称其为溢出条件。
    • Pop:从堆栈中移除一个项目。这些项目以它们被推送的相反顺序弹出。如果堆栈为空,则称其为下溢条件。
    • Peek 或 Top:返回堆栈的顶部元素。
    • isEmpty:如果堆栈为空则返回true,否则返回false。
  4. 队列:与堆栈一样,队列是一个线性结构,它遵循特定的操作顺序。顺序是先进先出 (FIFO)。队列的一个很好的例子是资源的任何消费者队列,其中先来的消费者首先得到服务。堆栈和队列之间的区别在于删除。在堆栈中,我们删除最近添加的项目;在队列中,我们删除最近最少添加的项目。

    主要对队列进行以下四个基本操作:

    • 入队将项目添加到队列中。如果队列已满,则称其为溢出条件。
    • Dequeue:从队列中移除一个项目。项目以与推送相同的顺序弹出。如果队列为空,则称其为下溢条件。
    • Front:从队列中获取最前面的项目。
    • 后:从队列中获取最后一项。
  5. 二叉树:与数组、链表、堆栈和队列这些线性数据结构不同,树是分层数据结构。二叉树是一种树数据结构,其中每个节点最多有两个孩子,分别称为左孩子和右孩子。它主要使用链接来实现。

    二叉树由指向树中最顶层节点的指针表示。如果树为空,则 root 的值为 NULL。二叉树节点包含以下部分。

    1. Data
    2. Pointer to left child
    3. Pointer to the right child
  6. 二叉搜索树:在二叉搜索树中是一棵具有以下附加属性的二叉树:
    • 节点的左子树只包含键小于节点键的节点。
    • 节点的右子树仅包含键大于节点键的节点。
    • 左右子树也必须是二叉搜索树。
  7. 堆:堆是一种特殊的基于树的数据结构,其中树是一棵完整的二叉树。通常,堆可以有两种类型:
    • Max-Heap:在 Max-Heap 中,存在于根节点的键必须是其所有子节点存在的键中最大的。对于该二叉树中的所有子树,相同的属性必须递归为真。
    • 最小堆:在最小堆中,存在于根节点的键必须是其所有子节点存在的键中的最小值。对于该二叉树中的所有子树,相同的属性必须递归为真。

  8. 散列数据结构:散列是一种重要的数据结构,它旨在使用称为散列函数的特殊函数,该函数用于将给定值与特定键映射,以便更快地访问元素。映射的效率取决于所使用的哈希函数的效率。

    让散列函数H(x) 映射数组中索引 x%10 处的值 x。例如,如果值列表是 [11, 12, 13, 14, 15] 它将分别存储在数组或哈希表中的位置 {1, 2, 3, 4, 5} 。

  9. 矩阵:矩阵表示按行和列的顺序排列的数字集合。有必要用圆括号或方括号将矩阵的元素括起来。

    下面显示了一个包含 9 个元素的矩阵。

  10. Trie: Trie 是一种高效的信息重新Trie val 数据结构。使用 Trie,搜索复杂度可以达到最佳限制(密钥长度)。如果我们将键存储在二叉搜索树中,一个平衡良好的 BST 将需要与 M * log N 成正比的时间,其中 M 是最大字符串长度,N 是树中键的数量。使用 Trie,我们可以在 O(M) 时间内搜索密钥。但是,惩罚是针对 Trie 存储要求的。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程