From 5e741276ab0958501ef93b11242838d92878c750 Mon Sep 17 00:00:00 2001 From: lifei <1058235935@qq.com> Date: Mon, 30 Nov 2020 21:53:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ ch3/README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 ch3/README.md diff --git a/README.md b/README.md index f423692..9100816 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/ch3/README.md b/ch3/README.md new file mode 100644 index 0000000..a53b1f7 --- /dev/null +++ b/ch3/README.md @@ -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. 链式栈