1. 程式人生 > >資料結構--順序表合併操作

資料結構--順序表合併操作

  • 線性表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++; } }

這裡寫圖片描述

這裡寫圖片描述