c#栈的习题2

—、单项选择题1.栈和队列具有相同的(    )。 A.抽象数据类型     B.逻辑结构     C.存储结构     D.运算
2.栈是()。 A.顺序存储的线性结构     B.链式存储的非线性结构 C.限制存取点的线性结构     D.限制存储点的非线性结构
3.()不是栈的基本操作。 A.删除栈顶元素     B.删除栈底元素 C.判断栈是否为空     D.将栈置为空栈
4.假定利用数组 a[n] 顺序存储一个栈,用top表示栈顶指针,top==-1表示桟空,并已知栈未满,当元素x进栈时所执行的操作为( )。 A. a[--top]=x     B. a[top--]=x     C. a[++top]=x     D. a[top++]=x
5.设有一个空栈,栈顶指针为1000H,每个元素需要1个存储单元,在执行Push、Push、 Pop、Push、Pop、Push、Pop、Push操作后,桟顶指针的值为( )。 A. 1002H    B. 1003H    C. 1004H    D. 1005H
6.和顺序栈相比,链栈有一个比较明显的优势是(    )。 A.通常不会出现栈满的情况     B.通常不会出现栈空的情况 C.插入操作更容易实现     D.删除操作更容易实现
7.设链表不带头结点且所有操作均在表头进行,则下列最不适合作为链栈的是(    )。 A.只有表头结点指针,没有表尾指针的双向循环链表 B.只有表尾结点指针,没有表头指针的双向循环链表 C.只有表头结点指针,没有表尾指针的单向循环链表 D.只有表尾结点指针,没有表头指针的单向循环链表
8.向一个栈顶指针为top的链栈中插入一个x结点,则执行(    )。 A. top->next=x      B. x->next=top->next; top->next=x C. x->next=top; top=x      D. x->next=top, top=top->next
9.链栈执行Pop操作,并将出栈的元素存在x中应该执行( )。 A. x=top; top=top->next      B.x=top->data C. top=top->next; x=top->data      D. x=top->data; top=top->next
10.经过以下栈的操作后,变量x的值为(    )。 InitStack(st); Push(st, a); Push(st, b); Pop(st, x); Top(st,x);
A. a    B. b    C. NULL    D. FALSE
11.    3个不同元素依次进栈,能得到( )种不同的出栈序列。 A. 4    B. 5    C. 6    D. 7
12.设a、b、c、d、e、f以所给的次序迸栈,若在进栈操作时,允许出栈操作,则下面得不到的序列为( )。 A. fedcba    B. bcafed    C. dcefba    D. cabdef
13.用S表示进栈操作,用X表示出栈操作,若元素的进栈顺序是1234,为了得到1342的出栈顺序,相应的S和X的操作序列为( )。
A. SXSXSSXX     B. SSSXXSXX     C. SXSSXXSX     D. SXSSXSXX
14.【2010年计算机联考真题】 若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续3次进行退栈工作,则不可能得到的出栈序列是( )。 A. dcebfa    B. cbdaef    C. bcaefd    D. afedcb
15.设找S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出栈的序列是e2、e4、e3、e6、e5、e1,则栈S的容量至少应该是( )。 A. 6    B. 4    C. 3    D. 2
16.【2009年计算机联考真题】 设栈S和队列Q的初始状态均为空,元素abcdefg依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是bdefeag,则栈S的容量至少是( )。 A. 1    B. 2    C. 3    D. 4
17.若一个栈的输入序列是1, 2,3, …, n,输出序列的第一个元素是n,则第i个输出元素是( )。 A.不确定    B. n-i    C. n-i-1    D. n-i+1
18.一个栈的输入序列为1, 2, 3, …, n,输出序列的第一个元素是i,则第j个输出元素是( )。 A, i-j-1    B. i-j    C. j-i+1    D.不确定
19.某栈的输入序列为a、b、c、d,下面的4个序列中,不可能是它的输出序列的是()。 A. a,b,c,d    B. c,b,d,a    C. d,c,a,b    D. a,c,b,d
20.若一个栈的输入序列是P1, P2, …, Pn,其输出序列是1, 2, 3, …, n,若P3=1,则p1的值( )。 A.可能是2     B. 一定是2     C.不可能是2     D.不可能是3
21.若已知一个栈的入栈序列是1、2、3、4。其出栈序列为P1、P2、P3、P4,则P2、P4不可能是( )。 A. 2、4    B. 2、1    C. 4、3    D. 3、4
22.设桟的初始状态为空,当字符序列"n 1 _"作为栈的输入时,输出长度为3,且可用做C语言标识符的序列有( )个。 A. 4    B. 5    C. 3    D. 6
23.【2011年计算机联考真题】 元素a、b、c、d、e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是()。 A. 3    B. 4    C. 5    D. 6
24.釆用共享栈的好处是(    )。 A.减少存取时间,降低发生上溢的可能 B.节省存储空间,降低发生上溢的可能 C.减少存取时间,降低发生下溢的可能 D.节省存储空间,降低发生下溢的可能
25.设有一个顺序共享栈Share[0: n-1],其中第一个栈顶指针top1的初值为-1,第二个栈顶指针top2的初值为n,则判断共享栈满的条件是( )。 A. top2-top1==1     B. top1-top2==1     C. top1==top2     D.以上都不对

二、综合应用题

