Skip to content

Commit

Permalink
开始栈
Browse files Browse the repository at this point in the history
  • Loading branch information
happyflyer committed Nov 30, 2020
1 parent 1d70eee commit 5e74127
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,3 +217,5 @@ O(1) < O(log_2n) < O(n) < O(nlog_2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
$$

## 3. [线性表](ch2/README.md)

## 4. [栈和队列](ch3/README.md)
60 changes: 60 additions & 0 deletions ch3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 栈和队列

三要素:

1. 逻辑结构
2. 数据的运算
3. 存储结构(物理结构)

## 1. 栈

### 1.1. 定义

栈是**只允许在一端进行插入或删除操作**的线性表。

- 栈顶:允许插入和删除的一端。
- 栈底:不允许插入和删除的一端。
- 空栈
- 栈顶元素
- 栈底元素

进栈顺序:

$$
a_1->a_2->a_3->a_4->a_5
$$

出栈顺序:

$$
a_5->a_4->a_3->a_2->a_1
$$

后进先出,Last In First OUT(LIFO)

### 1.2. 基本操作

- `InitStack(&S)`:初始化栈。构造一个空栈 $S$,分配内存空间。
- `DestroyStack(&S)`:销毁栈。销毁并释放栈 $S$ 所占用的内存空间。
- `Push(&S, x)`:进栈。若栈 $S$ 未满,则将 $x$ 加入使之成为新栈顶。
- `Pop(&S, &x)`:出战,若栈 $S$ 非空,则弹出栈顶元素,并用 $x$ 返回。
- `GetTop(S, &x)`:读栈顶元素。若栈 $S$ 非空,则用 $x$ 返回栈顶元素。
- `StackEmpty(S)`:判断一个栈 $S$ 是否为空。若 $S$ 为空,则返回 `true`,否则返回 `false`

$n$ 个不同的元素进栈,出栈元素的不同排列的个数为:

$$
\frac{1}{n+1} C^{n}_{2n}
$$

上述公式称为 卡特兰(Catalan)数。可采用数学归纳法证明(不要求掌握)。

$$
\frac{1}{5+1} C^{5}_{10}
=\frac{10*9*8*7*6}{6*5*4*3*2*1}
=42
$$

### 1.3. 顺序栈

### 1.4. 链式栈

0 comments on commit 5e74127

Please sign in to comment.