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+ # 队列
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,并修改。
Original file line number Diff line number Diff line change 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 )]
4036struct StackNode <T > {
@@ -59,7 +55,8 @@ struct StackNode<T> {
5955> ** 那么为什么还需要使用` Option ` 来封装呢?**
6056
6157> ` Option ` 是 Rust 里面的一个抽象类型,定义如下:
62- > ``` rust
58+ >
59+ ``` rust
6360pub 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 )]
118115struct Stack <T > {
You can’t perform that action at this time.
0 commit comments