从各个数据结构名词集锦中作为初识庐山求全貌的入口,但求能够在不求甚解中求得清晰的学习脉络。
第一: 总的划分
1> 线性数据结构:
线性表:n个数据元素组成的有序序列,每个元素本身是非结构的原子类型。
举例:(A,B,C,D)
广义表:是顺序表的一种扩充,n个数据元素组成的有序序列,但是每个数据元素本身可以具有某种结构。
举例: (A,(B,C,D),F,(E,G))
2> 非线性数据结构:
树:数据元素之间具有一对多关系的结构,即除了根节点以外的节点只有一个前驱,可以有零之多个后继节点。
图:数据元素之间具有多对多关系的结构,即每个节点可以有多个前驱和多个后继,任意两个元素都可以相邻。
第二: 具体介绍
1>:线性表
顺序表:连续的存储单元存储线性表的数据元素,常用数组实现。
链 表:一组任意的存储单元存储线性表的数据元素。常见有单向链表和双向链表,
两者都是非循环链表,可以在表头或者表尾添加指针域指向表尾或者表头
成为单向循环链表和双向循环链表。
栈[Stack] :实施的操作限定在表尾进行。【LIFO:后进先出】
按照存储方式分为:顺序栈和链栈
队列[Queue]:实施的操作限定在表头和表尾进行。【FIFO:先进先出】
按照存储方式分为:顺序队列和链队列。顺序队列可以转换为循环队列。
2>:广义表
广义表作为一种复杂的数据结构,是线性表的扩充,能够表示树结构和图结构。
3>:树
1: 二叉树存储
@:数组存储结构:二叉树的大小和形态不发生大的变化时,适合用数组方式存储二叉树。
@:链式存储结构:
~ 使用二叉链结构,链表的每个链结点由3个域组成。数据域Data,左节点指针域,右 节点指针域。
~ 使用三叉链结构。比二叉链结构多一个指向双亲的指针域,方便找到双亲。
2:常见二叉树
@:二叉查找树:对于树中的每一个节点x,x处的项的值大于x的左子树的所有项的值,小于x的右子树的所有项的值。三个基本操作是:搜索,插入和删除。
@:AVL树和红黑树:二者是种高度平衡的二叉查找树。所谓平衡理想情况下是指对于每一个节点,它的左子树和右子树的高度是相等的。高度平衡指允许对理想情况做稍小改动:每一个节点的左子树和右子树的高度差至多为1.至于如何做到平衡,才是核心。
@:哈夫曼树:对于给定n个叶子节点,每个叶子节点赋予权值,所有叶子节点的带权路径最小的二叉树称为哈夫曼树,也称为最优树。
@:堆:是一种完全二叉树,同时对于任意节点x处的项的关键字大于和等于以x为根节点的子树的所有节点处关键字的值
4>:散列表
将关键字通过散列函数映射到特定未知,以加快查找的速度。主要运用的是:将顺序存储结构(数组)和链式存储结构(链表)相结合。利用各自优势,形成更加强大的结构。
以上是这两天对于数据结构的总结,下一步具体实现。