mirror of
https://github.com/happyflyer/wangdao-data-structure.git
synced 2026-04-29 13:11:36 +08:00
更新目录链接
This commit is contained in:
60
README.md
60
README.md
@@ -216,8 +216,62 @@ $$
|
||||
O(1) < O(log_2n) < O(n) < O(nlog_2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
|
||||
$$
|
||||
|
||||
## 3. [线性表](ch2/README.md)
|
||||
## 3. [线性表](ch2/README.md#线性表)
|
||||
|
||||
## 4. [栈和队列](ch3/README.md)
|
||||
- [定义](ch2/README.md#1-定义)
|
||||
- [基本操作](ch2/README.md#2-基本操作)
|
||||
- [顺序表](ch2/sequence/README.md#顺序表)
|
||||
- [静态分配](ch2/sequence/README.md#1-静态分配)
|
||||
- [动态分配](ch2/sequence/README.md#2-动态分配)
|
||||
- [单链表](ch2/single-link/README.md#单链表)
|
||||
- [带头结点](ch2/single-link/README.md#4-带头结点的单链表)
|
||||
- [不带头结点](ch2/single-link/README.md#3-不带头结点的单链表)
|
||||
- [双链表](ch2/double-link/README.md#双链表)
|
||||
- [循环链表](ch2/circular-link/README.md#循环链表)
|
||||
- [循环单链表](ch2/circular-link/README.md#1-循环单链表)
|
||||
- [循环双链表](ch2/circular-link/README.md#2-循环双链表)
|
||||
- [静态链表](ch2/static-link/README.md#静态链表)
|
||||
- [顺序表 V.S 链表](ch2/README.md#9-顺序表-vs-链表)
|
||||
|
||||
## 5. [串](ch4/README.md)
|
||||
## 4. [栈和队列](ch3/README.md#栈和队列)
|
||||
|
||||
- [栈](ch3/stack/README.md#栈)
|
||||
- [顺序栈](ch3/stack/README.md#1-顺序栈)
|
||||
- [共享栈](ch3/stack/README.md#18-共享栈)
|
||||
- [链栈](ch3/stack/README.md#2-链栈)
|
||||
- [队列](ch3/queue/README.md#队列)
|
||||
- [队列的顺序实现](ch3/queue/README.md#1-队列的顺序实现)
|
||||
- [队列的链式实现](ch3/queue/README.md#2-队列的链式实现)
|
||||
- [双端队列](ch3/README.md#3-双端队列)
|
||||
- [栈的应用](ch3/stack-applications/README.md#栈的应用)
|
||||
- [括号匹配](ch3/stack-applications/README.md#1-括号匹配)
|
||||
- [表达式求值](ch3/stack-applications/README.md#2-表达式求值)
|
||||
- [递归](ch3/stack-applications/README.md#3-递归)
|
||||
- [队列的应用](ch3/README.md#5-队列的应用)
|
||||
- 树的层次遍历
|
||||
- 图的广度优先遍历
|
||||
- 操作系统资源分配
|
||||
- [矩阵的压缩存储](ch3/matrix/README.md#矩阵的压缩存储)
|
||||
- [对称矩阵](ch3/matrix/README.md#3-对称矩阵)
|
||||
- [三角矩阵](ch3/matrix/README.md#4-三角矩阵)
|
||||
- [三对角矩阵](ch3/matrix/README.md#5-三对角矩阵)
|
||||
- [稀疏矩阵](ch3/matrix/README.md#6-稀疏矩阵)
|
||||
|
||||
## 5. [串](ch4/README.md#串)
|
||||
|
||||
- [定义](ch4/README.md#1-定义)
|
||||
- [基本操作](ch4/README.md#2-基本操作)
|
||||
- [串的存储结构](ch4/README.md#3-串的存储结构)
|
||||
- [顺序存储](ch4/README.md#31-顺序存储)
|
||||
- [链式存储](ch4/README.md#32-链式存储)
|
||||
- [基本操作的实现](ch4/README.md#4-基本操作的实现)
|
||||
- [求子串](ch4/README.md#41-求子串)
|
||||
- [串的比较](ch4/README.md#42-串的比较)
|
||||
- [求串在主串中的位置](ch4/README.md#43-求串在主串中的位置)
|
||||
- [朴素模式匹配算法](ch4/README.md#5-朴素模式匹配算法性能分析)
|
||||
- [KMP 算法](ch4/README.md#6-KMP-算法)
|
||||
- [改进思路](ch4/README.md#61-改进思路)
|
||||
- [next 数组](ch4/README.md#62-next-数组)
|
||||
- [nextval 数组](ch4/README.md#63-KMP-算法优化)
|
||||
|
||||
## 6. [树与二叉树](ch5/README.md#树与二叉树)
|
||||
|
||||
@@ -54,43 +54,43 @@ Tips:
|
||||
- 循环链表
|
||||
- 静态链表
|
||||
|
||||
## 4. [顺序表](sequence/README.md)
|
||||
## 4. [顺序表](sequence/README.md#顺序表)
|
||||
|
||||
- 优点:可随机存取,存储密度高。
|
||||
- 缺点:要求大片连续空间,改变容量不方便。
|
||||
|
||||
## 5. [单链表](single-link/README.md)
|
||||
## 5. [单链表](single-link/README.md#单链表)
|
||||
|
||||
- 缺点:无法逆向检索,有时候不太方便。
|
||||
|
||||
## 6. [双链表](double-link/README.md)
|
||||
## 6. [双链表](double-link/README.md#双链表)
|
||||
|
||||
### 6.1. 初始化
|
||||
### 6.1. [初始化](double-link/README.md#1-初始化)
|
||||
|
||||
头结点 `prior`、`next` 都指向 `NULL`。
|
||||
|
||||
### 6.2. 插入(后插)
|
||||
### 6.2. [插入(后插)](double-link/README.md#2-插入)
|
||||
|
||||
- 注意新插入结点、前驱结点、后继结点的指针修改。
|
||||
- 边界情况:新插入结点在最后一个位置,需特殊处理。
|
||||
|
||||
### 6.3. 删除(后删)
|
||||
### 6.3. [删除(后删)](double-link/README.md#3-删除)
|
||||
|
||||
- 注意删除结点的前驱结点、后继结点的指针修改。
|
||||
- 边界情况:如果被删除结点是最后一个数据结点,需特殊处理。
|
||||
|
||||
### 6.4. 遍历
|
||||
### 6.4. [遍历](double-link/README.md#4-遍历)
|
||||
|
||||
- 从一个给定结点开始,后向遍历、前向遍历的实现(循环的终止条件)。
|
||||
- 双链表不可随机存取,按位查找、按值查找都只能用遍历的方式实现。
|
||||
|
||||
## 7. [循环链表](circular-link/README.md)
|
||||
## 7. [循环链表](circular-link/README.md#循环链表)
|
||||
|
||||
- 如何判空
|
||||
- 如何判断结点 `p` 是否是表尾、表头结点
|
||||
- 如何在表头、表中、表尾插入、删除一个结点
|
||||
|
||||
## 8. [静态链表](static-link/README.md)
|
||||
## 8. [静态链表](static-link/README.md#静态链表)
|
||||
|
||||
用数组的方式实现的链表。
|
||||
|
||||
@@ -102,7 +102,7 @@ Tips:
|
||||
- 不支持指针的低级语言。
|
||||
- 数据元素数量固定不变的场景(如操作系统的文件分配表 FAT)。
|
||||
|
||||
## 9. 顺序表 VS 链表
|
||||
## 9. 顺序表 V.S 链表
|
||||
|
||||
三要素:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
栈和队列都是**操作受限**的线性表。
|
||||
|
||||
## 1. [栈](stack/README.md)
|
||||
## 1. [栈](stack/README.md#栈)
|
||||
|
||||
### 1.1. 定义
|
||||
|
||||
@@ -57,36 +57,36 @@ $$
|
||||
=42
|
||||
$$
|
||||
|
||||
### 1.3. [顺序栈](stack/README.md)
|
||||
### 1.3. [顺序栈](stack/README.md#1-顺序栈)
|
||||
|
||||
顺序存储,用静态数据实现,并需要记录栈顶指针。
|
||||
|
||||
基本操作
|
||||
|
||||
- 初始化(创)
|
||||
- 进栈(增)
|
||||
- 出栈(删)
|
||||
- 获取栈顶元素(查询)
|
||||
- [初始化(创)](stack/README.md#12-初始化栈)
|
||||
- [进栈(增)](stack/README.md#13-进入栈)
|
||||
- [出栈(删)](stack/README.md#14-出栈)
|
||||
- [获取栈顶元素(查询)](stack/README.md#15-获取栈顶元素)
|
||||
|
||||
两种实现
|
||||
|
||||
- 初始化时 `top=-1`
|
||||
- 初始化时 `top=0`
|
||||
|
||||
共享栈
|
||||
[共享栈](stack/README.md#18-共享栈)
|
||||
|
||||
- 两个栈共享同一片内存空间,两个栈从两边往中间增长。
|
||||
- 初始化:`S.top0 = -1;`,`S.top1 = MaxSize;`。
|
||||
- 栈满条件:`S.top0 + 1 == S.top1;`
|
||||
|
||||
### 1.4. [链栈](stack/README.md)
|
||||
### 1.4. [链栈](stack/README.md#2-链栈)
|
||||
|
||||
与单链表类似,只实现头插法、头结点出栈。
|
||||
|
||||
- 带头结点的链栈
|
||||
- 不带头结点的链栈
|
||||
|
||||
## 2. [队列](queue/README.md)
|
||||
## 2. [队列](queue/README.md#队列)
|
||||
|
||||
### 2.1. 定义
|
||||
|
||||
@@ -121,7 +121,7 @@ $$
|
||||
- `GetHead(Q, &x)`:读队头元素。若队列 $Q$ 非空,则用 $x$ 返回队头元素。
|
||||
- `QueueEmpty(Q)`:判断一个队列 $Q$ 是否为空。若 $Q$ 为空,则返回 `true`,否则返回 `false`。
|
||||
|
||||
### 2.3. [队列的顺序实现](queue/README.md)
|
||||
### 2.3. [队列的顺序实现](queue/README.md#1-队列的顺序实现)
|
||||
|
||||
实现思想:
|
||||
|
||||
@@ -146,7 +146,7 @@ $$
|
||||
- 增加 `tag` 变量用于标记最近一次操作是入队还是出队操作。
|
||||
- ...
|
||||
|
||||
### 2.4. [队列的链式实现](queue/README.md)
|
||||
### 2.4. [队列的链式实现](queue/README.md#2-队列的链式实现)
|
||||
|
||||
实现方式:
|
||||
|
||||
@@ -225,9 +225,9 @@ $$
|
||||
| 1,4,2,3 | 2,4,1,1 | 3,4,1,2 | 4,3,1,2 |
|
||||
| 1,5,3,2 | 2,4,3,3 | 3,4,2,1 | 4,3,2,1 |
|
||||
|
||||
## 4. [栈的应用](stack-applications/README.md)
|
||||
## 4. [栈的应用](stack-applications/README.md#栈的应用)
|
||||
|
||||
### 4.1. [括号匹配](stack-applications/README.md)
|
||||
### 4.1. [括号匹配](stack-applications/README.md#1-括号匹配)
|
||||
|
||||
实现思路:
|
||||
|
||||
@@ -241,7 +241,7 @@ $$
|
||||
- 右括号单身:扫描到右括号,但是此时栈空。
|
||||
- 左右括号不匹配:栈顶左括号,与当前的右括号不匹配。
|
||||
|
||||
### 4.2. [表达式求值](stack-applications/README.md)
|
||||
### 4.2. [表达式求值](stack-applications/README.md#2-表达式求值)
|
||||
|
||||
三种算数表达式:
|
||||
|
||||
@@ -263,7 +263,7 @@ $$
|
||||
中缀表达式求值 = 中缀转后缀 + 后缀表达式求值
|
||||
$$
|
||||
|
||||
### 4.3. [递归](stack-applications/README.md)
|
||||
### 4.3. [递归](stack-applications/README.md#3-递归)
|
||||
|
||||
实现递归表达式:
|
||||
|
||||
@@ -281,25 +281,25 @@ $$
|
||||
- 图的广度优先遍历
|
||||
- 多个进程争抢着使用优先的系统资源时,FCFS(First Come First Service,先来先服务)是一种常用策略。
|
||||
|
||||
## 6. [矩阵的压缩存储](matrix/README.md)
|
||||
## 6. [矩阵的压缩存储](matrix/README.md#矩阵的压缩存储)
|
||||
|
||||
数组的存储结构:
|
||||
|
||||
- 一维数组
|
||||
- 二维数组
|
||||
- [一维数组](matrix/README.md#1-一维数组)
|
||||
- [二维数组](matrix/README.md#2-二维数组)
|
||||
|
||||
特殊矩阵:
|
||||
|
||||
- 对称矩阵
|
||||
- [对称矩阵](matrix/README.md#3-对称矩阵)
|
||||
- 特点:对方阵中的任意一个元素,有 $a_{i,j}=a_{j,i}$。
|
||||
- 压缩:只存主对角线+下三角区(或主对角线+上三角区)。
|
||||
- 三角矩阵
|
||||
- [三角矩阵](matrix/README.md#4-三角矩阵)
|
||||
- 特点:上三角区全为常量(下三角矩阵);或下三角区全为常量(上三角矩阵)。
|
||||
- 压缩:按行优先/列优先规则依次存储非常量区域,并在最后一个位置存放常量 $c$。
|
||||
- 三对角矩阵
|
||||
- [三对角矩阵](matrix/README.md#5-三对角矩阵)
|
||||
- 特点:当 $|i-j|>1$ 时,$a_{i,j}=0$ ($1 \leq i, j \leq n$)。
|
||||
- 压缩:按行优先/列优先规则依次存储带状区域。
|
||||
- 稀疏矩阵
|
||||
- [稀疏矩阵](matrix/README.md#6-稀疏矩阵)
|
||||
- 特点:非零元素个数远少于零元素个数。
|
||||
- 压缩:只存储非零元素
|
||||
- 顺序存储:顺序存储三元组 `<行,列,值>`。
|
||||
|
||||
1
ch5/README.md
Normal file
1
ch5/README.md
Normal file
@@ -0,0 +1 @@
|
||||
# 树与二叉树
|
||||
Reference in New Issue
Block a user