栈队列数组试题——解析(三)

一、单项选择题
01.栈的应用不包括( D ).
A.递归                        B.表达式求值                C.括号匹配                D.缓冲区
解析:缓冲区是队列实现的

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

03.下面( D  )用到了队列。
A.括号匹配                  B.表达式求值             C.递归                   D.FIFO页面替换算法
解析:ABC都只用到了栈,FIFO 先进先出 First In First Out,队列的特点

04.利用栈求表达式的值时,设立运算数栈OPEN。假设OPEN只有两个存储单元,则在下
列表达式中,不会发生溢出的是( B ).
A.A-B*(C-D)                B. (A-B)*C-D                C. (A-B*C)-D              D. (A-B) *(C-D)
解析:A:A入栈,B入栈,C入栈,D入栈,计算得R1(C-D),计算得R2(B*R1),计算得R3(A-R2)。共需4个存储单元
B:A入栈,B入栈,计算得R1(A-B),C入栈,计算得R2(R1*C),D入栈,计算得R3(R2-D)2
C:A入栈,B入栈,c入栈,计算得R1(B*C),计算得R2(A-R1),D入栈,计算得R3(R2-D)3
D:A入栈,B入栈,计算得R1(A*B),C入栈,D入栈,计算得R2(C*D),计算得R3(R1*R2)3

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

int f(int x){
        return ((x>0)?x*f(x-1):2);
int i;
i=f(f(1));

A.2                               B.4                                C.8                             D、无限递归
解析:递归模型包括递归出口和递归体,递归出口即终止递归的条件,递归体是递推关系式,根据语句有f(0)=2;f(1)=1*f(1-1)=1*2=2;f(f(1))=f(2)=2*f(1)=4;

06.设有如下递归函数,则计算F(8)需要调用该递归函数的次数为( C)。

int F(int n){
        if (n<=3)   return 1;
        else return F(n-2)+F(n-4)+1;

}

A.7                                B.8                              C.9                                D.10

07.设有如下递归函数,在func(func(5))的执行过程中,第4个被执行的func函数是(  C )

int func(int x){
        if(x<=3)  return 2;
        else return func(x-2)+func(x-4);

}

A. func(2)                        B. func (3)                C. func (4)                       D. func ( 5)
解析:f(5)进入后,首先执行内层参数 f(5-2)+f(5-4)=f(3)+f(1)=2+2=4,共执行三次func函数。然后执行func(func(5))=func(4)=func(2)+func(0)=4.因此第4个被执行的func函数是func(4)
 

08.对于一个问题的递归算法求解和其相对应的非递归算法求解,(B ).
A.递归算法通常效率高一些                                B.非递归算法通常效率高一些
C.两者相同                                                         D.无法比较
解析:递归算法代码整洁,容易理解,但是效率较低。包含很多重复计算
非递归算法代码繁琐复杂,但是效率比递归算法提高了数倍。

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

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

11.下列说法中,正确的是( A ).
A.消除递归不一定需要使用栈
B.对同一输入序列进行两组不同的合法入栈和出栈组合操作,所得的输出序列也一定相同
C.通常使用队列来处理函数或过程调用
D.队列和栈都是运算受限的线性表,只允许在表的两端进行运算
解析:使用栈可以模拟递归的过程,以此来消除递归,但对于单向递归和尾递归而言,可以用迭代的方式来消除递归,A正确。不同的进栈和出栈组合操作,会产生许多不同的输出序列,B错误。通常使用栈来处理函数或过程调用,C错误。队列和栈都是操作受限的线性表,但只有队列允许在表的两端进行运算,而栈只允许在栈顶方向进行操作,D错误。

12.【2009统考真题】为解决计算机主机与打印机之间速度不匹配的问题,通常设置一个打
印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是(B).
A.栈                                B.队列                     C.树                                 D.图
解析:在提取数据时必须要保持原来数据的顺序,所以缓冲区的特性是先进先出 就是队列

13.【2012统考真题】已知操作符包括“+”“-”“*”“/”“(”和“)”。将中缀表达式a+b-a* ( (c+d)/e-f)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次序的操作符。栈初始时为空时,转换过程中同时保存在栈中的操作符的最大个数是( A ).
A. 5                                    B.7                             C. 8                                 D.11
解析:在中缀表达式转后缀表达式的过程中,扫描到操作数时直接输出,扫描到操作符时根据其优先级进行相应的出入栈操作。有几点需要注意:①若遇到界限符“(”,则直接入栈;②若遇到界限符“)”,则不入栈,且会依次弹出栈顶运算符,直到遇到“(”为止,并删除“(”;③若当前运算符的优先级高于栈顶运算符或者遇到栈顶为“(”,则直接入栈;④若当前运算符的优先级低于或等于栈顶运算符,则依次弹出,直到遇到一个优先级高于它的运算符或者遇到“(”为止,之后将当前运算符入栈。

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

15.【2015统考真题】已知程序如下:

int S(int n)
{        return (n<=0)?0:s (n-1)+n;}
void main()
{        cout<<S(1);)}

程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是( A)。
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),所以栈底到栈顶的信息依次是main( ),s(1),s(0)。

16.【2016统考真题】设有如下图所示的火车车轨,入口和出口之间有n条轨道,列车的行
进方向均为从左至右,列车可驶入任意一条轨道。现有编号为1~9的9列列车,驶入的次序依次是8,4,2,5,3,9,1,6,7。若期望驶出的次序依次为1~9,则n至少是( C )。

A.2                                        B.3                                C.4                                 D.5

17.【2017统考真题】下列关于栈的叙述中,错误的是(C).
I.采用非递归方式重写递归程序时必须使用栈
Ⅱ.函数调用时,系统要用栈保存必要的信息
Ⅲ.只要确定了入栈次序,即可确定出栈次序
IV.栈是一种受限的线性表,允许在其两端进行操作
A.仅I                                  B.仅I、Ⅱ、Ⅲ               C.仅I、Ⅲ、IV        D.仅Ⅱ、Ⅲ、IV

18.【2018统考真题】若栈s1中保存整数,栈s2中保存运算符,函数F()依次执行下述各
步操作:
1)从S1中依次弹出两个操作数a和b。
2)从S2中弹出一个运算符op。
3)执行相应的运算b op a。
4)将运算结果压入S1中。
假定S1中的操作数依次是5,8,3,2(2在栈顶),S2中的运算符依次是*、-、+(+在栈顶)。调用3次F()后,S1栈顶保存的值是(  B ).
A.-15                        B.15                        C.-20                D.20

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值