栈、队列和数组
1. 栈和队列的基本概念
1.1 栈的定义
栈(Stack)是只允许在一端进行插入或删除操作的线性表。
1.2 栈的基本操作
InitStack(&S): 初始化栈。构造一个空栈S,分配内存空间。
DestroyStack(&L): 销毁栈。销毁并释放栈S所占用的内存空间。
Push(&S,x): 进栈,若栈S未满,则将x加入使之成为新栈顶。
Pop(&S,&x): 出栈,若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(S,&x): 读栈顶元素。若栈S非空,则用x返回栈顶元素。
其他常用操作:
StackEmpty(S): 判断一个栈是否为空。若S为空,则返回true,否则返回false。
1.3 队列的基本概念
队列(Queue)是只允许在一端进行插入,在另一端删除的线性表。
1.4 队列的基本操作
InitQueue(&Q): 初始化队列,构造一个空队列Q。
DestroyQueue(&Q): 销毁队列。销毁并释放队列Q所占用的内存空间。
EnQueue(&Q,x): 入队,若队列Q未满,将x加入,使之成为新的队尾。
DeQueue(&Q,&x): 出队,若队列Q为空,删除队头元素,并用x返回。
GetHead(Q,&x): 读队头元素,若队列Q非空,则将队头元素赋值给x。
其他常用操作:
QueueEmpty(Q): 判队列空,若队列Q为空返回true,否则返回false。
1.5 双端队列
2. 栈和队列的顺序存储结构
2.1 栈的顺序存储
顺序栈的定义:
共享栈:
2.2 队列的顺序实现
队列的定义:
3. 栈和队列的链式存储结构
3.1 栈的链式存储
链栈的定义:
3.2 队列的链式存储
定义:
初始化(带头结点):
初始化(不带头结点):
4. 多维数组的存储
5. 特殊矩阵的压缩存储
6. 栈、队列和数组的应用
6.1 栈的应用
6.1.1 括号匹配
用栈实现括号匹配:
依次扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。
匹配失败情况:
①左括号单身②右括号单身③左右括号不匹配
算法实现:
6.1.2 表达式求值
6.1.3 递归
6.2 队列的应用
队列应用——树的层次遍历,图的广度优先遍历