栈和队列问答答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构复习题答案:栈和队列
问答题
1、解答:由栈的定义可知,这种结构的基本性质综述如下:
(1)集合性。
栈是由若干个元素集合而成,当没有元素的空集合称为空栈;
(2)线性结构。
除栈底元素和栈顶元素外,栈中任一元素均有唯一的前驱元素和后继元素;
(3)受限制的运算。
只允许在栈顶实施压入或弹出操作,且栈顶位置由栈指针所指示;
(4)数学性质。
当多个编号元素依某种顺序压入,且可任意时刻弹出时,所获得的编号元素排列的数目,恰好满足卡塔南数列的计算,即:
Cn =Cn 2n /(n+1)
其中,n为编号元素的个数,Cn 是可能的排列数目。
2、解答:在队列的顺序存储结构中,设队头指针为front,队尾指针为rear,队的容量(存储空间的大小)为m。
当有元素要加入队列时,若rear=m(初始时reat=0),则发生队列的上溢现象,该元素不能加入队列。
这里要特别注意的是:队列的假溢出现象,队列中还有空余的空间,但元素不能进队列。
造成这种现象的原因是由于队列的操作方式所致。
解决队列的上溢有以下几种方法:
(1)建立一个足够大的存储空间,但这样做往往会造成空间使用的效率低。
(2)当出现假溢出时,可采用以下几种方法:
①采用平移元素的方法。
每当队列中加入一个元素时,队列中已有的元素向队头移动一个位置(当然要有空余的空间可移);
②每当删去一个队头元素时,则依次序移队中的元素,始终使front指针指向队列中的第一个位置;
③采用循环队列方式。
把队头队尾看成是一个首尾相邻的循环队列,虽然物理上队
3、解答:(1) 解答:status insert(Rear,x){
// 假定Rear为循环链队的队尾指针,x为待插入的元素
(1) malloc(p);
p->data=x; // 建立值为x的新结点p^
(2) if( Rear=nil){
Rear=p; Rear->next=p;
}
else {p->next=Rear->next;
Rear->next=p; Rear=p;
}
// 若条件成立则建立循环链队的第一个结点,否则在队尾插入p^结点}
(2) 解答:status delete(Rear){
if( Rear=nil ) error('underflow');
if (Rear->next= =Rear) Rear=nil;
else Rear->next=Rear->next->next;
} //Rear^.next 所指向的结点为循环链队的队首结点
4、栈是允许在同一端进行插入和删除操作的特殊线性表。
允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。
插入一般称为进栈(PUSH),删除则称为退栈(POP)。
栈也称为后进先出表(LIFO--Last IN First Out表)。
5、ABC,BAC,CBA
6、X:进栈S:出栈XSXXXSSSXXSXXSXXSSSS
7、解答:InitQueue(qu); 队列为空
EnQueue(qu,'A'); 队列为A
EnQueue(qu,'B); 队列为AB
EnQueue(qu,'C); 队列为ABC
EnQueue(qu,x; 队列为ABCx
EnQueue(qu,x; 队列为ABCxx
EnQueue(qu,'D); 队列为ABCxxD
EnQueue(qu,'E); 队列为ABCxxDE
EnQueue(qu,'F); 队列为ABCxxDEF
EnQueue(qu,x) 队列为ABCxxDEFx
EnQueue(qu,'G); 队列为ABCxxDEFxG
EnQueue(qu,X) 队列为ABCxxDEFxGX
EnQueue(qu,X) 队列为ABCxxDEFxGXX
EnQueue(qu,X) 队列为ABCxxDEFxGXXX
8、解答:d,e,b,g,h入队
d e b g h
F r
d,e出队
b g h
F r
i,j,k,l,m入队
b g h i j k l m
F r
n,o,p入队
b g h i j k l m n o p
F r
所有元素均正好能入队,共有11个存储空间,恰好11个元素。
9、解答:图略。
p不能入队,共有11个地址,p为第12个元素,故不能入队。
10、答:三个:CDEBA,CDBEA,CDBAE
11、答:一般说,高级语言的变量名是以字母开头的字母数字序列。
故本题答案是:
AP321,PA321,P3A21,P32A1,P321A。
14、答:栈和队列都是插入和删除操作的位置受限制的线性表。
栈是限定仅在表尾进行插入和删除的线性表,是后进先出的线性表,而队列是限定在表的一端进行插入,在另一端进
行删除的线性表,是先进先出的线性表。