第一章 绪论
时间复杂度的算法(选择题经常出):一般不难,主要考察你对循环的掌握,注意while和do-while的区别。
数据结构:物理结构和逻辑结构
- 物理结构又叫存储结构,分为顺序存储、链式存储、散列存储、索引存储
- 逻辑结构分为线性结构和非线性结构:
- 线性结构:栈、队、顺序表等
- 非线性结构:树、图、网
- 如何区分:一个逻辑结构往往能被多个物理结构所表示,像栈可以是数组,也可以是链表,那么这种数据结构就肯定是逻辑结构,而线索二叉树必须要用链式存储,那么它就必定是物理结构。
算法的五大特性:有穷性、正确性、可行性、输入、输出。
- 顺口溜:有证(正))可出入
第二章 线性表
这一章内容内容非常重要,一定要多做算法题,它为后面的内容奠定了基础
- 线性表分为顺序表和链表:他们两个相比较
- 顺序表:支持随机访问,但是插入删除不方便,且大小固定,不好扩充
- 链表:不支持随机访问,但是插入删除灵活,且支持动态变化,大小不定
基础:链表的存储结构,和链表的插入删除(牢牢掌握)(选择填空必考!)
进阶:两个有序链表的合并,检查链表是否为循环链表、不带头结点的链表如何逆置
重点是:关于链表的各种算法(做天勤此章非选择题不要跳,全做!)必考!
第三章 栈和队列
相同点:都是线性表
不同点:栈先进后出,队列先进先出注意:队列和栈只是一种逻辑结构!
- 栈(顺序表示): int stack[100] , top = -1;
- 进栈:stack[++i] = 100;// stack[0] = 100;
- 栈:push, pop, 栈空、栈满
- 队:入队、出队、对空、队满(循环队列是重点)
- 栈(顺序表示): int stack[100] , top = -1;
考点:
该章节往往和前一章结合起来考,大家一定要牢牢掌握栈和队的特性,有些算法题利用它们的特性会简单很多。
题目经常会考大家:什么样的数据结构最适合当作队列?此题的考点在于大家对队列这一数据结构的掌握。
该题技巧: 我们是通过队头和队尾来对队列进行操作的,那么一个数据结构是否合适当做队列的关键在于这个数据结构能否很快的找到队头和队尾 ,比如带尾指针的单循环链表,它就很适合充当队列。
第四章 串(咱不考)
第五章 数组、矩阵、广义表
重点:通过数组的起始地址和下标,求出数组某元素的物理地址
例如 int a[100][100];//a的起始地址为2000
则a[i][j]的位置 = 2000 + (i * 100 +j) *4;
第六章 树与二叉树
树的存储结构:孩子兄弟表示法
typedef struct BTNode {
int data;
struct BTnode* lchild, rchild;
}BTNode;树的基础概念:度(树、结点)结点关系 层次 树的高度 完全二叉树、满二叉树(牢牢掌握)
- 二叉树的分支、叶子数量、高度等容易结合在一起出考题
- 总分支数 = 总节点数-1:例:m阶树(考题经常通过这个例子扩展)
n1 + 2n2 + …….+ mnM = N – 1;
树的遍历:先序 中序 后序(至少掌握递归的代码,非递归的尽量能写出来)
线索二叉树(考过但不多,需要掌握)
霍夫曼树(大题必考):给你一堆权重不同的元素,让你得到他们的编码
树和森林的转换以及森林的遍历
第七章 图
- 图的基本概念:有向图、无向图。
- 弧、路径、度(入度、出度)、完全图、连通分量和强连通分 量、连通图和强连通图
(特别注意连通图和强联通图、连通分量和强连通分量) - 图的存储结构:邻接矩阵、领接表(一定要能写出结构体)
- 图的遍历:深度遍历和广度遍历(掌握代码)
- 最小生成树:prim算法(了解算法,一般考操作,还没考过prim的代码)
- 最短路径:迪杰特斯拉算法(考操作不考代码但要了解代码)
- 拓扑排序:会操作就行
- 关键路径:没考过,了解
第八章 排序
该章节选择题和大题都很可能考
排序算法的优劣:一是看时间复杂度,二是看空间复杂度,三是稳定性
插入排序:直接插入、希尔排序、折半插入排序(直插和折半掌握算法)
交换排序:冒泡排序、快速排序(全都掌握算法,经常考快排的操作)
选择排序:简单选择排序(会代码)、堆排序(会操作)
二路并归排序、基数排序(会操作就行)
顺口溜:快些归队(堆) -> 时间复杂度为O(log2n)的
情绪不稳定,快些选一堆 -> 不稳定的算法
(这句顺口溜在大家的天勤书上是有的)
第九章 查找
这是我认为最容易出错的一章,注意B-树、平衡二叉树旋转、散列表
查找:通过一个算法查找一个元素的时间复杂度
查找基础算法:顺序查找、折半查找、分块查找
便于查找的逻辑结构:二叉排序树、平衡二叉树
B-数:
- 基础概念:m阶b树一个结点最多有m-1个关键字,
最少 m/2-1个关键字(根节点除外) - 通过上面的条件可以推理出m阶b树最多有m个分支,
最少有【m/2】(向上取整)个分支
b树的操作:增加关键字、删除关键字(难点,易出错)
- 基础概念:m阶b树一个结点最多有m-1个关键字,
散列表(必考):
构造方法:除留取余法(最常用)
冲突解决:线性探查法、平方探查法、链地址法(不容易产生堆积问题,效率较高)、再散列法
散列表效率:散列函数、冲突解决方法、装载因子α(n/m)
考题经常要你求查找成功和失败时的平均查找长度