第二章作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表作业
1、简述下列概念的区别:头指针,头结点,首元结点(第一个元素结点)。请
理解,不必书写。
2、填空:
(1)在顺序表中插入或删除一个元素,需要平均移动__表中一半__元素,具体移动的元素个数与___表长和该元素在表中的位置___有关。
(2)顺序表中逻辑上相邻的元素的物理位置___一定___紧邻。单链表中逻辑上相邻的元素的物理位置____不一定__紧邻。
(3)单链表中,除了元首结点外,任一结点的存储位置由___其直接前驱结点的链域的值__指示。
(4)在单链表中设置头结点的作用是__使插入和删除等操作统一,在第一个元素之前插入元素和删除第一个结点不必另作判断___。
3、简答:什么情况下用顺序表比链表好?请理解,不必书写。
4、已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,
试从一下选项中选择合适的语句序列。
A、在P结点后插入S结点的语句序列是___(4)(1)_____
B、在P结点前插入S结点的语句序列是__(7)(11)(8)(4)(1)
____
C、在表首插入S结点的语句序列是____(5)(12)____
D、在表尾插入S结点的语句序列是____(9)(1)(6)____
(1)P->next=S; (2) P->next=P->next->next; (3) P->next=S->next;
(4)S->next=P->next; (5) S->next=L; (6) S->next=NULL; (7) Q=P;
(8)while(P->next!=Q) P=P->next; (9) while(P->next!=NULL) P=P->next;
(10) P=Q; (11)P=L; (12)L=S; (13)L=P;
5、指出以下算法中的错误和低效(即费时)之处,并将其改写为一个既正确又
高效的算法。
Status Delete K (SqList &a, int i, int k){//本过程从顺序存储结构的线性表a
//中删除第i个元素起的k个元素
if (i<1‖k<0‖i+k>a.length) return INFEASIBLE //参数不合法
else {
for(count=1;count // 删除一个元素 for(j=a.length;j>=i+1; j--) a.elem[j-1]=a.elem[j]; a.length--; } return OK; } //DeleteK Status Delete K (SqList &a, int i, int k){//本过程从顺序存储结构的线性表a //中删除第i个元素起的k个元素 if (i<1‖k<0‖i+k-1>a.length) return INFEASIBLE //参数不合法for(count=0;i-1+count a.elem[i-1+count]=a.elem[i-1+count+k]; a.length=a.length-k; return OK; } //DeleteK 6、设顺序表va中的数据元素递增有序,试写一算法,将x插入到顺序表适当 位置上,以保持该表的有序性。 Status InsertOrderList(SqList &va,ElemType x) { //在非递减的顺序表va中插入元素X并使其为顺序表的算法 if(va.length==va.listsize) return(OVERFLOW) for(i=va.length;i>0&&x va.elem[i]=va.elem[i-1]; va.elem[i]=x; va.length++; } return OK; } 7、已知线性表L A的数据元素(n个,n为偶数),现要求将L A拆开成两个新的 线性表L B,L C。要求L B中的数据元素为L A中的奇数位序的数据元素(a 1,a 3 ,…, a n-1),L C中的数据元素为L A中的偶数位序的数据元素(a 2 ,a 4 ,…,a n )。 Status ListSeparate(SqList LA,SqList &LB,SqList &LC) { i=1; While(i<=LA.length) { GetElem(LA,i,&e); if(i%2==0) ListInsert(LC,i/2,e); else ListInsert(LB,i/2+1,e); i++; } //方法2 Status ListSeparate(SqList LA,SqList &LB,SqList &LC) { for(i=1;i<=LA.length;i++) { if(i%2==0) { LC.elem[i/2-1]=LA.elem[i-1]; LC.length++; } else { LB.elem[i/2]=LA.elem[i-1]; LB.length++; } } }