Skip to content

Commit ed35833

Browse files
author
Naupio Z.Y. Huang
committed
update queue and stack section (#291)
1 parent 3af7865 commit ed35833

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

data-structure/queue.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
# 33-02-data-struct-queue
1+
# 队列
22

3-
tags: RustPrimer
4-
5-
----------------
6-
7-
## 队列(queue)
3+
## 队列简介
84
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
95

106
>在队列的形成过程中,可以利用线性链表的原理,来生成一个队列。基于链表的队列,要动态创建和删除节点,效率较低,但是可以动态增长。队列采用的 **FIFO(first in first out)**,新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。
117
8+
## 队列实现
129
下面看一下我们使用 Vec 来实现的简单 Queue:
1310

1411
主要实现的`new( ), push( ), pop( )`三个方法
@@ -44,6 +41,7 @@ fn main() {
4441
}
4542
```
4643

44+
## 练习
4745
看起来比我们在上一节实现的Stack简单多了。不过这个Queue实现是有Bug的。
4846

4947
练习:在这个代码的上找到 Bug,并修改。

data-structure/stack.md

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,22 @@
1-
# 33-01-data-struct-stack
1+
#
22

3-
tags: RustPrimer
4-
5-
----------------
6-
## 栈(stack)
3+
## 栈简介
74

85
- 栈作为一种数据结构,是一种只能在**一端**进行**插入****删除**操作的特殊线性表。
96

107
- 它按照**先进后出**的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
118

129
>栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1310
14-
-----
15-
我们来看看栈的实现步骤:
11+
## 栈的实现步骤:
1612

1713
- [x] 1. 定义一个栈结构`Stack`
1814
- [x] 2. 定义组成栈结构的栈点`StackNode`
1915
- [x] 3. 实现栈的初始化函数`new( )`
2016
- [x] 4. 实现进栈函数`push( )`
2117
- [x] 5. 实现退栈函数`pop( )`
2218

23-
### 1. 定义一个栈结构`Stack`
19+
## 定义一个栈结构`Stack`
2420

2521
```rust
2622
#[derive(Debug)]
@@ -34,7 +30,7 @@ struct Stack<T> {
3430
- 第二行是定义了一个`Stack`结构体,这个结构体包含一个泛型参数`T`
3531
- 第三行比较复杂,在定义`StackNode`的时候介绍
3632

37-
### 2. 定义组成栈结构的栈点`StackNode`
33+
## 定义组成栈结构的栈点`StackNode`
3834
```rust
3935
#[derive(Clone,Debug)]
4036
struct StackNode<T> {
@@ -59,7 +55,8 @@ struct StackNode<T> {
5955
> **那么为什么还需要使用`Option`来封装呢?**
6056
6157
> `Option`是 Rust 里面的一个抽象类型,定义如下:
62-
> ```rust
58+
>
59+
```rust
6360
pub enum Option<T> {
6461
None,
6562
Some(T),
@@ -74,7 +71,7 @@ Option 里面包括元素,None 和 Some(T) ,这样就很轻松的描述了 n
7471

7572
[rustbyexample 的 Options with Results部分](http://rustbyexample.com/error/option_with_result.html)
7673

77-
### 3. 实现 `new( ) push( ) pop( )`
74+
## 实现 `new( ) push( ) pop( )`
7875
接下来是实现 stack 的主要功能了。
7976

8077
```rust
@@ -112,7 +109,7 @@ impl<T> Stack<T> {
112109

113110
- `pop( )`的功能是取出栈顶的元素,如果栈顶为 None 则返回 None。
114111

115-
### 完整代码(包含简单的测试)
112+
## 完整代码(包含简单的测试)
116113
```rust
117114
#[derive(Debug)]
118115
struct Stack<T> {

0 commit comments

Comments
 (0)