1.栈和队列具有相同的( )。
A.抽象数据类型 B.逻辑结构 C.存储结构 D.运算
1. B
线性表、栈和队列的逻辑结构都是相同的,都属于线性结构,只是它们对数据的运算不同,从而表现出不同的特点。
2.栈是()。
A.顺序存储的线性结构 B.链式存储的非线性结构
C.限制存取点的线性结构 D.限制存储点的非线性结构
2. C
首先栈是一种线性表,所以B、D错。按存储结构的不同可分为顺序栈和链栈,但不可以把栈局限在某种存储结构上,所以A错。栈和队列都是限制存取点的线性结构。
7.设链表不带头结点且所有操作均在表头进行,则下列最不适合作为链栈的是( )。
A.只有表头结点指针,没有表尾指针的双向循环链表
B.只有表尾结点指针,没有表头指针的双向循环链表
C.只有表头结点指针,没有表尾指针的单向循环链表
D.只有表尾结点指针,没有表头指针的单向循环链表
7. C
通常栈的插入和删除在表头进行。对于选项C,插入和删除一个结点后,仍需将其变为循环单链表,因此需要找到其尾结点,时间复杂度为o(n)。
若不做题干中的限制,则栈顶可取表头(带头结点的链表)或第二个结点(不带头结点的链表),找指针的位置取头结点(带头结点的链表)或表头(不带头结点的链表)。
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
8. C
链栈釆用不带头结点的单链表表示时,进栈橾作在首部插入一个结点x(即x->next=top),插入完后需将top指向该插入的结点X。请思考当链栈存在头结点时的情况。
10.经过以下栈的操作后,变量x的值为( )。
InitStack(st); Push(st, a); Push(st, b); Pop(st, x); Top(st,x);
10. A
执行前3句后,栈st内的值为a,b,其中b为栈顶元素,执行第4句后,x的值为b,执行最后一句后x的值为a。
11. 3个不同元素依次进栈,能得到( )种不同的出栈序列。
A. 4 B. 5 C. 6 D. 7
11. B
对于n个不同元素进栈,出栈序列的个数为
上述的公式叫做卡特兰(Catalan)数,可釆用数学归纳法证明,有兴趣的读者可以参考组合数学的教材(知道该公式即可)。考题中给出的n值不会很大,可以根据栈的特点,若Xi已经出栈,则Xi前面的尚未出栈的元素一定逆置有序地出栈,因此可以釆取例举的方法。如a、b、c依次进栈的出栈序列有abc,acb, bac, bca, cba。