DS-09-2-链表.pptVIP

  • 4
  • 0
  • 约9.23千字
  • 约 46页
  • 2017-07-28 发布于浙江
  • 举报
DS-09-2-链表

算法2.1 void union(List La,List Lb) { La-len=listlength(La); Lb-len=listlength(Lb); for (i=1;i=lb-len;i++) { getelem(lb,i,e); if(! locateelem (la,e,equal) ) listinsert (la,++La-len,e) } } 例1算法2.1顺序表实现 void union(Linklist La, Linklist Lb) { Lnode *p,*q, *r, *s; p=Lb-next; while (p) {r=p; q=La-next; s=La; While (q)(q-data!=p-data ) {s=q; q=q-next;} p=p-next; if (q==NULL) { r-next=s-next; s-next=r;} } } 例2-2巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。 思路 顺序表的应用举例 LA={1 3 6} LB={4 5} LC={1 3 4 5 6} 如果C要求降序从大到小排列,如何实现? 例2 算法2-2顺序表实现: void merge(LinkList A, LinkList B, LinkList C) { Lnode *p,*q,*r; p=A-next; q=B-next; free( B); C=A;C-next=Null; r=C; while ( p!=NULL q!=NULL ) if (p-data q-data) {r-next=p; r=p; p=p-next;} else {r-next=q; r=q; q=q-next;} while (p!=NULL ) {r-next=p;} while (q!=Null ) {r-next=q; } } void mergelist(list la,list lb,list lc) initlist(lc); i=j=1;k=0; la-len=listlength (la); lb-len=listlength (lb); while((i=la-len)(j=lb-len)){ getelem(la,I,ai); getelem(lb,j,bj); if(ai=bj) {listinsert (lc,++k,ai); ++i;} else {listinsert (lc,++k,bj); ++j;} } while(I=la-len){ getelem((la,I++,ai); listinsert(lc,++k,ai); } while(j=lb-len){ getelem((lb,j++,bj); listinsert(lc,++k,bi); } } 例3 设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。 算法思路:表A和表B递增有序,依次比较,找到较小值,插入到表C头部,得到C表递减有序 例:A表( 1 3 6 ) B表 (4, 5)

文档评论(0)

1亿VIP精品文档

相关文档