第二章线性表答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.11 设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。

Status OrderListInsert-sq(SqList va, ElemType x) {

//将x插入到递增有序的顺序表va中,插入后va仍然递增有序(算法1)

if (va.length==va.listsize){

newbase=(ElemType

*)realloc(va.elem,(va.listsize+LISTINCREMENT)*sizeof(ElemType));

if (!newbase) exit(OVERFLOW);

va.elem=newbase;

va.listsize+=LISTINCREMENT;

}//当前存储空间已满,增加分配空间

if (!va.length) {va.elem[0]=x; ++va.length; return OK;}

q=&(va.elem[0]);

while (*q<=x)&&(q<=&(va.elem[va.length-1])) ++q; //查找插入位置

for (p=&(va.elem[va.length-1]); p>=q; --p) *(p+1)=*p;

*q=x;

++va.length;

return OK;

}//OrderListInsert-sq

Status OrderListInsert-sq(SqList va, ElemType x) {

//将x插入到递增有序的顺序表va中,插入后va仍然递增有序(算法2)

if (va.length==va.listsize){

newbase=(ElemType

*)realloc(va.elem,(va.listsize+LISTINCREMENT)*sizeof(ElemType));

if (!newbase) exit(OVERFLOW);

va.elem=newbase;

va.listsize+=LISTINCREMENT;

}//当前存储空间已满,增加分配空间

if (!va.length) {va.elem[0]=x; ++va.length; return OK;}

p=&(va.elem[va.length-1]);

while (P>=&(va.elem[0])&&*p>x) {*(p+1)=*p; --p;}

*(p+1)=x;

++va.length;

return OK;

}//OrderListInsert-sq

2.12 设A=(a1,...,a m)和B=(b1,...,b n)均为顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表。若A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于B'的首元,则AB。试写一个比较A,B大小的算法。

int Compare-List(SqList a, SqList b){

//a,b为顺序表,若ab时,返回1

i=0;

while (i<=a.length-1) && (i<=b.length-1) && (a.elem[i]=b.elem[i]) ++i;

switch {

case i=a.length && i=b.length : return 0; break;

case (i=a.length && i<=b.length-1)

||(i<=a.length-1 && i<=b.length-1 && a.elem[i]

}

}//Compare-List

2.19

status del-l(LinkList &la, int mink, int maxk){

//la为带头结点的单链表的头指针,单链表中的结点以值递增有序排列

//本算法删除表中所有值大于mink且小于maxk的元素,mink

if (mink>=maxk) return ERROR

p=la;

while (p->next<>NULL && p->next->data<=mink) p=p->next;

q=p;

while (q->next<>NULL && q->next->datanext ;

q=q->next;

p1=p->next;

while (p1<>q) {q1=p1; p1=p1->next; free(q1);}

}//del-l

2.21

LinkList priou(LinkList la, LinkList q1){

//返回指向单链表la中结点的指针p1,p1->next=q1 p1=la;

while (p1->next!=q1) p1=p1->next;

return p1;

}//priou

void Reverse-List-l(LinkList &la) {

//就地逆置单链表la(算法1)

if (!la->next) return;

p=la->next; q=priou(la, NULL);

while (p!=q) {

p->data〈-〉q->data;

if (p=q) return;

q=priou(la, q);

}

}//Reverse-List-l

void Reverse-List-l(LinkList &la) {

//就地逆置单链表la(算法2)

p=priou(la, NULL); last=p;

pre=priou(la,p);

while (pre!=la) {

相关文档
最新文档