当前位置 博文首页 > XSES_yasuoman的博客:数据结构——栈和队列
XSES_yasuoman的博客:数据结构——栈和队列
作者:[db:作者]
时间:2021-08-31 22:23
栈和队列
文章目录
- 栈和队列
- 栈(Stack)
- 栈的顺序存储结构(SqStack——Sequence Stack)
- 表示方法
- 基本操作
- 初始化 `InitStack(SqStack &S)`
- 判栈空 `StackEmpty(SqStack S)`
- 进栈 `Push(SqStack &S, ElemType x)`
- 出栈 `Pop(SqStack &S, ElemType &x)`
- 读栈顶元素 `GetTop(SqStack &S, ElemType &x)`
- 共享栈
- 栈的链式存储结构(LiStack——LinkStack)
- 表示方法
- 基本操作
- 初始化:`InitStack(LiStack &S)`
- 判栈空:`StackEmpty(LiStack S)`
- 进栈:`Push(LiStack &S, Linknode *p)`
- 出栈:`Pop(LiStack &S, ElemType e)`
- 读栈顶元素:`GetTop(LiStack S)`
- 栈的应用
- 括号匹配
-
- 表达式求值
- 后缀型:
- 中缀表达式转后缀表达式(手算)
- 💯中缀表达式转后缀表达式(机算)
- 后缀表达式转中缀表达式计算(手算)
- 后缀表达式转中缀表达式(机算)
- 💯计算机计算中缀表达式(非常重要的算法,无处不在)
- 前缀型:
- 中缀表达式转前缀表达式(手算)
- 前缀表达式转中缀表达式计算(手算)
- 前缀表达式转中缀表达式计算(机算)
- 迷宫求解
- 进制转换
- 队列(Queue)
- 队列的顺序存储结构(SqQueue——Sequence Queue)
- 表示方法
- 循环队列基本操作
- 初始化: `InitQueue(SqQueue &Q)`
- 判队空: `StackEmpty(SqQueue Q)`
- 入队: `EnQueue(SqQueue &Q, Elemtype x)` (使用方式 1 判断队满情况下)
- 出队: `DeQueue(SqQueue &Q, ElemType &x)`
- 读队头元素: `GetHead(SqQueue &Q, ElemType &x)`
- 队尾指针指向队尾元素情况
- 初始化: `InitQueue(SqQueue &Q)`
- 判队空: `StackEmpty(SqQueue Q)`
- 入队: `EnQueue(SqQueue &Q, Elemtype x)` (使用方式 1 判断队满情况下)
- 出队: `DeQueue(SqQueue &Q, ElemType &x)`
- 读队头元素: `GetHead(SqQueue &Q, ElemType &x)`
- 队列的链式存储结构(LinkQueue)
- 表示方法
- 基本操作(带头结点更加方便)
- 初始化: `InitQueue(LinkQueue &Q)`
- 判队空: `StackEmpty(LinkQueue Q)`
- 入队: `EnQueue(LinkQueue &Q, ElemType *x)`
- 出队: `DeQueue(LinkQueue &Q, ElemType &x)` ? 队尾元素出队列需要先将 rear 指向 front,否则丢失
- 读队头元素: `GetHead(LinkQueue &Q, LinkNode *x)`
- 队列的应用
- 树的层次遍历
- 图的广度优先遍历
- 缓冲区
- CPU 资源分配、竞争
- Conclusion
cs