栈和队列

Posted k-will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈和队列相关的知识,希望对你有一定的参考价值。

栈和队列

1.栈

栈:栈是一种仅支持在表位插入删除的线性表。栈底称为表头,栈顶称为表尾。

栈的存储结构:

  • 顺序存储:

    • 顺序栈:用一组地址连续的内存单元依次存放从栈底到栈顶元素的结构。

      栈的入栈操作是:栈顶指针+1,元素入栈。

      栈的出栈操作是:元素出栈,栈顶指针-1。

    • 共享栈:两个栈共享栈顶空间,两个栈底设置为两端。

      共享栈是为了更有效的利用存储空间,两个栈的空间相互协调,当两个栈顶指针相邻=1时候栈满。

  • 链式存储:

    • 链栈:便于多个栈共享存储空间,且不存在栈满上溢的情况,通常使用单链表实现。

      链栈规定没有头节点,指针指向栈顶元素。

      采用链栈便于节点的插入删除。

栈的应用:

  • 数制转换:

    N=(N/d)d+N%d*

    由于输出的顺序是由个位到十位往上的,所以我们可以用栈来依次存储输出的结果,最后依次出栈次序就对了。

  • 括号匹配:

    每读入一个右括号就查看栈顶,如果有左括号就将其出栈,不然就是非法情况,如果读入左括号,就将其入栈。起始结束条件都是栈为空。

  • 行编辑问题:

  • 表达式求值问题:

  • 迷宫求解问题:

  • 递归问题:

2.队列

队列:允许插入一端叫做队尾,允许删除一端叫做队头,是从队尾入队,队头出队的结构。

队列的存储结构:

  • 顺序存储:
    • 队列
    • 双端队列:允许在队头队尾都进行插入删除操作的结构。
    • 循环队列:在普通队列的基础上加了两个指针,分别指向队头和队尾元素。
  • 链式存储:
    • 链队列:需要两个分别表示队头队尾的指针。

队列的应用:

  • 层次遍历:

    1. 根节点入队

    2. 若队空则结束遍历,反之重复3

    3. 队列第一个节点出队,访问。如果有左孩子就入队,如果有右孩子就入队,返回2

  • 计算机系统中的应用:

    • 解决主机与外部设备之间速度不匹配问题:设置缓冲区解决输入速度比打印速度快的问题,缓冲区就是一个队列。
    • 解决多用户引起的资源竞争问题:消息队列。

以上是关于栈和队列的主要内容,如果未能解决你的问题,请参考以下文章

数据结构栈和队列OJ练习(栈和队列相互实现+循环队列实现)

Java栈和队列·下

数据结构复习--栈和队列--栈

栈和队列-第五节:JavaC++Python实现栈和队列

数据结构初阶:栈和队列

栈和队列-上