Skip to content

Commit

Permalink
update queue and stack section (#291)
Browse files Browse the repository at this point in the history
  • Loading branch information
Naupio Z.Y. Huang committed May 2, 2016
1 parent 3af7865 commit ed35833
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
10 changes: 4 additions & 6 deletions data-structure/queue.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
# 33-02-data-struct-queue
# 队列

tags: RustPrimer

----------------

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

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

主要实现的`new( ), push( ), pop( )`三个方法
Expand Down Expand Up @@ -44,6 +41,7 @@ fn main() {
}
```

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

练习:在这个代码的上找到 Bug,并修改。
Expand Down
21 changes: 9 additions & 12 deletions data-structure/stack.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
# 33-01-data-struct-stack
#

tags: RustPrimer

----------------
## 栈(stack)
## 栈简介

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

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

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

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

### 1. 定义一个栈结构`Stack`
## 定义一个栈结构`Stack`

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

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

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

### 3. 实现 `new( ) push( ) pop( )`
## 实现 `new( ) push( ) pop( )`
接下来是实现 stack 的主要功能了。

```rust
Expand Down Expand Up @@ -112,7 +109,7 @@ impl<T> Stack<T> {

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

### 完整代码(包含简单的测试)
## 完整代码(包含简单的测试)
```rust
#[derive(Debug)]
struct Stack<T> {
Expand Down

0 comments on commit ed35833

Please sign in to comment.