数据结构第3章栈和队列练习题Word文件下载.docx
- 文档编号:21992513
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:15
- 大小:29.96KB
数据结构第3章栈和队列练习题Word文件下载.docx
《数据结构第3章栈和队列练习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构第3章栈和队列练习题Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
next=s;
f=s;
B)r->
r=s;
C)s->
D)s->
next=f;
8.在一个链式队列中,假设f和r分别为队头和队尾指针,则删除结点的运算是()
A)r=f->
next;
B)r=r->
C)f=f->
D)f=r->
9.下列关于线性表,栈和队列叙述,错误的是()
A)线性表是给定的n(n必须大于零)个元素组成的序列
B)线性表允许在表的任何位置进行插入和删除操作
C)栈只允许在一端进行插入和删除操作
D)队列只允许在一端进行插入一端进行删除
10.一个队列的入队序列是1,2,3,4,则队列的输出序列是()
A)4,3,2,1B)1,2,3,4
C)1,4,3,2D)3,2,4,1
11.设初始输入序列为1,2,3,4,5,利用一个栈产生输出序列,下列()序列是不可能通过栈产生的.
A)1,2,3,4,5B)5,3,4,1,2
C)43,2,1,5D)3,4,5,2,1
12.设栈s的初始状态为空,6个元素的入栈顺序为e1,e2,e3,e4,e5和e6.若出栈的顺序是e2,e4,e3,e6,e5,e1,则栈s的容量至少应该是()
A)6B)4
C)3D)2
13.为了减小栈溢出的可能性,可以让两个栈共享一片连续存储空间,两个栈的栈底分别设在这片空间的两端,这样只有当()时才可能产生上溢。
A.两个栈的栈顶在栈空间的某一位相遇
B.其中一栈的栈顶到达栈空间的中心点
C.两个栈的栈顶同时到达空间的中心点
D.两个栈均不空,且一个栈的栈顶到达另一个栈的栈顶
14.若进栈序列为3,5,7,9,进栈过程中可以出栈,则()不可能是一个出栈序列。
A.7,5,3,9B.9,7,5,3
C.7,5,9,3D.9,5,7,3
15.数组Q[0……n-1]用来表示一个环形队列,f为当前对头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数总小于n,计算队列中元素个数的公式为()。
A.r-fB.n+f-r
C.n+r-fD.(n+r-f)modn
16.4个元素a1、a2、a3和a4依次入栈,入栈过程中允许元素出栈,假设某一时刻站的状态是a3(栈顶)、a2、a1、(栈底),则不可能的出栈顺序是()。
A.a4,a3,a2,a1B.a3,a2,a4,a1
C.a3,a1,a4,a2D.a3,a4,a1,a2
17.与数据元素本身的形式、内容、相对位置、个数无关的数据是()。
A.存储结构
18.设用一个数组A[1……N]来存储一个栈,令A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。
当从栈中弹出一个元素时,变量T的变化为()。
A.T=T+1B.T=T-1
C.T不变D.T=n
19.有六个元素1、2、3、4、5、6的顺序进栈,下列()不是合法的出栈序列。
A.2、3、4、1、6、5B.3、2、4、6、5、1
C.4、3、1、2、5、6D.5、4、6、3、2、1
20.一个栈的入栈顺序是a、b、c、d、e,则栈的不可能输出序列是()。
A.e、d、c、b、aB.d、e、c、b、a
C.d、c、e、a、bD.a、b、c、d、e
21.设计一个判别表达式左、右括号是否配对出现的算法,采用()数据结构最佳。
22.下面4种内排序方法中,要求内存容量最大的是()。
23.栈的插入和删除操作在()进行。
24.向顺序栈中压入新元素时,应在()。
A.先移动栈顶指针B.先存入元素,再移动栈顶指针
25.链式栈与顺序栈相比,一个比较明显的优点是()。
A.插入操作更加方便B.通常不会出现栈满的情况
26.设一列顺序为1,2,3,4,5,6通过栈操作可以得到()的输出序列。
A.3,2,5,6,4,1B.1,2,3,4,5,6
C.6,5,4,3,2,1D.4,5,3,2,6,1
27.设一个栈的输入序列为A,B,C,D,则借助一个栈所得到输出序列不可能是().
A.A,B,C,DB.D,C,B,A
C.A,C,D,BD.D,A,B,C
28.若用一个大小为6的数组来实现循环队列,且当前rear和fornt的值分别为0和3。
从当前队列中删除一个元素,再加入两个元素后,rear和front的值分别为()。
29.由两个栈共享一个向量空间的好处是()。
A.减少存取时间,降低下溢发生的机率B.节省存储空间,降低上溢发生的机率
C.减少存取时间,降低上溢发生的机率D.节省存储空间,降低下溢发生的机率
30.设一数列的顺序为1,2,3,4,5,6,通过队列操作可以得到()的输出序列。
A.3,2,5,6,4,1B.1,2,3,4,5,6
C.6,5,4,3,2,1D.4,5,3,2,6,1
31.从一个顺序队列中删除元素时,首先要()。
32.在一个顺序存储的循环队列中,队头指针指向队头元素的()。
33.两栈共享数组存储空间,前一个栈的栈顶指针为p后一个栈的栈顶指针为q,能进行正常入栈操作的条件是()。
A.p<
=qB.p>
q
C.p<
q-1D.p=q-2
34.一个递归的定义可以用递归过程的求解,也可以用非递归过程求解,但单位从用行时间来看,通常递归过程比非递归过程()。
35.在一个顺序循环队列中,队尾指针指向队尾元素的()位置。
36.若(a-b)*(c+d)是中序表达式,则其后序表达式是()。
A.abcd+*-B.ab-cd+*
C.ab-*cd+D.a-bcd+*
37.字符A,B,C依次进入一个栈,按出栈的先后顺序组成不同的字符串,则至多可以组成()个不同的字符串.
A)14B)5C)6D)8
二、填空题
1.栈和队列的区别在于______________。
2.通常元素进栈的顺序是______________________。
3.通常元素出栈的顺序是________________________。
4.从一个循环队列中删除一个元素,通常的操作是____________________.
5.像一个循环队列中插入一个元素,通常的操作是____________________.
6.设栈S的初始状态为空,队列Q的初始状态如图所示
___________________________________________
a1a2a3a4
___________________________________________
↑↑
对头队尾
对栈S和队列Q进行以下两步操作:
(1)删除Q中的元素,将删除的元素插入S,直到Q为空
(2)依次将S中的元素插入Q,直到S为空
在上述两步操作后,队列q的状态是_______________
7.栈又称为___________表,队列又称为__________表。
8.栈中元素的进出原则是:
_____________。
9.队列中元素的进出原则是:
_______________。
10.一个栈的输入序列是12345,则栈的输出序列43512是_______________。
11.从循环队列中删除一个元素时,通常的操作是__________________。
12.向循环队列中插入一个元素时,通常的操作是______________。
13.对于顺序存储的栈,因为栈的空间是有限的,在进行__________运算时,可能发生栈的上溢,__________在进行_____________运算时,可能发生栈的下溢。
14.当堆栈用用顺序存储结构时,栈顶元素的值可用_________表示;
当堆栈采用链式存储结构时,栈顶元素的值可用____________表示。
15.若已知一个栈的入栈顺序是1,2,3,……n,其输出序列为p1,p2,p3,……,pn,若p1=n,则pi(1<
n)为_______________。
16.向一个链栈插入一个p所指向的结点时,需要把栈顶指针的值赋给p所指向的结点的_____________,然后把p赋给______________。
17.当用长度为N的数组顺序存储一个栈时,假定用top=N表示栈空,则表示栈满的条件为____________。
18.在用一维数组A[N]存储一个顺序循环队列时,若队列的首、尾指针分别用f和r表示,则队列长度为____________。
19.假设以S和X分别表示进栈和退栈操作,则对输入序列a,b,c,d,e进行一系列操作SSXSXSSXXX之后,得到的输出序列为_________。
三、指出下述程序段的功能是什么?
(1)voidDemo1(SeqStack*S){
inti;
arr[64];
n=0;
while(StackEmpty(S))arr[n++]=Pop(S);
for(i=0,i<
n;
i++)Push(S,arr[i]);
}//Demo1
(2)SeqStackS1,S2,tmp;
DataTypex;
...//假设栈tmp和S2已做过初始化
while(!
StackEmpty(&
S1))
{
x=Pop(&
S1);
Push(&
tmp,x);
}
tmp))
x=Pop(&
tmp);
Push(&
S1,x);
S2,x);
(3)voidDemo2(SeqStack*S,intm)
{//设DataType为int型
SeqStackT;
inti;
InitStack(&
T);
while(!
StackEmpty(S))
if((i=Pop(S))!
=m)Push(&
T,i);
StackEmpty(&
T))
{
i=Pop(&
Push(S,i);
}
(4)voidDemo3(CirQueue*Q)
intx;
SeqStackS;
InitStack(&
S);
QueueEmpty(Q))
{x=DeQueue(Q);
Push(&
S,x);
}
s))
{x=Pop(&
EnQueue(Q,x);
}//Demo3
(5)CirQueueQ1,Q2;
//设DataType为int型
intx,i,n=0;
...//设Q1已有内容,Q2已初始化过
QueueEmpty(&
Q1))
{x=DeQueue(&
Q1);
EnQueue(&
Q2,x);
n++;
for(i=0;
i<
i++)
{x=DeQueue(&
Q2);
EnQueue(&
Q1,x);
EnQueue(&
}
四、判断题
1.栈和队列的存储,既可以采用顺序存储结构,又可以采用链式存储结构。
2.任何一个递归过程都可以转换成非递归过程。
3.若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,
4.通常使用队列来处理函数的调用。
5.循环队列通常用指针来实现队列的头尾相接。
6.栈的数据存储原则是先进先出。
7.栈中只有栈底元素不能被删除。
8.循环队列也存在空间溢出问题。
9.栈和队列的存储方式,只能是顺序存储。
10.栈和队列逻辑上都是线性的。
11.对于链队来说,即使不设置尾指针也能进行入队操作。
12.队列的入队序列为”1,2,3,……,n”,出队序列为”P1,P2,P3,……,Pn”,则Pi+1>
Pi。
13.循环队列就是采用循环链表作为存储结构的队列。
14.若一个栈为空,则可以不用栈顶指针。
15.栈是一种入栈和出栈操作的次序作了限制的线性表。
五、算法设计题
1.采用递归方法把任一十进制正整数转换为s(2<
=s<
=9)数输出。
2.采用辗转相除和递归方法求两个正整数的最大公约数。
3.采用递归的方法求两个数的最小公倍数
4.在一个链式队列中只设置队尾指针,不设置队首指针,并且让队尾结点的指针域指向队首结点(称此为循环队列),试分别写出在循环链队上进行插入和删除操作的算法。
5.一个双向栈S是在同一向量空间内实现的两个栈,它们的栈底分别设在向量空间的两端。
试为此双向栈设计初始化InitStack(S)、入栈Push(S,i,x)和出栈Pop(S,i)等算法,其中i为0或1,用以表示栈号。
6.Ackerman函数定义如下:
请写出递归算法。
n+1 当m=0时
AKM(m,n)=AKM(m-1,1)当m≠0,n=0时
AKM(m-1,AKM(m,n-1))当m≠0,n≠0时
7.假设循环队列中只设rear和quelen来分别指示队尾元素的位置和队中元素的个数,试给出判别此循环队列的队满条件,并写出相应的入队和出队算法,要求出队时需返回队头元素。
8.回文是指正读反读均相同的字符序列,如"
abba"
和"
abdba"
均是回文,但"
good"
不是回文。
试写一个算法判定给定的字符向量是否为回文。
(提示:
将一半字符入栈)
9.利用栈的基本操作,写一个将栈S中所有结点均删去的算法voidClearStack(SeqStack*S),并说明S为何要作为指针参数?
10.利用栈的基本操作,写一个返回S中结点个数的算法intStackSize(SeqStackS),并说明S为何不作为指针参数?
11.设计算法判断一个算术表达式的圆括号是否正确配对。
(提示:
对表达式进行扫描,凡遇到'
('
就进栈,遇'
)'
就退掉栈顶的'
,表达式被扫描完毕,栈应为空。
12.用少用一个元素空间的方法来区别循环队列的队空和队满,试为其设计置空队,判队空,判队满、出队、入队及取队头元素等六个基本操作的算法。
13.对于循环向量中的循环队列,写出求队列长度的公式。
14.写算法,借助于栈将一个单链表置逆。
一、填空题
二、1.向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;
对于栈只能在栈顶插入和删除元素;
对于队列只能在队尾插入和队首删除元素。
2.栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。
不允许插入和删除运算的一端称为栈底。
3.队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
4.在一个循环队列中,队首指针指向队首元素的前一个位置。
5.在具有n个单元的循环队列中,队满时共有n-1个元素。
6.向栈中压入元素的操作是先存入元素,后移动栈顶指针。
7.从循环队列中删除一个元素时,其操作是先移动队首指针,后取出元素。
8.带表头结点的空循环双向链表的长度等于0。
解:
二、判断正误(判断下列概念的正确性,并作出简要的说明。
)
三、(×
)1.线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。
(×
)2.在表结构中最常用的是线性表,栈和队列不太常用。
错,不一定吧?
调用子程序或函数常用,CPU中也用队列。
(√)3.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)4.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
)5.栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
)6.栈和队列是一种非线性数据结构。
错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(√)7.栈和队列的存储方式既可是顺序方式,也可是链接方式。
(√)8.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
)9.队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
错,后半句不对。
)10.一个栈的输入序列是12345,则栈的输出序列不可能是12345。
错,有可能。
三、单项选择题(每小题1分,共20分)
(B)1.栈中元素的进出原则是
A.先进先出B.后进先出C.栈空则进D.栈满则出
(C)2.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为
A.iB.n=iC.n-i+1D.不确定
解释:
当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。
(若不要求顺序出栈,则输出序列不确定)
(B)3.判定一个栈ST(最多元素为m0)为空的条件是
A.ST->
top<
>
0B.ST->
top=0C.ST->
m0D.ST->
top=m0
(A)4.判定一个队列QU(最多元素为m0)为满队列的条件是
A.QU->
rear-QU->
front==m0B.QU->
rear-QU->
front-1==m0C.QU->
front==QU->
rearD.QU->
rear+1
队满条件是元素个数为m0。
由于约定满队时队首指针与队尾指针相差1,所以不必再减1了,应当选A。
当然,更正确的答案应该取模,即:
QU->
front==(QU->
rear+1)%m0
(D)5.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为
(A)r-f;
(B)(n+f-r)%n;
(C)n+r-f;
(D)(n+r-f)%n
6.
设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作或队操作。
在进栈或进队操作时,按a1、a2、a3、a4次序每次进入一个元素。
假设栈或队的初始状态都是空。
现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;
这时,第一次出栈得到的元素是A,第二次出栈得到的元素是B是;
类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;
这时,第一次出队得到的元素是C,第二次出队得到的元素是D。
经操作后,最后在栈中或队中的元素还有E个。
供选择的答案:
A~D:
①a1②a2③a3④a4
E:
①1②2③3④0
答:
ABCDE=2,4,1,2,2
7.从供选择的答案中,选出应填入下面叙述?
内的最确切的解答,把相应编号写在答卷的对应栏内。
栈是一种线性表,它的特点是A。
设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。
往栈中推入(PUSH)一个新元素时,变量T的值B;
从栈中弹出(POP)一个元素时,变量T的值C。
设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是D,变量T的值是E。
A:
①先进先出②后进先出③进优于出④出优于进⑤随机进出
B,C:
①加1②减1③不变④清0⑤加2⑥减2
D:
①a,b②b,c③c,a④b,a⑤c,b⑥a,c
①n+1②n+2③n④n-1⑤n-2
答案:
ABCDE=2,2,1,6,4
注意,向地址的高端生长,称为向上生成堆栈;
向地址低端生长叫向下生成堆栈,本题中底部为n,向地址的低端递减生成,称为向下生成堆栈。
8.从供选择的答案中,选出应填入下面叙述?
在做进栈运算时,应先判别栈是否A;
在做退栈运算时,应先判别栈是否B。
当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为C。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的D分别设在这片内存空间的两端,这样,只有当E时,才产生上溢。
A,B:
①空②满③上溢④下溢
C:
①n-1②n③n+1④n/2
①长度②深度③栈顶④栈底
①两个栈的栈顶同时到达栈空间的中心点②其中一个栈的栈顶到达栈空间的中心点
③两个栈的栈顶在达栈空间的某一位置相遇④两个栈均不空,且一个栈的栈顶到达另一个栈的栈底
ABCDE=2,1,2,4,3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列 练习题