顺序表的应用之有序顺序表的合并

算法思想:
1)初始化:LC为空表,设LC表的指示器k=0设两个指示器i,j分别指向表LA和LB的当前位置,初值均为0。
2)比较循环: LA 表和LB表的当前元素比较,小的元素进LC表,且该表的指示器和LC表的指示器k均加1移向下一个位置。如此下去,直到LA或LB表中一个表处理完毕为止。
3)复制循环: 将未处理完的表中剩余元素通过循环逐一复制到LC表中。
第一种存储结构:

typedef struct
{
 Elemtype elem[MAXSIZE];
 int last;
}Sqlist;
void merge(Sqlist *LA, Sqlist *LB, Sqlist *LC)
{
 int i, j, k,l;
 i = 0, j = 0, k = 0;
 while (i <= LA->last&&j <= LB->last)
 {
  if (LA->elem[i] <=LB->elem[j])
   LC->elem[k++] = LA->elem[i++];
  else
   LC->elem[k++] = LB->elem[j++];
 }
 while(i<=LA->last)
  LC->elem[k++] = LA->elem[i++];
 while(j<=LB->last)
  LC->elem[k++] = LB->elem[j++];
 LC->last = LA->last + LB->last + 1;
}

第二种存储结构:

typedef struct
{
 Elemtype * elem;
 int length;
}Sqlist;
void mergeList(Sqlist LA, Sqlist LB, Sqlist &LC)
{
 Elemtype * pa, *pb, *pc, *pa_last, *pb_last;
 pa = LA.elem;
 pb = LB.elem;
 LC.length = LA.length + LB.length;
 LC.elem = new Elemtype[LC.length];
 pc = LC.elem;
 pa_last = LA.elem + LA.length - 1;
 pb_last = LB.elem + LB.length - 1;
 while (pa < pa_last&&pb < pb_last)
 {
  if (*pa <= *pb)  *pc++ = *pa++;
  else *pc++ = *pb++;
 }
 if(pa<=pa_last)
  *pc++ = *pa++;
 if (pb <= pb_last)
  *pc++ = *pb++;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值