数据结构–栈(Stack)的基本概念
线性表是具有相同数据类型的n (
n
≥
0
n\ge0
n≥0)个数据元素的有限序列,其中n为表长,当n = 0时线性表是一个空表。若用L命名线性表,则其一般表示为:
L
=
(
a
1
,
a
2
.
.
.
,
a
i
,
a
i
+
1
,
.
.
.
,
a
n
)
L = (a_1,a_2 ...,a_i, a_{i+1},...,a_n)
L=(a1,a2...,ai,ai+1,...,an)
栈(Stack)是只允许在一端进行插入或删除操作的线性表
栈的定义
栈(Stack)是 只允许在一端进行插入或删除操作 \color{green}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作的线性表
重要术语:栈顶、栈底、空栈
线性表的基本操作
创 & 销:
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。
栈的常考题型
进栈顺序:
a
→
b
→
c
→
d
→
e
a \to b \to c \to d \to e
a→b→c→d→e
有哪些合法的出栈顺序?
n个不同元素进栈,出栈元素不同排列的个数为 1 n + 1 C 2 n n \frac{1}{n+1}C_{2n}^n n+11C2nn。上述公式称为卡特兰(catalan)数,可采用数学归纳法证明(不要求掌握)。
上题答案:
1
5
+
1
C
10
5
=
42
\frac{1}{5+1}C_{10}^5 = 42
5+11C105=42