队列Word格式.docx
《队列Word格式.docx》由会员分享,可在线阅读,更多相关《队列Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
![队列Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/15/d266fac2-e201-46c1-afd1-c8eec3e34301/d266fac2-e201-46c1-afd1-c8eec3e343011.gif)
6.有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?
(C)
A.543612B.453126C.346521D.234156
7.设栈的输入序列是1,2,3,4,则(D)不可能是其出栈序列。
A.1,2,4,3,B.2,1,3,4,C.1,4,3,2,
D.4,3,1,2,E.3,2,1,4,
8.一个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是(B)。
A.23415B.54132C.23145D.15432
9.设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。
A.51234B.45132C.43125D.32154
10.某堆栈的输入序列为a,b,c,d,下面的四个序列中,不可能是它的输出序列的是(D)。
A.a,c,b,dB.b,c,d,aC.c,d,b,aD.d,c,a,b
11.设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为(D)。
A.fedcbaB.bcafedC.dcefbaD.cabdef
12.设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是(C)。
A.XYZB.YZXC.ZXYD.ZYX
13.输入序列为ABC,可以变为CBA时,经过的栈操作为(B)
A.push,pop,push,pop,push,popB.push,push,push,pop,pop,pop
C.push,push,pop,pop,push,popD.push,pop,push,push,pop,pop
15.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(B)。
A.|top[2]-top[1]|=0B.top[1]+1=top[2]C.top[1]+top[2]=mD.top[1]=top[2]
16.栈在(D)中应用。
A.递归调用B.子程序调用C.表达式求值D.A,B,C
17.一个递归算法必须包括(B)。
A.递归部分B.终止条件和递归部分C.迭代部分D.终止条件和迭代部分
21.设计一个判别表达式中左,右括号是否配对出现的算法,采用(D)数据结构最佳。
A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈
22.用链接方式存储的队列,在进行删除运算时(D)。
A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改
23.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D)。
A.仅修改队头指针B.仅修改队尾指针
C.队头、队尾指针都要修改D.队头,队尾指针都可能要修改
24.递归过程或函数调用时,处理参数及返回地址,要用一种称为(C)的数据结构。
A.队列B.多维数组C.栈D.线性表
33.栈的特点是(①B),队列的特点是(②A),栈和队列都是(③C)。
若进栈序列为1,2,3,4则(④C)不可能是一个出栈序列(不一定全部进栈后再出栈);
若进队列的序列为1,2,3,4则(⑤F)是一个出队列序列。
BACCF
A.先进先出B.后进先出C.进优于出D.出优于进
③:
A.顺序存储的线性结构B.链式存储的线性结构
C.限制存取点的线性结构D.限制存取点的非线性结构
④,⑤:
A.3,2,1,4B.3,2,4,1C.4,2,3,1D.4,3,2,1F.1,2,3,4G.1,3,2,4
34.栈和队都是(C)
A.顺序存储的线性结构B.链式存储的非线性结构
C.限制存取点的线性结构D.限制存取点的非线性结构
二判断题
1.消除递归不一定需要使用栈(√)
2.栈是实现过程和函数等子程序所必需的结构。
(√)
3.两个栈共用静态存储空间,对头使用也存在空间溢出问题。
(√)
4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
5.即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈组合操作,所得的输出序列也一定相同。
(×
)
11.任何一个递归过程都可以转换成非递归过程。
( √ )
12.只有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈。
( ×
)
13.队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
(×
14.通常使用队列来处理函数或过程的调用。
15.队列逻辑上是一个下端和上端既能增加又能减少的线性表。
16.循环队列通常用指针来实现队列的头尾相接。
17.循环队列也存在空间溢出问题。
18.队列和栈都是运算受限的线性表,只允许在表的两端进行运算。
19.栈和队列都是线性表,只是在插入和删除时受到了一些限制。
20.栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。
四应用题
1.名词解释:
栈、队列、循环队列?
栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。
最后插入的元素最先删除,故栈也称后进先出(LIFO)表。
队列是允许在一端插入而在另一端删除的线性表,允许插入的一端叫队尾,允许删除的一端叫队头。
最先插入队的元素最先离开(删除),故队列也常称先进先出(FIFO)表。
循环队列:
用常规意义下顺序存储结构的一维数组表示队列,由于队列的性质(队尾插入和队头删除),容易造成“假溢出”现象,即队尾已到达一维数组的高下标,不能再插入,然而队中元素个数小于队列的长度(容量)。
循环队列是解决“假溢出”的一种方法。
通常把一维数组看成首尾相接。
在循环队列下,通常采用“牺牲一个存储单元”或“作标记”的方法解决“队满”和“队空”的判定问题
2.
(1)什么是递归程序?
(2)递归程序的优、缺点是什么?
(3)递归程序在执行时,应借助于什么来完成?
(4)递归程序的入口语句、出口语句一般用什么语句实现?
(1)一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。
例如,函数f在执行中,又调用函数f自身,这称为直接递归;
若函数f在执行中,调用函数g,而g在执行中,又调用函数f,这称为间接递归。
在实际应用中,多为直接递归,也常简称为递归。
(2)递归程序的优点是程序结构简单、清晰,易证明其正确性。
缺点是执行中占内存空间较多,运行效率低。
(3)递归程序执行中需借助栈这种数据结构来实现。
(4)递归程序的入口语句和出口语句一般用条件判断语句来实现。
递归程序由基本项和归纳项组成。
基本项是递归程序出口,即不再递归即可求出结果的部分;
归纳项是将原来问题化成简单的且与原来形式一样的问题,即向着“基本项”发展,最终“到达”基本项。
3.简述顺序存储队列的假溢出的避免方法及队列满和空的条件。
假溢出避免方法:
采取循环队列的形式。
4.举例说明顺序队的“假溢出”现象,并给出解决方案。
5.怎样判定循环队列的空和满?
在循环队列下,仍定义front=rear时为队空,而判断队满则用两种办法,一是用“牺牲一个单元”,即rear+1=front(准确记是(rear+1)%m=front,m是队列容量)时为队满。
另一种解法是“设标记”方法,如设标记tag,tag等于0情况下,若删除时导致front=rear为队空;
tag=1情况下,若因插入导致front=rear则为队满。
数据结构练习第三章栈和队列
一、选择题
1.栈和队列的共同特点是(A)。
A.只允许在端点处插入和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
2.向顺序栈中压入新元素时,应当(A)。
A.先移动栈顶指针,再存入元素B.先存入元素,再移动栈顶指针
C.先后次序无关紧要D.同时进行
3.允许对队列进行的操作有(D)。
A.对队列中的元素排序B.取出最近进队的元素
C.在队头元素之前插入元素D.删除队头元素
4.用链接方式存储的队列,在进行插入运算时(D).
A.仅修改头指针B.头、尾指针都要修改
C.仅修改尾指针D.头、尾指针可能都要修改
5.设用链表作为栈的存储结构则退栈操作(B)。
A.必须判别栈是否为满B.必须判别栈是否为空
C.判别栈元素的类型D.对栈不作任何判别
否则会下溢!
就是没元素,可是却要取出,所以必须在退栈前进行判断!
6.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为(C)。
A.front->
next=s;
front=s;
B.s->
next=rear;
rear=s;
C.rear->
D.s->
next=front;
7.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为(D)。
A.top=top+1;
B.top=top-1;
C.top->
next=top;
D.top=top->
next;
8.队列是一种(A)的线性表。
A.先进先出B.先进后出C.只能插入D.只能删除
9.设输入序列1、2、3、?
、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输出元素是(D)。
A.n-iB.n-1-iC.n+l-iD.不能确定
10.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为(B)。
A.5,3,4,6,1,2B.3,2,5,6,4,1
C.3,1,2,5,4,6D.1,5,4,6,2,3
11.队列的删除操作是在(A)进行。
A.队首B.队尾C.队前D.队后
12.当利用大小为N的数组顺序存储一个栈时,假定用top==N表示栈空,则退栈时,用(A)语句修改top指针。
A.top++;
B.top=0;
C.top--;
D.top=N;
13.队列的插入操作是在(B)进行。
14.若已有一个栈,输入序列为A,B,C,D,E,那么下面哪种序列不可能得到?
(D)
A.ABCDEB.EDCBAC.BAEDCD.ECDBA
注意:
入栈和出栈操作可以交替进行,因此就可能有多种输出序列了。
15.栈和队列共同具有的特点是(C)
A.都是先进后出B.都是先进先出
C.只允许在端点进行操作运算D.既能先进先出,也能先进后出
16.若用一个有6个单元的数组来实现循环队列,rear和front的初值分别为0和3。
则从队列中删除一个元素,再添加两个元素后,rear和front的值分别为(B)
A.1和5B.2和4C.4和2D.5和1
17.一个栈的入栈序列是a,b,c,d,e,则栈的输出序列不可能是(A)...
A.dceabB.decbaC.edcbaD.abcde
18.元素大小为1个单元,容量为n个单元的非空顺序栈中,以地址高端为栈底,以top作为栈顶指针,则出栈处理后,top的值应修改为(D)
A.top=topB.top=n-1C.top=top-1D.top=top+1
19.设有一个栈,按A、B、C、D的顺序进栈,则可能为出栈序列的是(A)
A.DCBAB.CDABC.DBACD.DCAB
20.在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top为栈顶指针,则当做出栈处理时,top变化为(B)
A.top++B.top--C.top不变D.top=0
21.关于栈和队列的说法中正确的是(A)
A.栈和队列都是线性结构
B.栈是线性结构,队列不是线性结构
C.栈不是线性结构,队列是线性结构
D.栈和队列都不是线性结构
22.设一个栈的输入序列是a,b,c,d,则所得到的输出序列(输入过程中允许出栈)不可能出现的是(D)
A.a,b,c,dB.a,b,d,c
C.d,c,b,aD.c,d,a,b
23.在具有m个单元的循环队列中,队头指针为front,队尾指针为rear,则队满的条件是(D)
A.front==rearB.(front+1)%m==rear
C.rear+1==frontD.(rear+1)%m==front
24.循环队列存储在数组A[0..m]中,则入队时的操作为(C)。
A.rear=rear+1B.rear=(rear+1)%(m-1)
C.rear=(rear+1)%mD.rear=(rear+1)%(m+1)
25.顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为(D)
A.s.elem[top]=e;
B.s.elem[top+1]=e;
s.top=s.top+1;
C.s.top=s.top+1;
D.s.top=s.top+1;
s.elem[top+1]=e;
s.elem[top]=e;
26.循环队列sq中,用数组elem[0·
·
25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为(D)
A.8B.16C.17D.18
元素21,22,23,24,25,0,1,2,3,4,5,6,7,8,9,10,11,12
27.有关栈的描述,正确的是(B)
A.栈是一种先进先出的特殊的线性表
B.只能从栈顶执行插入、删除操作
C.只能从栈顶执行插入、栈底执行删除
D.栈顶和栈底均可执行插入、删除操作
28.设顺序循环队列Q[0:
M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队列中的元素个数为(C)。
A.R-FB.F-RC.(R-F+M)%MD.(F-R+M)%M
29.设一数列的输入顺序为1,2,3,4,5,6,通过栈操作不可能排成的输出序列为(B)。
A.3,2,5,6,4,1B.1,5,4,6,2,3
C.2,4,3,5,1,6D.4,5,3,6,2,1
30.设有一个栈,元素的进栈次序为A,B,C,D,E,则下列(C)是不可能的出栈序列。
A.A,B,C,D,EB.B,C,D,E,A
C.E,A,B,C,DD.E,D,C,B,A
31.在具有N个单元的顺序存储循环队列中,假定front和rear分别为对头指针和对尾指针,则判断对满的条件为(B)。
A.front==rearB.(rear+1)%MAXSIZE==front
C.front-rear==1D.rear%MAXSIZE==front
32.一个元素进入队列的时间复杂度是(A)。
A.O
(1)B.O(n)C.O(n2)D.O(log2n)
33.若让元素1,2,3依次进栈,则出栈次序不可能出现(C)种情况。
A.3,2,1B.2,1,3
C.3,1,2D.1,3,2
34.假定一个链队的队首和队尾指针分别为front和rear,则判断队空的条件是(D)。
A.front==NULLB.front!
=NULL
C.rear!
=NULLD.front==rear
35.若让元素a,b,c依次进栈,则出栈次序不可能出现(C)种情况。
A.cbaB.bacC.cabD.acb
36.在一个链队列中,假定front和rear分别为队头和队尾指针,则插入*s结点的操作应执行(C)。
A.front->
next=s;
front=s;
B.s->
next=rear;
rear=s;
C.rear->
D.s->
next=front;
37.栈的插入与删除操作在(A)进行。
A.栈顶B.栈底C.任意位置D.指定位置
38.当利用大小为N的一维数组顺序存储一个栈时,假定用top=-1表示栈空,则向这个栈插入一个元素时,首先应执行(A)语句修改top指针。
A.top++;
B.top--;
C.top=NULL;
D.top;
39.当采用顺序存储方式存储队列时,可能出现存储空间剩余,而不允许继续入队的情况,称为(B)。
A.溢出B.假溢出C.队列不能用顺序存储方式D.数组存储空间过小
40.当利用大小为N的一维数组顺序存储一个循环队列时,该队列的最大长度为(B)。
A.N-2B.N-1C.ND.N+1
41.从一个循环顺序队列删除元素时,首先需要()。
A.前移一位队首指针B.后移一位队首指针
C.取出队首指针所指位置上的元素D.取出队尾指针所指位置上的元素
42.循环队列存储在数组A[0..m]中,则入队时的操作为()。
43.4个园盘的Hahoi塔,总的移动次数为()。
A.7B.8C.15D.16
44.对于栈操作数据的原则是()。
45.有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?
()
A.543612B.453126C.346521D.234156
46.设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。
A.1,2,4,3,B.2,1,3,4,C.1,4,3,2,
47.如进栈序列1,2,3,4,5。
可能得到的出栈序列为()
A.1,2,5,3,4B.3,1,2,5,4C.3,2,5,4,1D.1,4,2,3,5E.都不可能
48.一个栈的入栈序列为A,B,C,D,E,则栈的不可能的出栈序列是()。
A.ABCDEB.EDCBAC.DECBAD.DCEAB
49.functioncalc(x,y:
integer):
integer;
begin
ify=1thencalc:
=x
elsecalc:
=calc(x,y-1)+x
end;
a,b均为正整数,则calc(a,b)=()
A.a*(b-1)B.a*bC.a+bD.a+a
50.执行完下列语句段后,i值为:
()。
intf(intx)
{return((x>
0)?
x*f(x-1):
2);
}
inti;
i=f(f
(1));
A.2B.4C.8D.无限递归
51.表达式a*(b+c)-d的后缀表达式是()。
A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd
52.允许对队列进行的操作有()。
53.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()
A.仅修改队头指针B.仅修改队尾指针
C.队头,队尾指针都可能要修改D.队头,队尾指针都要修改
54.对于循环队列(D)。
A.无法判断队列是否为空B.无法判断队列是否为满
C.队列不可能满D.以上说法都不是
55.循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()。
A.(rear-front+m)%mB.rear-front+1
C.rear-front-1D.rear-front
56.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?
A.1和5B.2和4C.4和2D.5和1
57.栈和队的共同点是()。
A.都是先进后出B.都是后进先出
C.只允许在端点处插入和删除元素D.没有共同点
58.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是()。
A.6B.4C.