顺序存储结构的线性表——习题

上传人:san****019 文档编号:70268885 上传时间:2019-01-16 格式:PPT 页数:16 大小:267.81KB
返回 下载 相关 举报
顺序存储结构的线性表——习题_第1页
第1页 / 共16页
顺序存储结构的线性表——习题_第2页
第2页 / 共16页
顺序存储结构的线性表——习题_第3页
第3页 / 共16页
顺序存储结构的线性表——习题_第4页
第4页 / 共16页
顺序存储结构的线性表——习题_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《顺序存储结构的线性表——习题》由会员分享,可在线阅读,更多相关《顺序存储结构的线性表——习题(16页珍藏版)》请在金锄头文库上搜索。

1、第二章顺序存储结构的线性表,习题课,选择题,1、一个顺序表的首元存储地址是100,每个元素的长度为2,则第5个元素的地址是_。 A 110 B 108 C 112 D 120 2、一个栈的入栈序列为a,b,c,d,e,则栈的不可能的输出序列是_。 A edcba B decba C dceab D abcde,3、若已知一个栈的入栈序列是1,2,n,其输出序列为p1,p2,p3,pn,若p1=n,则pi=_。 A i B n-i C n-i+1 D 不能确定 4、一个队列的入队序列为1,2,3,4,则其输出序列可能是_。 A 4,3,2,1 B 1,2,3,4 C 1,4,2,3 D 3,2,

2、4,1 5、判定一个容量为m的队列为空的条件是_。 A rear-front=m B front-rear=m C rear-front-1=m D front-rear-1=m E rear=front F rear=front-1,6、栈和队列的共同点是_。 A、都是先进后出 B、都是先进先出 C、只允许在端点处插入和删除元素 D、没有共同点,填空题,1、向量、栈和队列都是_结构,可以在向量的_位置插入和删除元素;对于栈只能在_插入和删除元素;对于队列只能在_插入元素和_删除元素。 2、向一个长度为n的向量的第i(0in+2)个元素之前插入一个元素时,需向后移动_个元素。 3、向一个长度为

3、n的向量中删除第i(0in+2)个元素时,需向前移动_个元素。,4、一个栈的输入序列是12345,如果栈的输出序列43512是_。 5、一个栈的输入序列是12345,如果栈的输出序列12345是_。,算法编写题,1、已知一个顺序表按元素值的升序排列,编写一个算法:插入一个元素后保持该顺序表是有序的。,PROCEDURE Insert(ET a,int n,int x) If(x=an) an+1=x; Else int i=1; while(x=ai) do i=i+1; for j=n to i do aj+1=aj; ai=x; n=n+1; END,第二题,试写出在顺序存储结构下逆转线性

4、表的算法,要求使用最少的附加空间。,PROCEDURE nizhuan(ET a,int n) For k=1 to n/2 do t=ak; ak=an-k+1; an-k+1=t; END,第三题,有两个顺序表A和B,分别有m个和n个元素,其元素均以从小到大的升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是以从小到大的升序排列。 比如A=3,5,8,11 B=2,6,8,9,11,15,20 则 C=2,3,5,6,8,8,9,11,11,15,20,PROCEDURE hebing(a, b,m,n) ET a, ET b,int m,int n i=1; j=1; k=

5、1; While(i=m and j=n) do If (aibj) ck=ai;i=i+1;k=k+1; Else ck=bj;j=j+1;k=k+1; If(j=n) for t=(i+1) to m do ck=at;k=k+1 If (i=m) for t=(j+1) to n do ck=bt; k=k+1; ,第四题,设有n个人围成一圈,每个人的编号依次为1,2,3,n。现从编号为k的人开始报数,数到m的人便出列,接着从出列的下一个人开始重新报数,数到m的人又出列,以此类推,直到所有的人都出列为止。请写出算法求出n个人的出列顺序。,分析,设以自然数1,2,3,n为元素构成一个循环队

6、列,并用一个数组a存放该队列中每个元素的直接后继,其中ai表示i的后继。显然该数组初始化时应该这样: ai=i+1, i=1,2,n-1 an=1;,设x为当前所求的出列者(序号),它的前驱为t,则有at=x,而且x的后继为ax,则当前的队列为 , t , x , ax , 当x出列后,队列变为 , t , ax , 显然,此时t的后继已变为ax。由此可见,当x出列时,只需作以下两个操作: 1、将所求到的x存入另一个数组b。 2、ax赋值给at,即 at=ax。,接下来的问题是如何确定每次出列者。 设s首先指向每次第一个报数者,t指向s时,s便指向它的后继, t再指向s时,s又指向它的后继,如此循环m次后,t便是当前出列者x,s便是下次开始报数者。 for i =1 to m do t=s; s=as; 这样就能够将每次出列者求出来,但是不便于实现上页所述的操作2。因此只要循环m-1次就两者都能兼顾了。此时的t正是当前出列者x的前驱。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号