_001_Stack_10Exercises-2

1 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,栈的合法输出序列的是()3 2 1 5 4
栈的特点先入后出 D, 1、2、3进栈,3出、2出、1出,4、5进 5出 4出
A(不对)1、2、3、4、5进栈,5出栈;这是出栈应该是4
B (不对) 1、2、3进栈、4进 4出,5 进5出,然后应该是3出栈
C (不对) 1、2、3进栈、4进 4出,3出栈,应该2出栈而不是1

2 字符 A B C 依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成 (     ) 个不同的字符串? 2
组合数学中的Catalan数, C(2n,n)/(n+1) (C(2n,n)表示2n里取n)
  
证明下是卡塔兰数 
使用递归法证明:
设f(n)为n个数栈混洗可能的结果。
对于一组数 1,2,3,4,5,...,k.,..,n
假设最后出栈的元素为k
过程一:那么k之前有 k-1个数比k小,对于这k-1个数,在k入栈之前,已经入栈且出栈,栈混洗可能的结果是 f(k-1)。
过程二:那么k之后有 n-k个数比k大,对于这n-k个数,在k出栈之前,已经入栈且出栈,栈混洗可能的结果是f(n-k)。
这两个过程独立,对于此时的k,可能的排列有 f(k-1)* f(n-k) 种。
又因为 k的取值为1,2,3,...,n。所以有:
解这个递归式子,解得:f(n) =C(2n,n)/(n+1)
证明完成。
ps:直接求解这个递归式有一定难度,不过我们可以使用数学归纳法证明结果的正确性。
先计算f(0)正确,再假设f(n-1)正确,最后证明f(n)正确。详细过程就不写啦。

3  现有初始状态均为空的栈X和队列Y,元素a、b、c、d、e、f、g依次进入栈X,每个元素出栈后即进入队列Y,如果出队列的顺序为b、c、f、e、g、d、a,则要求栈X最小容量为()4
由于队列是先进先出线性表,队列Y的出队顺序为b、c、f、e、g、d、a,
则入队顺序必定也是b、c、f、e、g、d、a,这一顺序就是栈X的出栈顺序。
又由于入栈顺序为a、b、c、d、e、f、g,
因此入栈和出栈顺序是:a、b入栈,b出栈,c入栈,c出栈, d、e、f入栈,f、e出栈,g入栈,g、d、a出栈。
因此栈中驻留元素最多是4个,因此栈X的容量至少应该为4。

4  选择正确的选项:A
A 在栈中,栈顶指针的动态变化决定栈中元素的个数
B 在循环队列中,队尾指针的动态变化决定队列的长度
C 在循环链表中,头指针和链尾指针的动态变化决定链表的长度
D 在线性链表中,头指针和链尾指针的动态变化决定链表的长度
在栈中,栈底指针保持不变,有元素入栈,栈顶指名增加,有元素出栈,栈顶指针减少。
在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。
在循环链表中,前一个结点指向后一个结点,而最后一个结点指向头结点,只有头结点是固定的。
线性链表中,由于前一个结点包含下一个结点的指针,尾结点指针为空,要插入或删除元素,
只需要改变相应位置的结点指针即可,头指针和尾指针无法决定链表长度。故本题答案为 A 选项。

5  用俩个栈模拟实现一个队列,如果栈的容量分别是OP(O>P),那么模拟实现的队列最大容量是多少?2P+1
栈,先进后出;队列,先进先出。用O和P这两个栈实现先进先出就可以了。


6  若一个栈以向量V...存储,初始栈顶指针top为n+1,则下面x入栈的正确操作是()。A
A. top=topt1; VEtop]=x   B.  V[top]=x; top=top+1
C. top=top-1; V[top]=x   D. V[top]=x; top=top-1

7  局变量和局部变量在内存中的区别是什么?
正确答案: B C
A 二者没有区别
B 生存周期不同
C 作用范围不同
D 占用的内存大小一样


全部评论

相关推荐

09-14 20:51
四川大学 Java
慢热的鲸鱼在学习:985加粗就行了,第二个项目来不及准备也没事,省的写了问你你还不会。你只需准备面试八股和项目场景,剩下的交给985。即使面不过也没事,面试经验是最重要的,你现在不缺时间
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务