1.有5个元素,其入栈次序为A、B、C、D、E,在各种可能的出栈次序中,第一个出栈元素为C且第二个出栈元素为D的出栈序列有哪几个?
2.若元素的进栈序列为A、B、C、D、E,运用栈操作,能否得到出栈序列B、C、A、 E、D 和 D、B、A、C、E?为什么?
3.假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,可以操作的序列称为合法序列,否则称为非法序列。
1) 下面所示的序列中哪些是合法的? a. IOIIOIOO     b. IOOIOIIO     c. IIIOIOIO     d. IIIOOIOO
2) 通过对1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回 true,否则返回false(假定被判定的操作序列已存入一维数组中)。
4.设单链表的表头指针为h,结点结构由data和next两个域构成,其中data域为字符型。试设计算法判断该链表的前n个字符是否中心对称。例如xyx、xyyx都是中心对称。
5.设有两个栈s1、s2都釆用顺序栈方式,并且共享一个存储区[0, …, maxsize-1],为了尽量利用空间,减少溢出的可能,可釆用栈顶相向、迎面增长的存储方式。试设计s1、s2 有关入栈和出栈的操作算法。

答案与解析

一、单项选择题

1.    B 线性表、栈和队列的逻辑结构都是相同的,都属于线性结构,只是它们对数据的运算不同,从而表现出不同的特点。
2.    C 首先栈是一种线性表,所以B、D错。按存储结构的不同可分为顺序栈和链栈,但不可以把栈局限在某种存储结构上,所以A错。栈和队列都是限制存取点的线性结构。
3.    B 基本操作是指该结构最核心、最基本的运算,其他较复杂的操作可以通过基本操作实现。删除栈底元素不属于栈的基本运算,但它可以通过调用栈的基本运算求得。
4.    C 入栈指针top加1,初始时top为-1,则第1个元素入找后,top为0,即指向栈顶元素,故入栈时应先将指针top加1,再将元素入栈,只有C符合题意。
5.    A 每个元素需要1个存储单元,所以每入栈一次top加1,出栈一次top减1。指针top的值依次为 1001H,1002H, 1001H, 1002H,1001H,1002H,1001H,1002H。
6.    A 顺序栈釆用数组存储,数组的大小是固定的,不能动态地分配大小。和顺序栈相比,链栈的最大优势在于它可以动态地分配存储空间,所以答案为A。
7.    C 通常栈的插入和删除在表头进行。对于选项C,插入和删除一个结点后,仍需将其变为循环单链表,因此需要找到其尾结点,时间复杂度为o(n)。
若不做题干中的限制,则栈顶可取表头(带头结点的链表)或第二个结点(不带头结点的链表),找指针的位置取头结点(带头结点的链表)或表头(不带头结点的链表)。
8.    C 链栈釆用不带头结点的单链表表示时,进栈橾作在首部插入一个结点x(即x->next=top),插入完后需将top指向该插入的结点X。请思考当链栈存在头结点时的情况。
9.    D 这里假设栈顶指针指向的是栈顶元素,所以选D;而A中首先将top指针赋给了 x,错误;B中没有修改top指针的值;C为top指针指向栈顶元素的上一个元素时的答案。
10.    A 执行前3句后,栈st内的值为a,b,其中b为栈顶元素,执行第4句后,x的值为b,执行最后一句后x的值为a。
11.    B 对于n个不同元素进栈,出栈序列的个数为

上述的公式叫做卡特兰(Catalan)数,可釆用数学归纳法证明,有兴趣的读者可以参考组合数学的教材(知道该公式即可)。考题中给出的n值不会很大,可以根据栈的特点,若Xi已经出栈,则Xi前面的尚未出栈的元素一定逆置有序地出栈,因此可以釆取例举的方法。如a、b、c依次进栈的出栈序列有abc,acb, bac, bca, cba。
12.    D 根据栈“先进后出”的特点,并且在进栈操作的同时允许出栈操作,显然,答案D中c 最先出栈,则此时栈内必定为a和b,但由于a先于b进栈,故要晚出栈。对于某个出栈的元素,在它之前进栈却晚出栈的元素必定是按逆序出栈的,其余答案均是可能出现的情况。
此题也可以釆用将各序列逐个代入,以确定是否有对应的进出栈序列(类似下题)。
13.    D 釆用排除法,选项A、B、C得到的出栈序列分别为1243、3241、1324。由1234得到 1342的进出栈序列为:1进,1出,2进,3进,3出,4进,4出,2出,故选D。
14.    D 选项A可由a进,b进,c进,d进,d出,c出,e进,e出,b出,f进,f出,a出得到; 选项B可由a进,b进,c进,c出,b出,d进,d出,a出,e进,e出,f进,f出得到; 选项C可由a进,b进,b出,c进,c出,a出,d进,e进,e出,f进,f出,d出得到; 选项D可由a进,a出,b进,c进,d进,e进,f进,f出,e出,d出,c出,b出得到,但要求不允许连续3次退栈操作,故选D。
15.    C 本题将队列和栈结合起来,由于队列“先进先出”的特性,所以出队的序列与进队的序列是相同的,从而可以得到出栈的次序为e2、e4、e3、e6、e5、e1;再由栈“先进后出”的特性,进栈的次序为e1、e2、e3、e4、e5、e6,可见,排在某个元素之后出栈却排在它之前进栈的元素个数,表示之前栈内的元素个数。因此,e4进栈后,e1和e3在栈中;而后e4 和e3出找;e6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值