第二章顺序存储结构的线性表——习题课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二题
试写出在顺序存储结构下逆转线性表的 算法,要求使用最少的附加空间。
PROCEDURE nizhuan(ET a[],int n) For k=1 to n/2 do { t=a[k]; a[k]=a[n-k+1]; a[n-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,ห้องสมุดไป่ตู้1,15,20}
接下来的问题是如何确定每次出列者。 设s首先指向每次第一个报数者,t指向s 时,s便指向它的后继, t再指向s时,s 又指向它的后继,如此循环m次后,t便 是当前出列者x,s便是下次开始报数者。 for i =1 to m do { t=s; s=a[s]; } 这样就能够将每次出列者求出来,但是 不便于实现上页所述的操作2。因此只要 循环m-1次就两者都能兼顾了。此时的t 正是当前出列者x的前驱。
6、栈和队列的共同点是_____。 A、都是先进后出 B、都是先进先出 C、只允许在端点处插入和删除元素 D、没有共同点
填空题
1、向量、栈和队列都是____结构,可以 在向量的__位置插入和删除元素;对于 栈只能在__插入和删除元素;对于队列 只能在___插入元素和___删除元素。 2、向一个长度为n的向量的第i(0<i<n+2) 个元素之前插入一个元素时,需向后移 动____个元素。 3、向一个长度为n的向量中删除第 i(0<i<n+2)个元素时,需向前移动____个 元素。
4、一个栈的输入序列是12345,如果栈 的输出序列43512是_____。 5、一个栈的输入序列是12345,如果栈 的输出序列12345是_____。
算法编写题
1、已知一个顺序表按元素值的升序排列, 编写一个算法:插入一个元素后保持该 顺序表是有序的。
PROCEDURE Insert(ET a[],int n,int x) If(x>=a[n]) a[n+1]=x; Else { int i=1; while(x>=a[i]) do i=i+1; for j=n to i do a[j+1]=a[j]; a[i]=x; n=n+1; } END
第二章顺序存储结构的线性表
习题课
选择题
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,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
设x为当前所求的出列者(序号),它的前 驱为t,则有a[t]=x,而且x的后继为a[x], 则当前的队列为 ……, t , x , a[x] , …… 当x出列后,队列变为 ……, t , a[x] , …… 显然,此时t的后继已变为a[x]。由此可 见,当x出列时,只需作以下两个操作: 1、将所求到的x存入另一个数组b。 2、a[x]赋值给a[t],即 a[t]=a[x]。
第四题
设有n个人围成一圈,每个人的编号依次 为1,2,3,…,n。现从编号为k的人开始报数, 数到m的人便出列,接着从出列的下一 个人开始重新报数,数到m的人又出列, 以此类推,直到所有的人都出列为止。 请写出算法求出n个人的出列顺序。
分析
设以自然数1,2,3,…,n为元素构成一个循 环队列,并用一个数组a存放该队列中每 个元素的直接后继,其中a[i]表示i的后继。 显然该数组初始化时应该这样: a[i]=i+1, i=1,2,…,n-1 a[n]=1;
PROCEDURE hebing(a[], b[],m,n) ET a[], ET b[],int m,int n i=1; j=1; k=1; While(i<=m and j<=n) do If (a[i]<b[j]) { c[k]=a[i];i=i+1;k=k+1; } Else {c[k]=b[j];j=j+1;k=k+1; } If(j=n) for t=(i+1) to m do { c[k]=a[t];k=k+1 } If (i=m) for t=(j+1) to n do { c[k]=b[t]; k=k+1; }