一.c。
1.基本知识。
- 分支
- 循环
- 数组
- 函数(值传递,地址传递)
- 指针
- 结构体
二.c++。
1.基本知识。
(1)stl库。
- 容器(vector,map,set,string,stack,queue)
- 算法(max/min,swap,reverse,sort)
- 迭代器
(2)函数(值传递,地址传递,引用传递)。
三.算法。
1.基本知识。
(1)常见。
- 枚举
- 搜索
- 贪心
- dp
(2)暴力求解法。
- 枚举
- dfs
- bfs
四.绪论。
1.基本概念。
- 数据>数据对象>数据元素>数据项
- 抽象数据类型是一种数据结构
2.程序。
(1)数据结构。
- 逻辑结构(线性结构,树形结构,图形结构,集合结构)
- 存储结构(顺序存储,链式存储,索引存储,哈希存储)
- 数据运算(增,删,改,查)
(2)算法。
- 特性(有穷性,可行性,确定性,输入,输出)
- 评价算法好坏(健壮性,可读性,正确性,低存储,高效率)
- 效率(时间复杂度,空间复杂度)
五.线性表。
1.顺序表(代码)。
2.链表。
(1)单链表(代码)。
(2)双向链表。
(3)循环链表。
(4)静态链表。
六.栈、队列、串。
1.栈。
(1)特点:后进先出。
(2)卡特兰数:
。
(3)常见。
- 顺序栈(代码)
- 共享栈
- 链栈
(4)应用。
- 斐波那契数列
- 括号匹配
- 中缀表达式转后缀表达式
- 后缀表达式求值
2.队列。
(1)特点:先进先出。
(2)溢出:上溢出(扩充空间),假溢出(循环队列)。
(3)常见。
- 循环队列(代码)
- 双端队列
- 链队列
3.串。
(1)特点:数据元素为字符。
(2)kmp算法。
- next数组
- nextval数组(优化)
七.数组、广义表。
1.数组。
(1)对称矩阵(一维数组)。
(2)三角矩阵(一维数组)。
- 上三角矩阵
- 下三角矩阵
(3)对角矩阵(一维数组)。
- 三对角矩阵
(4)稀疏矩阵(三元组,十字链表)。
注:数组下标0开始,矩阵下标1开始。
2.广义表。
- 长度
- 深度
- 表头
- 表尾
八.树。
1.存储结构。
- 双亲表示法
- 孩子表示法
- 孩子兄弟表示法
2. 二叉树的基本形态。
- 空树
- 根结点
- 根结点+左子树
- 根结点+右子树
- 根结点+左子树+右子树
3.公式。
(1)树 。
- 树
- 树的边数等于所有顶点的度之和
(2)二叉树。
- 高度为h的二叉树至多有
个结点
- 二叉树第h层至多有
个结点
- 二叉树
(3)完全二叉树。
- 有n个结点的完全二叉树最后一个分支结点为
- 有n个结点的完全二叉树的高度为
- 完全二叉树第i个结点双亲为
,左孩子为
,右孩子为
4.树,森林,二叉树的遍历及转换。
(1)遍历。
- 树(先根遍历,后根遍历)
- 森林(先序遍历森林,后序遍历森林)
- 二叉树(先序遍历,中序遍历,后序遍历,层次遍历)
注:二叉树代码。
(2)转换。
树 | 森林 | 二叉树 |
先根遍历 | 先序遍历森林 | 先序遍历 |
后根遍历 | 后序遍历森林 | 中序遍历 |
注:树/森林转换为二叉树唯一。
4.哈夫曼树。
- 哈夫曼树不唯一
- 哈夫曼编码不唯一
- WPL(带权路径长度)唯一
九.图。
1.存储结构。
- 邻接矩阵
- 邻接表
- 邻接多重表
- 十字链表
2.公式。
- 有n个顶点的无向完全图边数为
- 有n个顶点的有向完全图弧数为
3.图的遍历。
(1)dfs(代码)。
(2)bfs(代码)。
4.最小生成树。
- 普里姆算法(稠密图)
- 克鲁斯卡尔算法(稀疏图)
5.最短路径。
- 迪杰斯特拉算法(单源最短路径)
- 弗洛伊德算法(多源最短路径)
6.拓扑排序(AOV网-无权无环)。
7.关键路径(AOE网-有权无环)。
(1)源点:入度为0的顶点。
(2)汇点:出度为0的顶点。
(3)关键路径:从源点到汇点的最长路径。
(4)求解关键路径。
- 事件最早发生时间(拓扑排序)
- 事件最迟发生时间(逆拓扑排序)
- 活动最早开始时间
- 活动最迟开始时间
- 活动时间余量(活动最迟开始时间-活动最早开始时间)
注:活动时间余量为0的是关键活动,关键活动组成关键路径。
十.查找。
1.静态查找。
(1)顺序查找。
(2)折半查找。
- 有序
- 顺序存储
(3)分块查找。
- 块间有序,块内无序
- 块内顺序存储
- 块内最优结点数(floor)
,有(ceil)
块
注:顺序查找,折半查找代码;ASL折半>分块>顺序。
2.动态查找。
(1)二叉排序树
(2)平衡二叉树
3.哈希查找。
(1)查找效率(与表长无关,与装填因子,散列函数,处理冲突的方法有关)。
(2)散列函数。
- 直接定址法(不产生冲突)
- 除留取余法(余数选不大于表长的最大质数)
(3)处理冲突的方法。
- 开放定址法(线性探测法,平方探测法)
- 链地址法
十一.排序。
1.内部排序(内存进行)。
(1)插入排序。
- 直接插入排序
- 折半插入排序
- 希尔排序
(2)选择排序。
- 简单选择排序
- 堆排序
(3)交换排序(代码)。
- 冒泡排序
- 快速排序
(4)归并排序
- 二路归并排序
(5)基数排序
2.外部排序(内外存进行)。
3.分类(内部排序)。
(1)比较次数与初始无关:选择排序、基数排序。
(2)移动次数与初始无关:归并排序、基数排序。
(3)排序趟数与初始有关:交换排序。
4.公式。
- 基于比较的排序至少要比较
。
5.记忆(基于比较的排序)。
(1)不稳定。
- 简希快速堆
(2)时间性能。
:归并快速堆
:其他
(3)空间性能。
:归并排序
:快速排序
:其他