堆栈相关的练习题。时间:2020-5-6
判断题
1-1
通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。F
1-2
若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1。F
1-3
若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。T
1-4
栈和队列的存储方式,既可以是顺序方式,也可以是链式方式。T
1-5
序列{1,2,3,4,5}依次入栈,则不可能得到{3,4,1,2,5}的出栈序列。T
1-6
栈是一种先进先出的线性表。F
1-7
栈是一种特殊的线性表,它的插入和删除操作都是在表的同一端进行。T
1-8
栈结构不会出现溢出现象。F
1-9
两个栈共享一片连续空间,可以将两个栈的栈底分别设在这片空间的两端。T
1-10
所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。F
1-11
在用数组表示的循环队列中,front值一定小于等于rear值。F
1-12
循环队列也存在着空间溢出问题。T
1-13
循环队列执行出队操作时会引起大量元素的移动。F
单选题
2-1
表达式32^(4+22-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(D ),其中 ^为乘幂 。
A.3, 2, 4, 1, 1;( ^ ( + -
B.3, 2, 8;( * ^ -
C.3, 2, 4, 2, 2;( * ^ ( -
D.3, 2, 8;( * ^ ( -
2-2
在作进栈运算时,应先判别栈是否(① );在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。B
①: A. 空 B. 满 C. 上溢 D. 下溢
②: A. 空 B. 满 C. 上溢 D. 下溢
③: A. n-1 B. n C. n+1 D. n/2
A.① C ② D ③ B
B.① B ② A ③ B
C.① B ② B ③ A
D.① B ② A ③ A
2-3
若栈采用顺序存储方式存储,现两栈共享空间V[1…m],top[i]代表第i个栈( i =1,2)栈顶(该位置不存储对应栈数据),栈1的底在v[1],栈2的底在V[m],则栈满的条件是( B)。
A.|top[2]-top[1]|=0
B.top[1]-1=top[2]
C.top[1]+top[2]=m
D.top[1]=top[2]
2-4
若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=3,则p2为(A )。
A.可能是2
B.一定是2
C.可能是1
D.一定是1
2-5
设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6 , s5,s1,则栈的容量至少应该是(B )。
A.2
B.3
C.5
D.6
2-6
执行完下列语句段后,i值为:( B)
int f(int x){
return ((x>0) ? x* f(x-1):2);
}
int i;
i = f(f(1));
A.2
B.4
C.8
D.无限递归
2-7
用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为( D)。
A.SXSSSXXX
B.SXSXSXSX
C.SSSSXXXX
D.SXSSXSXX
2-8
令P代表入栈,O代表出栈。则将一个字符串3*a+b/c变为3 a * b c / +的堆栈操作序列是哪个?(例如将ABC变成BCA的操作序列是PPOPOO。) D
A.PPPOOOPPOPPOOO
B.POPOPOPPOPPOOO
C.POPPOOPPOPOOPO
D.POPPOOPPOPPOOO
2-9
在利用堆栈将下列哪个中缀表达式转换为后缀表达式过程中,堆栈的操作系列为:
push(‘‘) 、push(’(‘)、 push(’+‘)、pop()、pop()、pop()、push(’’)、pop()、push(‘+’)、pop(A)
A.2*(3+4)5+6
B.2(3+45)+6
C.2(3+4*5+6)
D.以上都是
2-10
有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?(C )
A.5 4 3 6 1 2
B.4 5 3 1 2 6
C.3 4 6 5 2 1
D.2 3 4 1 5 6
2-11
数组A[1…n]作为栈的存储空间,栈顶top的初值为n+1,在未溢出的情况表,以下(C )完成入栈X操作。
A.top++; A[top]=X;
B.A[top]=X; top++;
C.top–; A[top]=X;
D.A[top]=X; top–;
2-12
设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是:C
A.1
B.2
C.3
D.4
2-13
若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:B
A.S->top == 0
B.S->top == -1
C.S->top != m-1
D.S->top == m-1
2-14
利用大小为n的数组(下标从0到n-1)存储一个栈时,假定栈从数组另一头开始且top==n表示栈空,则向这个栈插入一个元素时,修改top指针应当执行:C
A.top=0
B.top++
C.top–
D.top不变
2-15
现有队列 Q 与栈 S,初始时 Q 中的元素依次是{ 1, 2, 3, 4, 5, 6 }(1在队头),S 为空。若允许下列3种操作:(1)出队并输出出队元素;(2)出队并将出队元素入栈;(3)出栈并输出出栈元素,则不能得到的输出序列是:C
A.1, 2, 5, 6, 4, 3
B.2, 3, 4, 5, 6, 1
C.3, 4, 5, 6, 1, 2
D.6, 5, 4, 3, 2, 1
2-16
递归过程或函数调用时,处理参数及返回地址,要用一种称为(C )的数据结构。
A.队列
B.多维数组
C.栈
D.线性表
2-17
下列关于栈的叙述中,错误的是:C
采用非递归方式重写递归程序时必须使用栈
函数调用时,系统要用栈保存必要的信息
只要确定了入栈次序,即可确定出栈次序
栈是一种受限的线性表,允许在其两端进行操作
A.仅 1
B.仅 1、2、3
C.仅 1、3、4
D.仅 2、3、4
2-18
为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是?B
A.堆栈
B.队列
C.树
D.图
2-20
如果循环队列用大小为m的数组表示,且用队头指针front和队列元素个数size代替一般循环队列中的front和rear指针来表示队列的范围,那么这样的循环队列可以容纳的元素个数最多为:B
A.m-1
B.m
C.m+1
D.不能确定
2-21
在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算是( B)。
A.f->next=s; f=s;
B.r->next=s; r=s;
C.s->next=s; r=s;
D.s->next=f; f=s;
2-22
在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则删除结点的运算是( C)。
A.r=f->next;
B.r=r->next;
C.f=f->next;
D.f=r->next
2-23
若用一个大小为6的数组来实现循环队列,且当前rear和fornt的值分别为0和3。从当前队列中删除一个元素,再加入两个元素后,rear和front的值分别为( B)。
A.1和5
B.2和4
C.4和2
D.5和1
2-26
用链接方式存储的队列,在进行删除运算时(D )。
A.仅修改头指针
B.仅修改尾指针
C.头、尾指针都要修改
D.头、尾指针可能都要修改
2-27
设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为(D )。
A.front=front+1
B.front=(front+1)% m
C.rear=(rear+1)%(m+1)
D.front=(front+1)%(m+1)
2-28
循环队列的队满条件为 (C )。
A.(sq.rear+1) % maxsize ==(sq.front+1) % maxsize;
B.(sq.front+1) % maxsize ==sq.rear
C.(sq.rear+1) % maxsize ==sq.front
D.sq.rear ==sq.front
2-29
若已知一队列用单向链表表示,该单向链表的当前状态(含3个对象)是:1->2->3,其中x->y表示x的下一节点是y。此时,如果将对象4入队,然后队列头的对象出队,则单向链表的状态是:B
A.1->2->3
B.2->3->4
C.4->1->2
D.答案不唯一