第一章 绪论
第二章 线性表
- 顺序存储特点:一定是连续的,只存元素,不存元素之间的关系。
链式存储特点:存元素之间的关系,结点有两个域,数据域和指针域 - 顺序表:算法时间效率分析,平均比较/移动次数,查找n+1/2,添加n/2,删除 n-1/2
- 链表判空:一个头指针为head的带头结点的单链表,head->next==NULL ,表示链表为空。
循环链表:L->next=L, 双向链表L->next=L,L->prior=L。 - 双向链表的插入删除:
第三章 栈和队列
- 特殊之处:它们的特点在于基本操作的特殊性:栈必须按"后进先出"的规则进行操作,栈的插入和删除操作都是在栈顶完成;而队列必须按"先进先出"的规则进行操作,在队首进行删除操作,在队尾进行插入操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。
- 栈和队列的入出序列
- 空标志:
栈:顺序栈:base=top,链栈:栈顶指针就是链表的头指针:S=null
队:链队:Q.front==Q.rear 顺序队:相当于数组,front和rear是下标,Q.rear = Q.front = 0;
循环队列(顺序存储)
队列长度(元素个数)
- 顺序栈的基本操作:
初始化栈
入栈
出栈
取栈顶元素
第四章 串、数组、广义表
-
串: 空白串是由一个或多个空格组成,空串是没有数据元素
-
串特殊性:是一个特殊的线性表,特殊在数据元素是一个字符。
-
串:KMP next nextval next数组求法 nextval求法
(3)串“ababaaababaa”的next数组为( )。
A.012345678999 B.012121111212 C.011234223456 D.0123012322345
答案:C
(4)串“ababaabab”的nextval为( )。
A.010104101 B.010102101 C.010100011 D.010101011
答案:A -
数组地址计算(多维数组,特殊矩阵压缩存储,稀疏矩阵压缩存储(非零元用三元组存储,存为一个三元组线性表))
看首地址,行存储还是列存储,每个元素占多少字节,数组的下标是0还是1 -
广义表:表头表尾,长度深度
第五章 树和二叉树
- 二叉树:
- 给遍历序列还原树(先序遍历依次访问的是根节点,把根节点放到中序遍历序列里一分为二,分为左子树右子树,再在子树里面继续分)
- 线索二叉树:
非空的指针仍然指向孩子结点。
根据先序,中序,后序写出遍历序列,按照序列的顺序用上图方法添加线索。
好处:
- 树和森林与二叉树的转换
树和森林与二叉树的转换
- 哈夫曼树和哈夫曼编码。
第六章 图
- 关于图的基本术语
- 会根据图写邻接表和邻接矩阵
- 会根据深度优先和广度优先(都要结合给出的存储结构)写图的遍历序列,画出相应的生成树。
- 最小生成树
prim算法,kruscal算法 - 拓扑排序AOV 根据结构和这个思想写出拓扑序列
- 关键路径AOE
- 最短路径:dijkstra
第七章 查找
折半查找
计算:(每层的元素个数*层数 之和)除总元素个数
二叉排序树
- 二叉排序树的构造
哈希表
算法设计
自测题
第八章 排序
插入排序 | 时间 | 空间 | 稳定性 |
---|---|---|---|
直接插入排序 | O(n^2) | O(1) | 稳定 |
折半插入排序 | O(n^2) | O(1) | 稳定 |
希尔排序 | O(n1.25)— O(1.6n1.25) | O(1) | 不稳定 |