线性表的合并操作:已知la,lb中元素按非递减排列,归并la和lb的元素放入lc中,其也按非递减排列。
代码实现:
#include<stdio.h>
#include <stdlib.h> //定义杂项函数及内存分配函数
#include<iostream>
using namespace std;
typedef int elemtype;//将int起别名为 elemtype
//线性表的动态分配顺序存储结构
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct
{
elemtype *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
} sqlist;
void mergelist_sq(sqlist la,sqlist lb,sqlist &lc)
{ //已知la,lb中元素按非递减排列
//归并la和lb的元素也按非递减排列
elemtype *pa, *pb, *pc;
pa=la.elem;
pb=lb.elem;
lc.listsize=la.listsize+lb.listsize;
pc=lc.elem= (elemtype *)malloc(lc.listsize*sizeof(elemtype));
if(!lc.elem)
{
cout<<"存储分配失败";
exit(1);//存储分配失败
}
elemtype pa_last=(*la.elem)+(la.length)-1;
elemtype pb_last=(*lb.elem)+lb.length-1;
while(*pa<=pa_last&&*pb<=pb_last)//归并
{
if(*pa<=*pb)
*pc++=*pa++;
else *pc++=*pb++;
}
while(*pa<=pa_last)//插入la剩余元素
*pc++=*pa++;
while(*pb<=pb_last)//插入lb剩余元素
*pc++=*pb++;
for(int i = 0 ; i <lc.listsize ; i++)
{
cout<<lc.elem[i]<<" ";
}
}
int main()
{
sqlist la;
la.length = 8;
la.listsize = 4;
int a[] = {1,2,3,4};
la.elem = a;
sqlist lb;
int b[] = {2,4,6,7,8};
lb.elem = b;
lb.length = 10;
lb.listsize = 5;
sqlist lc;
mergelist_sq(la,lb,lc);
}
合并结果: