- 线性表La和Lb中的元素按值非递减排列,归并La和Lb得到新的线性表Lc,Lc的数值也按非递减排列
Uoion_Sort_2.c 函数
#include "c1.h"
#include "c2_1.h"
#include <stdio.h>
#include <stdlib.h>
/*线性表La和Lb中的元素按值非递减排列,归并La和Lb得到新的线性表Lc,Lc的数值也按非递减排列*/
void MergeList2(SqList La,SqList Lb,SqList *Lc)
{
ElemType *pa,*pa_last,*pb,*pb_last,*pc;
pa=La.elem;
pb=Lb.elem;
(*Lc).listsize=(*Lc).length=La.length+Lb.length;//创建空表
pc=(*Lc).elem=(ElemType *)malloc((*Lc).listsize*sizeof(ElemType));
if(!(*Lc).elem)//存储失败
exit(OVERFLOW);
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last&&pb<=pb_last)//表a和表b均为非空
{
if(*pa<=*pb)
*pc++=*pa++;//将pa所指单元的值赋给pc所指单元后,pa和pc的分别+1,指向下一个单元
else
*pc++=*pb++;////将pb所指单元的值赋给pc所指单元后,pb和pc的分别+1,指向下一个单元
}
while(pa<=pa_last)//表La非空且表Lb空
*pc++=*pa++;//插入La的剩余元素
while(pb<=pb_last)
*pc++=*pb++;
}
main.c函数
#include "c1.h"
#include "c2_1.h"
#include <stdio.h>
#include <stdlib.h>
/*线性表La和Lb中的元素按值非递减排列,归并La和Lb得到新的线性表Lc,Lc的数值也按非递减排列*/
void MergeList2(SqList La,SqList Lb,SqList *Lc)
{
ElemType *pa,*pa_last,*pb,*pb_last,*pc;
pa=La.elem;
pb=Lb.elem;
(*Lc).listsize=(*Lc).length=La.length+Lb.length;//创建空表
pc=(*Lc).elem=(ElemType *)malloc((*Lc).listsize*sizeof(ElemType));
if(!(*Lc).elem)//存储失败
exit(OVERFLOW);
pa_last=La.elem+La.length-1;
pb_last=Lb.elem+Lb.length-1;
while(pa<=pa_last&&pb<=pb_last)//表a和表b均为非空
{
if(*pa<=*pb)
*pc++=*pa++;//将pa所指单元的值赋给pc所指单元后,pa和pc的分别+1,指向下一个单元
else
*pc++=*pb++;////将pb所指单元的值赋给pc所指单元后,pb和pc的分别+1,指向下一个单元
}
while(pa<=pa_last)//表La非空且表Lb空
*pc++=*pa++;//插入La的剩余元素
while(pb<=pb_last)
*pc++=*pb++;
}
}