第二章作业答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++;

}

}

}

相关文档
最新文档