1.队列
转载数据结构队列
队列先进先出,入队判满q->rear<MAXSIZE-1,出队判空q->front==q->rear。
头尾相接的顺序存储结构的队列称为循环队列,其判空判满两种方法
办法一是设置一个标致变量flag,当front== rear,且flag=0时时为队列空,当front==rear,且flag=1时为队列满。
办法二是当队列空时没条件就是front=rear,当队列满时,条件是(rear+1)%QueueSize==front
2.栈
转载数据结构中的栈
栈先进后出
实现顺序栈,顺序栈是根据顺序存储结构来写的,底层是由数组来实现的
第一:定义栈的接口,接口内部定义了栈的常用操作方法
第二:然后就是接口的实现了
实现链式栈,链式栈的每一个节点要存的信息比较多,比如当前节点的数据值,还有下一个节点的地址
第一:定义节点
第二:根据节点定义栈的接口
第三:实现接口
栈的使用场景
1、表达式计算,遇见数字就入栈,遇见符号就出栈,然后把结果再入栈。
2、递归
3、括号匹配
3.表
转载数据结构中的链表
顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。
链式存储结构:地址可以连续也可以不连续的存储单元存储数据元素
1、单链表
对于每一个节点(比如上一节讲到的A,B,C三处)都有下一个节点的地址和当前节点的数据。
2、循环链表
对于循环链表,你可以想象成y一个闭环的链表。也就是最后一个元素又指向了第一个元素。
3、双向链表
从名字就可以看出,每一个节点既指向前驱又指向后继。
转载数据结构-数组
数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
*
4.图*
转载数据结构:图
图分有向图和无向图,在代码中描述主要用邻接链表和邻接矩阵,设置顶点和边的值。
5.多叉树
转载经典数据结构b树和b+树
B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。
根节点至少有两个子节点
每个节点有M-1个key,并且以升序排列
位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
其它节点至少有M/2个子节点
B+树是对B树的一种变形树,它与B树的差异在于:
有k个子结点的结点必然有k个关键码;
非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
转载数据结构字典树
字典树应用于统计和排序大量的字符串,其优点为最大限度地减少无谓的字符串比较,查询效率比哈希表还要高。字典树的核心思想为空间换时间。它利用字符串的公共前缀来降低查询时间的开销,以达到提高效率的目的。
6.二叉树
转载数据结构红黑树
红黑树特点
1.节点是红色或者黑色
2.根节点一定是黑色的
3.叶子节点是黑色的(NIL)[nil 节点就是空节点,在红黑树的实现中,nil 节点代替二叉树中的 NULL]
4.如果一个节点是红色的,则它的子节点必须是黑色的
5.从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点
转载数据结构:平衡二叉树
平衡二叉树在二叉查找树的基础之上增加了一个新的特性:每一个节点的左子树与右子树高度相差最多为1,这个高度的限制就可以避免出现树结构退化为线性链表的情况。因此,即便是在最坏情况下,平衡二叉树的查找,插入,删除时间复杂度都为O(log2n)。
转载数据结构-哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树
转载数据结构:堆
最大堆中,父节点的值比每一个子节点的值都要大
对于最小堆,根节点中的元素总是树中的最小值