File tree Expand file tree Collapse file tree 2 files changed +13
-18
lines changed Expand file tree Collapse file tree 2 files changed +13
-18
lines changed Original file line number Diff line number Diff line change 1
- # 33-02-data-struct-queue
1
+ # 队列
2
2
3
- tags: RustPrimer
4
-
5
- ----------------
6
-
7
- ## 队列(queue)
3
+ ## 队列简介
8
4
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
9
5
10
6
> 在队列的形成过程中,可以利用线性链表的原理,来生成一个队列。基于链表的队列,要动态创建和删除节点,效率较低,但是可以动态增长。队列采用的 ** FIFO(first in first out)** ,新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。
11
7
8
+ ## 队列实现
12
9
下面看一下我们使用 Vec 来实现的简单 Queue:
13
10
14
11
主要实现的` new( ), push( ), pop( ) ` 三个方法
@@ -44,6 +41,7 @@ fn main() {
44
41
}
45
42
```
46
43
44
+ ## 练习
47
45
看起来比我们在上一节实现的Stack简单多了。不过这个Queue实现是有Bug的。
48
46
49
47
练习:在这个代码的上找到 Bug,并修改。
Original file line number Diff line number Diff line change 1
- # 33-01-data-struct-stack
1
+ # 栈
2
2
3
- tags: RustPrimer
4
-
5
- ----------------
6
- ## 栈(stack)
3
+ ## 栈简介
7
4
8
5
- 栈作为一种数据结构,是一种只能在** 一端** 进行** 插入** 和** 删除** 操作的特殊线性表。
9
6
10
7
- 它按照** 先进后出** 的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
11
8
12
9
> 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
13
10
14
- -----
15
- 我们来看看栈的实现步骤:
11
+ ## 栈的实现步骤:
16
12
17
13
- [x] 1 . 定义一个栈结构` Stack `
18
14
- [x] 2 . 定义组成栈结构的栈点` StackNode `
19
15
- [x] 3 . 实现栈的初始化函数` new( ) `
20
16
- [x] 4 . 实现进栈函数` push( ) `
21
17
- [x] 5 . 实现退栈函数` pop( ) `
22
18
23
- ### 1. 定义一个栈结构` Stack `
19
+ ## 定义一个栈结构` Stack `
24
20
25
21
``` rust
26
22
#[derive(Debug )]
@@ -34,7 +30,7 @@ struct Stack<T> {
34
30
- 第二行是定义了一个` Stack ` 结构体,这个结构体包含一个泛型参数` T ` 。
35
31
- 第三行比较复杂,在定义` StackNode ` 的时候介绍
36
32
37
- ### 2. 定义组成栈结构的栈点` StackNode `
33
+ ## 定义组成栈结构的栈点` StackNode `
38
34
``` rust
39
35
#[derive(Clone ,Debug )]
40
36
struct StackNode <T > {
@@ -59,7 +55,8 @@ struct StackNode<T> {
59
55
> ** 那么为什么还需要使用` Option ` 来封装呢?**
60
56
61
57
> ` Option ` 是 Rust 里面的一个抽象类型,定义如下:
62
- > ``` rust
58
+ >
59
+ ``` rust
63
60
pub enum Option <T > {
64
61
None ,
65
62
Some (T ),
@@ -74,7 +71,7 @@ Option 里面包括元素,None 和 Some(T) ,这样就很轻松的描述了 n
74
71
75
72
[ rustbyexample 的 Options with Results部分] ( http://rustbyexample.com/error/option_with_result.html )
76
73
77
- ### 3. 实现 ` new( ) push( ) pop( ) `
74
+ ## 实现 ` new( ) push( ) pop( ) `
78
75
接下来是实现 stack 的主要功能了。
79
76
80
77
``` rust
@@ -112,7 +109,7 @@ impl<T> Stack<T> {
112
109
113
110
- ` pop( ) ` 的功能是取出栈顶的元素,如果栈顶为 None 则返回 None。
114
111
115
- ### 完整代码(包含简单的测试)
112
+ ## 完整代码(包含简单的测试)
116
113
``` rust
117
114
#[derive(Debug )]
118
115
struct Stack <T > {
You can’t perform that action at this time.
0 commit comments