存储数据的方式
结构:具有多个属性的变量
struct 结构名{ 类1 属性1; 类2 属性2; ...}
结构:n个元素构成的有序序列。有表头、表尾。
直接前驱、直接后继 反映元素之间一对一的邻接逻辑关系
结构:一个结构体类型的变量(一般包括1个数组、有效数据数量max)
struct 结构名1{ 类 s[max]; int max;}
结构:(头结点head+)n个变量
特点:变量均为同一结构体类型(包括自生属性、附近变量地址)
分类
struct 结构名1{ 类1 属性1; 类2 属性2; ... *struct 结构名1 Next;}
结构:(链)表
特点:先进后出(尾进头出)
操作:
返回类型 | 函数名、方法 | 操作 |
Stack | CreateStack | 生成空堆栈 |
void | push | 入栈 |
Item | pop | 出栈 |
bool | isEmpty | 是/否 为空 |
int | size | 栈的规模 |
bool | isFull | 是/否已满 |
结构:(链)表
特点:先进先出(头进头出)
操作:
返回类型 | 函数名、方法 | 操作 |
Queue | CreateQueue | 生成空队列 |
bool | isFull | 是/否 已满 |
bool | AddQ | 入队 |
bool | IsEmpty | 是/否 为空 |
Item | DeleteQ | 出队 |
结构:
包括二叉搜索树和完全二叉树,完全二叉树包括堆
结构(选其一):
操作:
返回类型 | 函数名、方法 | 操作 |
Item | CreateBinTree | 生成空树 |
bool | IsEmpty | 是/否 为空 |
viod | Traversal | 遍历树 |
遍历分类:
按照是否递归分为:
按照递归顺序分为:
其中非递归后序遍历较困难
结构:二叉树
特点:左小右大/左大右小
结构:二叉树(一般为一个顺序表)
特点:下标连续,即编号与下标相同
包括堆
结构:完全二叉树
特点:小/大 键值优先
操作:
返回类型 | 函数名、方法 | 操作 |
Item | CreateHeap | 生成相应的堆 |
bool | IsFull | 是/否 已满 |
bool | Insert | 入堆 |
bool | IsEmpty | 是/否 为空 |
Item | Delete… | 删除并返回相应的堆顶 |
结构:堆
特点:叶节点为一个独立的权值,父节点的权值为其两子节点之和
结构:线性表
特点:hash函数映射+冲突处理
操作:
冲突处理:
结构:邻接矩阵 或 邻接表
分类
操作:
Item | CreateHeap | 生成相应的堆 |
Item | CreateGraph | 生成一个无边图 |
void | InsertEdge | 增加新边E |
void | DeleteEdge | 删除边E |
bool | IsEmpty | 是/否 为空 |
void | DFS | 从点V深度优先搜索 |
void | BFS | 从点V广度优先搜索 |
见上
从指定点出发,每次加入一个最近的点。直至没有满足条件的点
每次加入 连接不连通区域的、权值最小的 边。直至没有满足条件的边。(可引入并查集表示是否联通)
Prim+最短路程+来向
拓扑排序
矩阵运算(每两个点之间找一遍最短路程,最多边数+1,保留最短路程)max-1次,
path[n+1][i][j]=min(path[n][i][j],path[n][i][k]+path[n][k][j]),1<=j<=max
每次添加一个(未输入的入度为0的)点
这里的入度为0指的是与未收录的点之间的关系
参考:
https://zhuanlan.zhihu.com/p/181498475
https://www.cnblogs.com/KillerAery/p/10878367.html
quick-find
union-find
加权union-find
复杂度
算法 | 平均时间O() | 最坏时间O() | 空间O() | 稳定性 |
简单选择排序 | N^2 | N^2 | 1 | × |
简单插入排序 | N^2 | N^2 | 1 | √ |
冒泡排序 | N^2 | N^2 | 1 | √ |
希尔排序(5,3,1) | N^2 | N^2 | 1 | × |
堆排序 | NlogN | NlogN | 1 | × |
快速排序 | NlogN | N^2 | 1 | × |
归并排序 | NlogN | NlogN | 1 | √ |
基数排序 | D(N+R) | D(N+R) | N+R | √ |
基础:键索引计数法
分类:低位优先(长度不同),高位优先(长度相同)
高位排序又有 快速排序 和 普通排序
不同后,匹配位置调整到正确的相应状态
某字母在子字符串的最后位置
快速的散列值计算
散列值相同后再比较
ACGT 0123,每个2bit
借助哈夫曼树
当前最长前缀字符串+前瞻
每次去掉最前面一位,快排,找子字符串
无具体