第三章栈和队列练习题答案.docx
- 文档编号:8727095
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:26
- 大小:97.45KB
第三章栈和队列练习题答案.docx
《第三章栈和队列练习题答案.docx》由会员分享,可在线阅读,更多相关《第三章栈和队列练习题答案.docx(26页珍藏版)》请在冰豆网上搜索。
第三章栈和队列练习题答案
第三章栈和队列练习题答案
一、名词说明:
1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵
二、填空题:
1.栈修改的原那么是_先进后出________或称后进先出________,因此,栈又称为__后进先出______线性表。
在栈顶进行插入运算,被称为_进栈_______或__入栈______,在栈顶进行删除运算,被称为___退栈_____或__出栈______。
2.栈的大体运算至少应包括_初始化InitStack(S)_______、_进栈Push(S,X)_______、_退栈Pop(S)_______、读栈顶Top(S)________、_判栈空Empty(S)_______五种。
3.关于顺序栈,假设栈顶下标值top=0,现在,若是作退栈运算,那么产生“__下溢______”。
4.关于顺序栈而言,在栈满状态下,若是现在在作进栈运算,那么会发生“_上溢_______”。
5.一样地,栈和线性表类似有两种实现方式,即__顺序______实现和__链接实现。
6.top=0表示栈空,现在作退栈运算,那么产生“下溢”;top=sqstack_maxsize-1表示栈满,现在作进栈运算,那么产生“上溢”。
7.以下运算实此刻顺序栈上的初始化,请在________处用适当的句子予以填充。
intInitStack(SqStackTp*sq)
{sq->top=0;
return
(1);}
8.以下运算实此刻顺序栈上的进栈,请在________处用适当的语句予以填充。
IntPush(SqStackTp*sq,DataTypex)
{if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}
else{_sq->top++,
sq->data[sq->top]=x;
return
(1);}
}
9.以下运算实此刻顺序栈上的退栈,请在________________用适当句子予以填充。
IntPop(SqStackTp*sq,DataType*x)
{if(sp->top==0){error(“下溢”);return(0);}
else{*x=sq->data[sq->top];
sq->top--;
return
(1);}
}
10.以下运算实此刻顺序栈上判栈空,请在________________处用适当句子予以填充。
IntEmptyStack(SqStackTp*sq)
{if(sq->top==0)return
(1);
elsereturn(0);
}
11.以下运算实此刻顺序栈上取栈顶元素,请在________________处用适当句子予以填充。
IntGetTop(SqStackTp*sq,DataType*x)
{if(_sq->top==0)return(0);
else{*x=sq->data[sq->top];
return
(1);}
}
12.以下运算实此刻链栈上的初始化,请在________________处用请适当句子予以填充。
VoidInitStacl(LstackTp*ls){ls=NULL;}
13.以下运算实此刻链栈上的进栈,请在处用请适当句子予以填充。
VoidPush(LStackTp*ls,DataTypex)
{LstackTp*p;p=malloc(sizeof(LstackTp));
p->data=x,ls=p;
p->next=ls;
p->data,free(p);
}
14.以下运算实此刻链栈上的退栈,请在________________处用请适当句子予以填充。
IntPop(LstackTp*ls,DataType*x)
{LstackTp*p;
if(ls!
=NULL)
{p=ls;
*x=p->data=x,
ls=ls->next;
ls=p;
return
(1);
}elsereturn(0);
}
15.以下运算实此刻链栈上读栈顶元素,请在________________处用请适当句子予以填充。
IntGetTop(LstackTp*ls,DataType*x)
{if(ls!
=NULL){*x=ls->data;return
(1);}
elsereturn(0);
}
16.必需注意,递归概念不能是“循环概念”。
为此要求任何递归概念必需同时知足如下条件:
、
(A)被概念项在概念中的应用(即作为概念项的显现)具有更小的“尺度”;
(B)被概念项在最小“尺度”上的概念不是递归的。
17.队列简称队。
在队列中,新插入的结点只能添加到队尾,被删除的只能是排在队头
的结点。
18.队列以线性表为逻辑结构,至少包括队列初始化InitQueue(Q)、入队列EnQueue(Q,X)、出队OutQueue(Q,X)、判队列空EmptyQueue(Q)、读队头ead(Q,x)
五种大体运算。
19.顺序队的出、入队操作会产生“假溢出”。
20.以下运算实此刻循环队上的初始化,请在________________处用适当句子予以填充。
VoidInitCycQueue(CycqueueTp*sq)
{sq->front=0;
sq->rear=0;}
21.以下运算实此刻循环队上的入队列,请在________________处用请适当句子予以填充。
IntEnCycQueue(CycquereTp*sq,DataTypex)
{if((sq->rear+1)%maxsize==sq->front)
{error(“队满”);return(0);
else{sq->rear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x
return
(1);
}
22.以下运算实此刻循环队上的出队列,请在________________处用适当句子予以填充。
IntOutCycQueue(CycquereTp*sq,DataType*x)
{if(sq->front==sq->rear){error(“队空”);return(0);}
else{sq->fornt=(sq->rear+1)%maxsize;
*x=sq->data[sq->rear];
return
(1);
}
}
23.以下运算实此刻循环队上判队空,请在________________处用适当句子予以填充。
IntEmptyCycQueue(CycqueueTpsq)
{if=return
(1);
elsereturn(0);
}
24.以下运算实此刻循环队上取队头,请在________________处用适当句子予以填充。
IntGetHead(CycqueueTpsq,DataType*x)
{if==________________return(0);
else{*x=[+1)%maxsize];
return
(1);
}
25.链队在必然范围内可不能显现队满的情形。
当==试,队中无元素,现在队空。
26.以下运算实此刻链队上的初始化,请在________________处用适当句子予以填充。
voidInitQueue(QueptrTp*lp)
{LqueueTp*p;
p=(LqueueTp*)malloc(sizeof(LqueueTp));
lq->front=p;
lq->rear=p;
(lq->front)->next=NULL;
}
27.以下运算实此刻链队上的入队列,请在________________处用适当句子予以填充。
VoidEnQueue(QueptrTp*lq,DataTypex)
{LqueueTp*p;
p=(LqueueTp*)malloc(sizeof(LqueueTp));
p->data=x;
p->next=NULL;
(lq->rear)->next=p;
lq->rear=p;
}
28.以下运算实此刻链队上的出队列,请在________________处用适当句子予以填充。
intOutQueue(QuetrTp*lq,DataType*x)
{LqueueTp*s;
if(lq->front==lq->rear){erroe(“队空”);return(0);}
else{s=(lq->front)->next;
*x=s->data;
(lq->front)->next=s->next;
if(s->next==NULL)lq->rear=lq->front;
free(s);
return
(1);
}
}
29.以下运算实此刻链队上判队空,请在________________处用适当句子予以填充
intEmptyQueue(QueptrTp*lq)
{if==
)return
(1);
elsereturn(0);
}
30.以下运算实此刻链队上读队头元素,请在________________处用适当句子予以填充。
IntGetHead(QueptrTplq,DataType*x)
{LqueueTp*p;
if==return(0);
else{p=>next;
*x=p->data;
return
(1);
}
}
31.栈称为先进后出(后进先出)线性表。
32.队称为先进先出(后进后出)线性表。
33.设一个链栈的栈顶指针为ls,栈中结点的格式为infonext,栈空的条件是ls==NUL;若是栈不为空,那么退栈操作为p=ls;*x=p->info;ls=ls->next;free(p)。
34.在具有n个单元的循环队列中,队满时共有44n-1个元素。
35.__栈_能够作为实现递归函数挪用的一种数据结构。
36.对带有头结点的列队列lq,判定队列中只有一个数据元素的条件是lq->front->next==lq->rear。
37.【李春葆】向量、栈和队列都是线性结构,能够在向量的任何位置插入和删除元素;关于栈只能在栈顶插入和删除元素;关于队列只能在队尾插入和队首删除元素。
38.栈是一种特殊的线性表,许诺插入和删除运算的一端称为栈顶。
不许诺插入和删除运算的一端称为栈底。
39.队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
40.在一个循环队列中,队首指针指向队首元素的前一个位置。
41.在具有n个单元的循环队列中,队满时共有n-1个元素。
42.向栈中压入元素的操作是先移动栈顶指针,后存入元素。
43.从循环队列中删除一个元素时,其操作是先移动队首指针,后掏出元素。
44.〖00年统考题〗带表头结点的空循环双向链表的长度等于0。
解:
三、判定正误(判定以下概念的正确性,并作出简要的说明。
)
(×)1.线性表的每一个结点只能是一个简单类型,而链表的每一个结点能够是一个复杂类型。
错,线性表是逻辑结构概念,能够顺序存储或链式存储,与元素数据类型无关。
(×)2.在表结构中最经常使用的是线性表,栈和队列不太经常使用。
错,不必然吧?
挪用子程序或函数经常使用,CPU中也用队列。
(√)3.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)4.关于不同的利用者,一个表结构既能够是栈,也能够是队列,也能够是线性表。
正确,都是线性逻辑结构,栈和队列实际上是特殊的线性表,对运算的概念略有不同罢了。
(×)5.栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
(×)6.栈和队列是一种非线性数据结构。
错,他们都是线性逻辑结构,栈和队列实际上是特殊的线性表,对运算的概念略有不同罢了。
(√)7.栈和队列的存储方式既可是顺序方式,也可是链接方式。
(√)8.两个栈共享一片持续内存空间时,为提高内存利用率,减少溢出机遇,应把两个栈的栈底别离设在这片内存空间的两头。
(×)9.队是一种插入与删除操作别离在表的两头进行的线性表,是一种先进后出型结构。
错,后半句不对。
(×)10.一个栈的输入序列是12345,那么栈的输出序列不可能是12345。
错,有可能。
四、单项选择题
1.在以下栈的大体运算中,不是加工型运算的是()
(A)lnitStack(S)(B)Push(S,X)(C)Pop(S)(D)empty(S)
2.以下说法正确的选项是()
(A)因链栈本身没有容量限制,故在用户内存空间的范围内可不能显现栈满情形
(B)因顺序栈本身没有容量限制,故在用户内存空间的范围内可不能显现栈满情形
(C)关于链栈而言,在栈满状态下,若是现在再作进栈运算,那么会发生“上溢”
(D)关于顺序栈而言在栈满状态下若是现在再作迸栈运算,那么会发生“下溢”。
3.在以下队列的大体运算中,不是加工型运算的是()
(A)InitQueue(Q)(B)EnQueue(Q,X)(C)OutQueu(Q,X)(D)GetHead(Q,x)
4.顺序队列的人队操作应为()
(A)=+1[]=x
(B)[]=x=+1
(C)=+1)%maxsize;[]=x
(D)[sqrear]=x=+1)%maxsize
5.循环队列的人队操作应为()
(A)=+1[]=x
(B)[]=x=+1
(C)=+1)%maxsize[]=x
(D)[]=x=+1)%maxsize
6.顺序队列的出队操作为()
(A)=+1)%maxsize
(B)=+1
(C)=+1)%maxsize
(D)=+1
7.循环队列的出队操作为()
(A)=+1)%maxsize
(B)=+1
(C)=+)%maxsize
(D)=+1
8.循环队列的队满条件为()
(A)+1)%mazsize==+1)%maxsize;
(B)+1%maxsize==+1
(C)sq.(rear+1)%maxsize==
(D)==
9.循环队列的队空条件为()
(A)+1)%maxsize==+1)%maxsize
(B)+)%maxsize==+1
(C)+1)%maxsize==
(D)==
10.线性表的顺序存储结构是一种()的存储结构,线性表的链式存储结构是一种()的存储结构。
(A)随机存取(B)顺序存储
11.若是以链表作为栈的存储结构,那么退栈操作是()
(A)必需判别栈是不是满(B)必需判别栈是不是空
(C)判别栈元素的类型(D)对栈不做任何操作
12.若是以链表作为栈的存储结构,那么退栈操作时()
(A)必需判别栈是不是满(B)判别栈元素的类型
(C)必需判别栈是不是空(D)队栈不做任何判别
13.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,若是6个元素出线的顺序是s2,s3,s4,s6,s5,s1,那么栈的容量至少应该是()
(A)2(B)3(C)5(D)6
14.设有一顺序栈已含3个元素,如以下图所示,元素a4正等待进栈。
那么以下4个序列
中不可能显现的出栈序列是()
0123maxsize-1
a1
a2
a3
sq
↑top
(A)a3,a1,a4,a2(B)a3,a2,a4,a1(C)a3,a4,a2,a1(D)a4,a3,a2,a1
15.向一个栈顶指针为Top的链中插入一个s所指结点时,其操作步骤为()
(A)Top->next=s(B)s->next=Top->next;Top->next=s
(C)s->next=Top;Top=s(D)s->next=Top;Top=Top->next
16.从栈顶指针为Top的链栈中删除一个结点,并将被删节点的值保留到x中,其操作步骤为()
(A)x=Top->data;Top=Top->next(B)Top=Top->next;x=Top->data
(C)x=Top;Top=Top->next(D)x=Top->data
17.在一个链队中,假设f,r别离为队首、队尾指针,那么插入s所指结点的操作为()
(A)f->next=c;f=s(B)r->next=s;r=s
(C)s->next=r;r=s(D)s->next=f;f=s
18.链栈与顺序栈相较,有一个比较明显的优势即()
(A)插入操作更方便(B)通常可不能显现栈满的情形
(C)可不能显现栈空的情形(D)删除操作更方便
19.一个栈的入栈序列是a,b,c,d,e,那么栈的不可能的输出序列是()
(A)edcba(B)decba(C)dceab(D)abcde
20.一个队列的人列序是1,2,3,4,那么队列的输出系列是()
(A)4,3,2,1(B)1,2,3,4,(C)1,4,3,2(D)3,2,4,1
21.设计一个判别表达式中左、右括号是不是配对出线的算法,采纳()数据结构最正确。
(A)线性标的顺序存储结构(B)栈
(C)队列(D)线性表的链式存储结构
22.假设已知一个栈的输入序列为1,2,3,...,n,其输出序列为P1、P2、...Pn。
假设p1=n,那么P1为
(A)i(B)n=i(C)n-i+1(D)不确信
23.以下说法正确的选项是
(A)顺序队和循环队的队满和队空判定条件是一样的
(B)栈能够作为实现进程挪用的一种数据结构
(C)插人和删除操作是数据结构中最大体的两种操作,因此这两种操作在数组中也常常利用
(D)在循环队列中,front指向队列中第一个元素的前一名置,rear指向实际的队尾元素,队列为满的条件front=rear
24.栈中元素的进出原那么是
(A)先进先出(B)后进先出(C)栈空那么进(D)栈满那么出
25.假设已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,假设p1=n,那么pi为
(A)i(B)n=i(C)n-i+1(D)不确信
说明:
当p1=n,即n是最先出栈的,依照栈的原理,n必然是最后入栈的(事实上题目已经说明了),那么输入顺序必然是1,2,3,…,n,那么出栈的序列是n,…,3,2,1。
(假设不要求顺序出栈,那么输出序列不确信)
26.判定一个栈ST(最多元素为m0)为空的条件是
(A)ST->top<>0(B)ST->top=0(C)ST->top<>m0(D)ST->top=m0
27.判定一个队列QU(最多元素为m0)为满队列的条件是
(A)QU->rear-QU->front==m0(B)QU->rear-QU->front-1==m0
(C)QU->front==QU->rear(D)QU->front==QU->rear+1
解:
队满条件是元素个数为m0。
由于约定满队时队首指针与队尾指针相差1,因此没必要再减1了,应被选A。
固然,更正确的答案应该取模,即:
QU->front==(QU->rear+1)%m0
28.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一名置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为
(A)r-f;(B)(n+f-r)%n;(C)n+r-f;(D)(n+r-f)%n
29.从供选择的答案中,选出应填入下面表达?
内的最确切的解答,把相应编号写在答卷的对应栏内。
设有4个数据元素a1、a2、a3和a4,对他们别离进行栈操作或队操作。
在进栈或进队操作时,按a1、a2、a3、a4顺序每次进入一个元素。
假设栈或队的初始状态都是空。
现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈取得的元素是A,第二次出栈取得的元素是B是;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队取得的元素是C,第二次出队取得的元素是D。
经操作后,最后在栈中或队中的元素还有E个。
供选择的答案:
A~D:
(A)a1(B)a2(C)a3(D)a4
E:
(A)1(B)2(C)3(D)0
答:
ABCDE=B,D,A,B,B
30.从供选择的答案中,选出应填入下面表达?
内的最确切的解答,把相应编号写在答卷的对应栏内。
栈是一种线性表,它的特点是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:
(A)先进先出(B)后进先出(C)进优于出(D)出优于进(E)随机进出
B,C:
(A)加1(B)减1(C)不变(D)清0(E)加2(F)减2
D:
(A)a,b(B)b,c(C)c,a(D)b,a(E)c,b(F)a,c
E:
(A)n+1(B)n+2(C)n(D)n-1(E)n-2
答案:
ABCDE=B,B,A,F,D
注意,向地址的高端生长,称为向上生成堆栈;向地址低端生长叫向下生成堆栈,此题中底部为n,向地址的低端递减生成,称为向下生成堆栈。
31.从供选择的答案中,选出应填入下面表达?
内的最确切的解答,把相应编号写在答卷的对应栏内。
在做进栈运算时,应先判别栈是不是A;在做退栈运算时,应先判别栈是不是B。
当栈中元素为n个,做进栈运算时发生上溢,那么说明该栈的最大容量为C。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片持续的内存空间时,应将两栈的D别离设在这片内存空间的两头,如此,只有当E时,才产生上溢。
供选择的答案:
A,B:
(A)空(B)满(C)上溢(D)下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 队列 练习题 答案