一个算法

已知线性表LALB中的数据元素按值非递减有序排列,现要求将LALB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。例如

 LA=35811{指针i}

 LB=2689111520{指针j}

则:LC=235688911111520{指针k}

算法思想:先设LC为空表,然后将LALB中的元素逐个插入到LC中即可。可设两个指针ij分别指向LALB中某个元素,若设i当前所指的元素为a j当前所指的元素为b,则当前应插入到LC的元素c

               C=a(当a=b时)

               C=b(当ab时)

算法2.2

void MergeList(List La,List Lb,List &Lc){

//已知线性表LaLb中数据元素按值非递减排列。

//归并LaLb得到新的线性表LcLc的数据元素也按值非递减排列。

InitList(Lc);//新建空表

i=j=1;k=0;

La-len=ListLength(La); Lb-len=ListLength(Lb);

while((i<=La-len)&&(j<=Lb-len)){//LaLb均非空

GetElem(La,i,ai);GetElem(Lb,j,bj);

if(ai<=bj) {ListInsert(Lc,++k,ai);++i;}

else{ListInsert(Lc,++k,bi);++j;}

}

while(i<=La-len){

GetElem(La,i++,ai);ListInsert(Lc,++k,ai);

}

while(j<=Lb-len){

GetElem(Lb,j++,bj);ListInsert(Lc,++k,bj);

}

}//MergeList

分析算法的执行过程: LA=35811

            LB=2689111520

则:   LC=235688911111520

  初值:i=1,j=1,k=0LENGTHLA=4LENGTHLB=7

 1<=4 1<=7时,取LA中的第1个元素3LB中的第1个元素2

     3<=2 ? 否 插入LB中的第1个元素2LC中作为第1个元素,LC的指针后移1位(k=k+1),LB的指针后移一位(j=j+1

  1<=42<=7时,将LA中的第1个和LB中的第2个比较 ,3<=6?是,插入LA中的第1个元素2LC中作为第2个元素,,LC的指针后移1位(k=k+1),LA的指针后移一位(i=i+1)。

  2<=42<=7时,5<=6?是,插入LA中的第2个元素5LC中作为第3个元素,i=3k=3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值