数据结构和算法

数据+数据元之间的关系+数据上得到操作

线性表

按照存储方式分类

1.顺序存储:顺序表、栈、队列。随机访问效率高、随机插入效率低

2.链式存储:链表。随机访问效率低、随机插入效率高(定位+修改指针)

按照访问方式

1.随机访问:一般线性表。链表、顺序表

2.受限访问:受限线性表。栈、队列

各结构细节

1.链表

数据结构的入门结构,树和图的基础,还可以实现栈和队列

1.1常用操作:插入(头插和尾插),删除结点,查找,排序,反转等

1.2单链表中带头结点的好处、循环链表中带尾结点的好处

1.3衍生复杂结构:双向链表、循环链表、跳跃链表

2.栈

只有一端可以操作的数据结构,如栈变量,最普遍变量,函数栈,栈溢出(stackoverflow)

2.1常用操作:入栈和出栈

2.2衍生结构:顺序栈、链栈、共享栈

2.3栈与递归的关系,栈的应用(数值表达式的计算,前缀、中缀、后缀表达式,括号匹配)

3.队列

两端分别只能进行插入和删除操作,操作系统中广泛使用

3.1常用操作:一端插入、另一端删除(入队,出队)

3.2判空判满条件:标志位法、牺牲元素空间法

3.3衍生结构法:循环队列、链队、双端队列

树-二叉树

基本概念及结论

1.深度、高度、层次,最多、最少节点数,度(n0=n2+1),(带权)路径长度,满二叉树,完全二叉树

2.存储方式:顺序存储(数组,父子结点下标规律),链式存储(二叉链表)

遍历

1.按照顺序分类:先序遍历,中序遍历,后序遍历,层次遍历

2.按照编码方式分类:递归和非递归

其他知识点

1.最优二叉树(哈夫曼树,带权路径长度最短),数据压缩和编码

2.树和森林的转换

3.变态二叉树

3.1二叉排序树(二叉搜索树)

3.2二叉平衡数。是二叉排序树的强大版本,能够自平衡,避免二叉排序树退化为一个链表。其插入、查找、删除的最好最坏时间复杂度都为O(logN)

3.3红黑树、败者树、KD树、线段树

3.4堆:所有父节点的值都不大(小)于子节点的值的完全二叉树称为小(大)顶堆。

3.5非二叉树的经典:B树(B-tree)、B+树(B+tree)、B*树、Trie树、R树、M树

图-结构

分类

有向图&无向图,完全图,(强)连通图

存储结构

邻接矩阵:n阶方阵,适合稠密图;对于无向图:对称矩阵;对于有向图:行是出度,列是入度

邻接表:适合稀疏图,不唯一,顶点表+邻接表

遍历

深度优先遍历(借助栈)

广度优先遍历(借助队列)

相关的重要算法

最小生成树算法:即权值最小的生成树,Prim算法,Kruskal算法

拓扑排序:不唯一

最短路径:Dijkstra算法、Floyd算法

关键路径