Number the H1 and H2 headings.

This commit is contained in:
Yudong Jin
2023-01-31 03:37:50 +08:00
parent dbbc1adc4f
commit eb0afc98ec
44 changed files with 263 additions and 257 deletions

View File

@@ -2,7 +2,7 @@
comments: true
---
# 双向队列
# 5.3. 双向队列
对于队列,我们只能在头部删除或在尾部添加元素,而「双向队列 Deque」更加灵活在其头部和尾部都能执行元素添加或删除操作。
@@ -10,7 +10,7 @@ comments: true
<p align="center"> Fig. 双向队列的操作 </p>
## 双向队列常用操作
## 5.3.1. 双向队列常用操作
双向队列的常用操作见下表(方法命名以 Java 为例)。
@@ -223,7 +223,7 @@ comments: true
let isEmpty = deque.isEmpty
```
## 双向队列实现
## 5.3.2. 双向队列实现
双向队列需要一种可以在两端添加、两端删除的数据结构。与队列的实现方法类似,双向队列也可以使用双向链表和循环数组来实现。

View File

@@ -2,7 +2,7 @@
comments: true
---
# 队列
# 5.2. 队列
「队列 Queue」是一种遵循「先入先出 first in, first out」数据操作规则的线性数据结构。顾名思义队列模拟的是排队现象即外面的人不断加入队列尾部而处于队列头部的人不断地离开。
@@ -12,7 +12,7 @@ comments: true
<p align="center"> Fig. 队列的先入先出特性 </p>
## 队列常用操作
## 5.2.1. 队列常用操作
队列的常用操作见下表(方法命名以 Java 为例)。
@@ -256,7 +256,7 @@ comments: true
let isEmpty = queue.isEmpty
```
## 队列实现
## 5.2.2. 队列实现
队列需要一种可以在一端添加,并在另一端删除的数据结构,也可以使用链表或数组来实现。
@@ -1202,11 +1202,11 @@ comments: true
以上代码仍存在局限性,即长度不可变。然而,我们可以通过将数组替换为列表(即动态数组)来引入扩容机制,有兴趣的同学可以尝试实现。
## 两种实现对比
## 5.2.3. 两种实现对比
与栈的结论一致,在此不再赘述。
## 队列典型应用
## 5.2.4. 队列典型应用
- **淘宝订单**。购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。
- **各种待办事项**。例如打印机的任务队列、餐厅的出餐队列等等。

View File

@@ -2,7 +2,7 @@
comments: true
---
# 栈
# 5.1.
「栈 Stack」是一种遵循「先入后出 first in, last out」数据操作规则的线性数据结构。我们可以将栈类比为放在桌面上的一摞盘子如果需要拿出底部的盘子则需要先将上面的盘子依次取出。
@@ -14,7 +14,7 @@ comments: true
<p align="center"> Fig. 栈的先入后出特性 </p>
## 栈常用操作
## 5.1.1. 栈常用操作
栈的常用操作见下表(方法命名以 Java 为例)。
@@ -255,7 +255,7 @@ comments: true
let isEmpty = stack.isEmpty
```
## 栈的实现
## 5.1.2. 栈的实现
为了更加清晰地了解栈的运行机制,接下来我们来自己动手实现一个栈类。
@@ -1023,7 +1023,7 @@ comments: true
}
```
## 两种实现对比
## 5.1.3. 两种实现对比
### 支持操作
@@ -1048,7 +1048,7 @@ comments: true
综上,我们不能简单地确定哪种实现更加省内存,需要 case-by-case 地分析。
## 栈典型应用
## 5.1.4. 栈典型应用
- **浏览器中的后退与前进、软件中的撤销与反撤销**。每当我们打开新的网页,浏览器就将上一个网页执行入栈,这样我们就可以通过「后退」操作来回到上一页面,后退操作实际上是在执行出栈。如果要同时支持后退和前进,那么则需要两个栈来配合实现。
- **程序内存管理**。每当调用函数时,系统就会在栈顶添加一个栈帧,用来记录函数的上下文信息。在递归函数中,向下递推会不断执行入栈,向上回溯阶段时出栈。

View File

@@ -2,7 +2,7 @@
comments: true
---
# 小结
# 5.4. 小结
- 栈是一种遵循先入后出的数据结构,可以使用数组或链表实现。
- 在时间效率方面,栈的数组实现具有更好的平均效率,但扩容时会导致单次入栈操作的时间复杂度劣化至 $O(n)$ 。相对地,栈的链表实现具有更加稳定的效率表现。