数据结构:八大数据结构分类

数组(Array)

数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。数组可以说是最基本的数据结构,在各种编程语言中都有对应。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。
在这里插入图片描述

栈( Stack)

栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。
在这里插入图片描述

队列(Queue)

队列(Queue)与栈类似,都是采用线性结构存储数据。它们的区别在于,栈采用 LIFO 方式,而队列采用先进先出,即FIFO(First in First Out)。队列中没有元素时,称为空队列。
在这里插入图片描述

链表( Linked List)

链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。
在这里插入图片描述

树( Tree)

树是典型的非线性结构,它是包括,2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。

  • 二叉树

    • 是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。
      在这里插入图片描述
    • 由二叉树定义以及图示分析得出二叉树有以下特点:
      每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。
      左子树和右子树是有顺序的,次序不能任意颠倒。
      即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
  • 完全二叉树

    • 对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
      在这里插入图片描述
    • 特点:
      叶子结点只能出现在最下层和次下层。
      最下层的叶子结点集中在树的左部。
      倒数第二层若存在叶子结点,一定在右部连续位置。
      如果结点度为1,则该结点只有左孩子,即没有右子树。
      同样结点数目的二叉树,完全二叉树深度最小。
      注:满二叉树一定是完全二叉树,但反过来不一定成立。
  • 满二叉树

    • 在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
      在这里插入图片描述
    • 满二叉树的特点有:
      叶子只能出现在最下一层。出现在其它层就不可能达成平衡。
      非叶子结点的度一定是2。
      在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。
  • AVL 树

    • AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写。AVL树属于树的一种,而且它也是一棵二叉搜索树,不同的是他通过一定机制能保证叉搜索树的平衡 ,平衡的二叉搜索树的查询效率更高。
    • 特点:
      AVL树是一棵二叉搜索树。
      AVL树的左右子节点也是AVL树。
      AVL树拥有二叉搜索树的所有基本特点。
      每个节点的左右子节点的高度之差的绝对值最多为1 ,即平衡因子为范围为[-1,1]。
      在这里插入图片描述
  • 红黑树

    • 是一种自平衡=叉查找树, 1972年由Rudolf Bayer发明,它与AVL树类似,都在插入和删除操作时能通过旋转操作保持叉查找树的平衡,以便能获得高效的查找性能。它可以在O(logn)时间内做查找,插入和删除等操作。红黑树是2-3-4树的种等同,但有些红黑树设定只能左边是红树,这种情况就是2-3树的-一种等同了。对于AVL树来说,红黑树牺牲了部分平衡性以换取插入删除操作时少量的旋转操作,整体来说性能要优于AVL树。
      在这里插入图片描述
    • 特点:
      节点是红色或黑色。
      根节点是黑色。
      每个叶节点( NIL节点)是黑色的。
      每个红色节点的两个子节点都为黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
      从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
      最长路径不超过最短路径的2倍
      在这里插入图片描述
  • B-树
    在这里插入图片描述
    所有键值分布在整颗树中
    搜索有可能在非叶子结点结束,在关键字全集内做一次查找,性能逼近二分查找,每个节点最多拥有m个子树
    根节点至少有2个子树
    分支节点至少拥有m/ 2颗子树(除根节点和叶子节点外都是分支节点)
    所有叶子节点都在同一层、每个节点最多可以有m-1个key,并且以升序排列
    在这里插入图片描述

  • B+树
    在这里插入图片描述
    B+Tree是在BTree的基础之上做的一种优化,变化如下:
    B+Tree每个节 点可以包含更多的节点,这个做的原因有两个,第一个原因是为了降低树的高度,第二个原因是将数据范围变为多个区间,区间越多,数据检索越快
    非叶子节点存储key,叶子节点存储key和数据
    叶子节点两两指针相互连接(符合磁盘的预读特性),顺序查询性能更高
    在这里插入图片描述

图(Graph)

图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。
在这里插入图片描述

堆(Heap)

堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构。
在这里插入图片描述

散列表(Hash)

散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值