波波的数据结构-栈

系列文章目录

波波的数据结构属实上的快,这里将会写些pta的解析,算是复习 预习,帮助我与大家期末不挂科




一、选择题

2-1
若顺序栈的栈顶指针指向栈顶元素位置,则压入新元素时,应( A)。
A.先移动栈顶指针
B.先存入元素,再移动栈顶指针
C.先后次序无关紧要
D.同时进行
解析:看书上代码易得,顺序栈实际上是在结构体中定义一个数组,栈顶指针是数组的下标,下标加一后数组存入一个元素
2-2
链式栈与顺序栈相比,一个比较明显的优点是( B)。
A.插入操作更加方便
B.通常不会出现栈满的情况
C.不会出现栈空的情况
D.删除操作更加方便
解析:链式栈是在表头进行操作,顺序栈要先定义一个数组,会出现栈满的情况
2-3
若(a-b)(c+d)是中序表达式,则其后序表达式是( B)。
A.abcd+
-
B.ab-cd+*
C.ab-cd+
D.a-bcd+

解析:后序表达式是遇到数字纳入栈,遇到运算符后取出栈顶的两个数字进行运算,结果再纳入栈,至于如何将中序表达式,我们可以先将括号内的运算符移到对应的右括号,再将括号移除。
2-4
字符A,B,C依次进入一个栈,按出栈的先后顺序组成不同的字符串,则至多可以组成(B )个不同的字符串。
A.14
B.5
C.6
D.8
解析:因为不可能出现CAB这一字符串 所以6-1个
2-5
下列算法的功能是(B)。

void func( )
{
      int x;
      Statck s;    //定义栈s
      cin >> x;
      while (x<>0)
      {
         push(s,x);
         cin>>x;
       }
      while (!EmptyStack(s))
          cout << pop(s);
 }

A.以读入数据的相同顺序输出数据
B.以读入数据的相反顺序输出数据
C.将数据读入到栈中进行保存
D.读入一批数据到栈中进行求和并输出
解析:push(s,x)将x值纳入栈,pop(s)将栈顶的元素弹出
2-6
若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1 = 3,则p2为(A)。
A.可能是2
B.一定是2
C.可能是1
D.一定是1
解析:因为p1=3,所以1,2先纳入栈,2一定比1先出栈
2-7
栈的插入和删除操作在(A )进行。
A.栈顶
B.栈底
C.任意位置
D.指定位置
2-8
假设一个栈的输入序列是1,2,3,4,则不可能得到的输出序列是( B)。
A.1,2,3,4
B.4,1,2,3
C.4,3,2,1
D.1,3,4,2
解析:和第六题类似
2-9
令P代表入栈,O代表出栈。当利用堆栈求解后缀表达式1 2 3 + * 4 –时,堆栈操作序列是:(D)
A.PPPOOPOO
B.PPOOPPOOPPOO
C.PPPOOPOOPPOO
D.PPPOOPOOPPOOPO
解析:之前说过后序表达式是遇到数字纳入栈,遇到运算符后取出栈顶的两个数字进行运算,结果再纳入栈,123入栈,取出23进行+运算再纳入栈,取出61进行运算
2-10
令P代表入栈,O代表出栈。若利用堆栈将中缀表达式3 * 2+8/4转为后缀表达式,则相应的堆栈操作序列是(C)
A.PPPOOO
B.POPOPO
C.POPPOO
D.PPOOPO
解析:后缀表达式为32
84/+ *入栈,然后出栈 +入栈,/入栈,然后分别出栈
2-11
若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:(B)
A.S->top == 0

B.S->top == -1

C.S->top != m-1

D.S->top == m-1
解析:栈为空时,栈顶指针位于-1处
2-12
若栈采用顺序存储方式存储,现两栈共享空间V[m]:top[i]代表第i(i=1或2)个栈的栈顶;栈1的底在V[0],栈2的底在V[m-1],则栈满的条件是:(D)
A.|top[2]-top[1]|==0

B.top[1]+top[2]==m

C.top[1]==top[2]

D.top[1]+1==top[2]

解析:当top[1]+1==top[2]时,说明两个栈相邻,共享空间全部占满
2-13
若栈S​1中保存整数,栈S​2中保存运算符,函数F()依次执行下述各步操作:
(1)从S​1中依次弹出两个操作数a和b;
(2)从S2中弹出一个运算符op;
(3)执行相应的运算b op a;
(4)将运算结果压入S​1​​ 中。
假定S​1中的操作数依次是{ 5, 8, 3, 2 }(2在栈顶),S​2中的运算符依次是{ *, -, + }(+在栈顶)。调用3次F()后,S1栈顶保存的值是:(A)
A.-15
B.15
C.-20
D.20
解析 1.a=2,b=3,op=*,3+2=5,2.5-8=-3,3.-3/*5=-15
2-14
设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(A)
A.3 2 1 5 4
B.5 1 2 3 4
C.4 5 1 3 2
D.4 3 1 2 5
解析:和前面题目一样
2-15
给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p​1, p​2, ⋯, p​n}。如果p​2 =n,则存在多少种不同的出栈序列?(B)
A.n
B.n−1
C.2
D.1
解析:p1有n-1种可能
2-16
若已知一个进栈序列是1,2,3,……,n,其输出序列是p1,p2,p3,……pn, 若p1=n, 则pi(1<i<n)为(C )。
A.i
B.n-i
C.n-i+1
D.不确定
解析:相当于倒序输出进栈序列

这里暂时只能给出选择题的解析,函数部分请看书上的代码

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值