mirror of
https://github.com/happyflyer/wangdao-data-structure.git
synced 2026-05-04 14:02:39 +08:00
栈和队列
三要素:
- 逻辑结构
- 数据的运算
- 存储结构(物理结构)
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