数据结构--顺序表合并操作

来源:互联网 发布:fastcopy 网络拷贝 编辑:程序博客网 时间:2024/05/16 17:53
  • 线性表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++;}}

这里写图片描述

这里写图片描述

原创粉丝点击