栈和队列的应用

2022.09.12

栈在括号匹配中的应用

栈在表达式求值中的应用

精要总结:

  1. 中缀转前缀表达式,左优先
  2. 中缀转后缀表达式,右优先
  3. 后缀计算:1 2 +,看到运算符,弹出两个数计算;看到数字,压入栈中
  4. 前缀计算:+ 1 2,看到第二个数字,弹出运算符;看到运算符,压入栈中

下面是中缀转后缀的C语言实现

 

栈在递归中的应用

栈在层次遍历中的应用

例题

  1. 栈的应用不包括( )。 A. 递归 B. 进制转换 C. 迷宫求解 D. 缓冲区

    【答案】:D

  2. 表达式a*(b+c)-d的后缀表达式是( )。 A. abcd*+- B. abc+*d- C. abc*td- D. -+*abcd

    【答案】:abc+*d-,B

  3. 下面( )用到了队列. A.括号匹配 B.迷宫求解 C.页面替换算法 D.递归

    【答案】:C

  4. 利用栈求表达式的值时,设立运算数栈 OPEN。假设 OPEN 只有两个存储单元,则在下列表达式中,不会发生溢出的是( )。 A. A-B*(C-D) B. (A-B)*C-D C. (A-B*C)-D D. (A-B)*(C-D)

    【答案】:

    A:[AB] [-*(],溢出

    B:[{A-BC*-D-}] [] -> B

  5. 执行完下列语句段后,i 的值为( )。

    A. 2 B. 4 C. 8 D. 无限递归

    【答案】:B

    f(f(1))=f(2)[4]
    f(1)[2]
    f(0)[2]
  6. 对于一个问题的递归算法求解和其相对应的非递归算法求解,( )。 A. 递归算法通常效率高一些 B. 非递归算法通常效率高一些 C. 两者相同 D. 无法比较

    【答案】:B

  7. 执行函数时,其局部变量一般来用( )进行存储。 A. 树形结构 B.静态链表 C.栈结构 D.队列结构

    【答案】:C

  8. 执行( )操作时,需要使用队列作为辅助存储空间。 A. 查找散列(哈希)表 B. 广度优先搜索图 C. 前序(根)遍历二叉树 D. 深度优先搜索图

    【答案】:B

  9. 下列说法中,正确的是( )。 A. 消除递归不一定需要使用栈 B. 对同一输入序列进行两组不同的合法入栈和出栈组合操作,所得的输出序列也一定相同 C. 通常使用队列来处理函数或过程调用 D.栈和队列都是受限的线性表。只允许在表的两边进行运算

    【答案】:A

  10. 【2009 统考真题】为解決计算机主机与打印机速度不匹配的问题:通常路置一个打印数据缓冲区,主机将要输出的数据依次写入该缓沖区,而打印积则依天从该缓沖区中取出数据。该缓冲区的逻辑结构应该是( )。 A. 栈 B. 队列 C. 树 D. 图

    【答案】:B

  11. 【2012 统考真题】已知操作符包括+,-,*,/,(,)。将中级表达式 a+b-a*((c+d)/e-f)+g转换为等价的后级表达式 ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。栈初始时为空时,转换过程中同时保存在栈中的操作符的最大个数是( )。 A. 5 B. 7 C. 8 D. 11

    【答案】:+g,max: 5

    []

    ab+acd+e/f-*-g+

    A

  12. 【2014 统考真题】假设栈初始为空,将中缀表达式a/b+(c*d-e*f)/g转换为等价的后缀表达式的过程中,当扫描到f时,栈中的元素依次是( )。 A. +(*- B. +(-* C. /+(*-* D. /+-*

    【答案】:f)/g,B

    [+(-*]

    ab/cd*e

  13. 【2015统考真题】己知程序如下:

    程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是()。 A. main()-s(1)-s(0) B. S(0) -S(1) -main() C. main()-s(0)-S(1) D. S(1) -S (0) -main ()

    【答案】:[main() - S(1) - S(0)],A

  14. 假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别表达式中的括号是否配对,以字符"\0" 作为算术表达式的结束符.

     

  15. 按下图所示铁道进行车厢调度(注意,两侧铁道均为单向行驶道,火车调度站有一个用于调度的“栈道”),火车调度站的入口处有n节硬座和软座车厢(分别用H和S 表示)等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软座车厢都被调整到硬座车厢之前。

    截屏2022-09-12 下午2.27.45

  16. 利用一个栈实现以下递归函数的非递归计算:

    Pn = 1, n=0 Pn = 2x, n=1 Pn = 2xP_{n-1}(x) - 2(n-1)P_{n-2}(x), n>1