(精品)第二章顺序存储结构的线性表——习题课.ppt
第二章顺序存储结构的线性表习题课选择题n1、一个顺序表的首元存储地址是100,每个元素的长度为2,则第5个元素的地址是_。nA 110 B 108 C 112 D 120n2、一个栈的入栈序列为a,b,c,d,e,则栈的不可能的输出序列是_。nA edcba B decba nC dceab D abcden3、若已知一个栈的入栈序列是1,2,n,其输出序列为p1,p2,p3,pn,若p1=n,则pi=_。nA i B n-i C n-i+1 D 不能确定n4、一个队列的入队序列为1,2,3,4,则其输出序列可能是_。nA 4,3,2,1 B 1,2,3,4 C 1,4,2,3 D 3,2,4,1n5、判定一个容量为m的队列为空的条件是_。nA rear-front=m B front-rear=mnC rear-front-1=m D front-rear-1=mnE rear=front F rear=front-1n6、栈和队列的共同点是_。nA、都是先进后出nB、都是先进先出nC、只允许在端点处插入和删除元素nD、没有共同点填空题n1、向量、栈和队列都是_结构,可以在向量的_位置插入和删除元素;对于栈只能在_插入和删除元素;对于队列只能在_插入元素和_删除元素。n2、向一个长度为n的向量的第i(0in+2)个元素之前插入一个元素时,需向后移动_个元素。n3、向一个长度为n的向量中删除第i(0i=an)an+1=x;nElsen int i=1;n while(x=ai)do i=i+1;n for j=n to i do aj+1=aj;n ai=x;n n=n+1;nnEND第二题n试写出在顺序存储结构下逆转线性表的算法,要求使用最少的附加空间。nPROCEDURE nizhuan(ET a,int n)nFor k=1 to n/2 don t=ak;n ak=an-k+1;n an-k+1=t;nnEND 第三题n有两个顺序表A和B,分别有m个和n个元素,其元素均以从小到大的升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是以从小到大的升序排列。n比如A=3,5,8,11n B=2,6,8,9,11,15,20n则 C=2,3,5,6,8,8,9,11,11,15,20nPROCEDURE hebing(a,b,m,n)nET a,ET b,int m,int nni=1;j=1;k=1;nWhile(i=m and j=n)donIf(aibj)ck=ai;i=i+1;k=k+1;nElse ck=bj;j=j+1;k=k+1;nIf(j=n)for t=(i+1)to m do ck=at;k=k+1 nIf(i=m)for t=(j+1)to n don ck=bt;k=k+1;第四题n设有n个人围成一圈,每个人的编号依次为1,2,3,n。现从编号为k的人开始报数,数到m的人便出列,接着从出列的下一个人开始重新报数,数到m的人又出列,以此类推,直到所有的人都出列为止。请写出算法求出n个人的出列顺序。分析n设以自然数1,2,3,n为元素构成一个循环队列,并用一个数组a存放该队列中每个元素的直接后继,其中ai表示i的后继。显然该数组初始化时应该这样:n ai=i+1,i=1,2,n-1n an=1;n设x为当前所求的出列者(序号),它的前驱为t,则有at=x,而且x的后继为ax,则当前的队列为n ,t,x,ax,n当x出列后,队列变为n ,t,ax,n显然,此时t的后继已变为ax。由此可见,当x出列时,只需作以下两个操作:n1、将所求到的x存入另一个数组b。n2、ax赋值给at,即 at=ax。n接下来的问题是如何确定每次出列者。n设s首先指向每次第一个报数者,t指向s时,s便指向它的后继,t再指向s时,s又指向它的后继,如此循环m次后,t便是当前出列者x,s便是下次开始报数者。n for i=1 to m do t=s;s=as;n这样就能够将每次出列者求出来,但是不便于实现上页所述的操作2。因此只要循环m-1次就两者都能兼顾了。此时的t正是当前出列者x的前驱。