資料結構--順序表合併操作
阿新 • • 發佈:2019-01-23
- 線性表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++;
}
}