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

|     |  <-- 栈顶(top)
|     |
| ... |
|  b  |
|  a  |  <-- 栈底(bottom)
+-----+

特性

  • 后进先出(Last In First Out, LIFO)
  • 栈顶(top):允许插入和删除的一端
  • 栈底(bottom):不允许操作的一端

数学性质

个不同元素依次进栈,出栈序列的个数为卡特兰数(Catalan Number):

基本操作

操作说明
InitStack(&S)初始化栈
StackEmpty(S)判断 S 是否为空栈
Push(&S, e)入栈(压栈)
Pop(&S, &e)出栈(弹栈)
GetTop(S, &e)读取栈顶元素
DestroyStack(&S)销毁栈

顺序存储结构

#define MAXSIZE 100
typedef struct {
    ElemType data[MAXSIZE];
    int top;  // 栈顶指针
} SqStack;

顺序栈的基本运算包括:初始化、判栈空、入栈、出栈、读栈顶元素。

链式存储结构

typedef struct StackNode {
    SElemType data;
    struct StackNode *next;
} StackNode, *LinkStack;

应用

栈常用于括号匹配、表达式求值(中缀转后缀)、递归调用等场景。