1、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5、e6一次压入栈S,一个元素出栈后即进入队列Q,若出队列的顺序为e2、e4、e3、e6、e5、e1,则栈S的容量要求最小值为(B)
A、2 B、3C、4D、5
解析:
2、如果进栈序列为e1、e2、e3、e4,则不可能的出栈序列是(D)
A、e2,e3, e4, e1
B、e4,e3,e2,e1
C、e1,e2,e3,e4
D、e3,e1,e4,e2
解析:对于这种题,不用一个一个验证,越往后的输出在前面,则其后面的必定倒序输出,否则为不可能。如e3,e2,e1,e4,e3后面的一定是e2,e1这样的排,否则必不可能,如e3,e1,e2,e4。由于D中出现e3,e1,e2,违反了规则,因此是不可能出现的.
3、4个圆盘的Hanoi塔,总的移动次数为(C)
A、7
B、8
C、15
D、16
解析:设F(N)为N个圆盘的hanoi塔总的移动次数,其递推方程为F(n)=f(n-1)+1+f(n-1)=2*f(n-1)+1。即先把上面(n-1)个圆盘移到第二个柱子上,再把最后一个圆盘移到第三个柱子,再把第二个柱子上的圆盘移动到第三个柱子上。而f(1)=1;于是可以推出f(n)=2^n-1(n表示移动次数,k表示盘子的数量)
4、若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列(B)
A、41
B、42
C、43
D、44
解析:result = C(2n,n)/(n+1),C(2n,n)是排列组合,下面的数是2n,上面的是n,具体请搜Catalan数
5、某表达式的前缀形式为"+-*^ABCD/E/F+GH",它的中缀形式为(C)
- A^B*C-D+E/F/G+H
- A^B*(C-D)+(E/F)/G+H
- A^B*C-D+E/(F/(G+H))
- A^B*(C-D)+E/(F/(G+H))
继续,变成 + (A ^ B * C - D) / E / F + GH
这个时候,+的一个操作数是(A ^ B * C - D),另一个操作数是第一个/后边的结果,
然后看怎么解 / E / F + GH,还是这样,被除数是E,除数是 / F + GH/ F + GH的被除数是F,除数是 + G H, 即为(G + H), 这项是F / (G + H),
回到上一步,/ E / F + G H是E / (F / (G + H)),再往上回一步,得到整个表达式: (A ^ B * C - D) + E / (F / (G + H))
6、若栈采用顺序存储方式存储,现两栈共享空间v[1…m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(B)
- |top[2]-top[1]|=0
- top[1]+1=top[2]
- top[1]+top[2]=m
- top[1]=top[2]