栈和队列
Posted k-will
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。
栈和队列
1.栈
栈:栈是一种仅支持在表位插入删除的线性表。栈底称为表头,栈顶称为表尾。
栈的存储结构:
-
顺序存储:
-
顺序栈:用一组地址连续的内存单元依次存放从栈底到栈顶元素的结构。
栈的入栈操作是:栈顶指针+1,元素入栈。
栈的出栈操作是:元素出栈,栈顶指针-1。
-
共享栈:两个栈共享栈顶空间,两个栈底设置为两端。
共享栈是为了更有效的利用存储空间,两个栈的空间相互协调,当两个栈顶指针相邻=1时候栈满。
-
-
链式存储:
-
链栈:便于多个栈共享存储空间,且不存在栈满上溢的情况,通常使用单链表实现。
链栈规定没有头节点,指针指向栈顶元素。
采用链栈便于节点的插入删除。
-
栈的应用:
-
数制转换:
N=(N/d)d+N%d*
由于输出的顺序是由个位到十位往上的,所以我们可以用栈来依次存储输出的结果,最后依次出栈次序就对了。
-
括号匹配:
每读入一个右括号就查看栈顶,如果有左括号就将其出栈,不然就是非法情况,如果读入左括号,就将其入栈。起始结束条件都是栈为空。
-
行编辑问题:
-
表达式求值问题:
-
迷宫求解问题:
-
递归问题:
2.队列
队列:允许插入一端叫做队尾,允许删除一端叫做队头,是从队尾入队,队头出队的结构。
队列的存储结构:
- 顺序存储:
- 队列
- 双端队列:允许在队头队尾都进行插入删除操作的结构。
- 循环队列:在普通队列的基础上加了两个指针,分别指向队头和队尾元素。
- 链式存储:
- 链队列:需要两个分别表示队头队尾的指针。
队列的应用:
-
层次遍历:
-
根节点入队
-
若队空则结束遍历,反之重复3
-
队列第一个节点出队,访问。如果有左孩子就入队,如果有右孩子就入队,返回2
-
-
计算机系统中的应用:
- 解决主机与外部设备之间速度不匹配问题:设置缓冲区解决输入速度比打印速度快的问题,缓冲区就是一个队列。
- 解决多用户引起的资源竞争问题:消息队列。
以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章