线性结构和非线性结构的分类
- 线性结构有:线性表、栈、队列、串(最多只有一个直接前驱和一个直接后继);
- 非线性结构有:树、图、多维数组、广义表;
存储结构
顺序存储、链式存储、索引存储、散列存储
数据元素之间的逻辑结构
集合、线性结构、树型结构、图状结构
循环队列中根据头尾指针计算元素的个数
(rear-front+N)% N
二叉树的性质
- 前序遍历和中序遍历结果相同的二叉树为所有结点只有右子树的二叉树。
- 前序遍历和后序遍历结果相同的二叉树为只有根节点的二叉树。
哈夫曼树的带权路径长度
- 如果哈夫曼树有n个叶结点,则该树共有2n-1个结点。
图
- 具有n个顶点的无向图最多有n(n-1)/2条边;
- 在一个图中,所有点的度数之和等于边的数目的2倍。
- 图的深度优先遍历相当于树的先序遍历。
- 图的广度优先遍历相当于树的层次遍历。
排序
1. 直接插入排序
在待排的一组数中,先比较前两个数,按大小顺序排列好,然后每次从后面待排的数中依次取出一个元素,把它直接插入到前面合适的位置,如从重复下去,直到完成排序。
如(8,5,5,10,7,3)
第一轮:{8},(5,5,10,7,3) ————> {5,8},(5,5,10,7,3)
第二轮:{5,8},(5,5,10,7,3) ————> {5,5,8},(10,7,3)
第三轮:{5,5,8},(10,7,3) ————> {5,5,8,10},(7,3)
第四轮:{5,5,8,10},(7,3) ————> {5,5,7,8,10},(3)
第五轮:{5,5,7,8,10},(3) ————> {3,5,5,7,8,10}
完成排序:
{3,5,5,7,8,10}
算法的时间复杂度为O(n^2),空间复杂度为O(1)
2. 冒泡排序
在待排的一组数中,让相邻的两个数两两比较,如果他们的顺序与排序要求相反,则相互交换彼此的位置,让最大的数下沉或者上冒,直至排序完成。
如 (8,5,5,10,7,3)
第一轮:(5,5,8,7,3),{10}
第二轮:(5,5,7,3),{8,10}
第三轮:(5,5,3),{7,8,10}
第四轮:(3,5),{5,7,8,10}
第五轮:{3,5,5,7,8,10}
完成排序:
{3,5,5,7,8,10}
算法的时间复杂度为O(n^2)
3. 简单选择排序
在待排序的所有记录中,选取关键字最小的记录,