线性表合并运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define INITSIZE 100 //线性表存储空间的初始分配量

#define LISTINCREMENT 10 //线性表存储空间的分配增量

#define OK 1

#define ERROR 0

#define OVERFLOW -1

typedef int ElemType;

typedef int Status;

typedef struct{

ElemType *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储量(以sizeof(ElemType)为单位)

}SqList;

Status InitList(SqList &L)

{//构造一个空的顺序表L.

L.elem=(ElemType*)malloc(100*sizeof(ElemType));

if(!L.elem)exit(OVERFLOW);

L.length=0;

L.listsize=INITSIZE;

return(OK);

}

void Assign(SqList &L)

{//为顺序表L的各元素赋值。

int i,N;

printf("Please input the Number of the SqList:");

scanf("%d",&N);

printf("Please input the elements:");

for(i=0;i

scanf("%d",&L.elem[i]);

L.length++;

}

}

void MergeList(SqList La,SqList Lb,SqList &Lc){

//已知线性表La和Lb中的数据元素按值非递减排列

//归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列ElemType *pa,*pb,*pc,*pa_last,*pb_last;

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){//归并

if(*pa<=*pb) *pc++=*pa++;

else *pc++=*pb++;

}

while(pa<=pa_last) *pc++=*pa++;//插入La的剩余元素while(pb<=pb_last) *pc++=*pb++;//插入Lb的剩余元素}//MergeList_Sq

void ListTraverse(SqList L){

//遍历顺序表L

int i;

for(i=0;i<=L.length-1;i++);

printf("%d ",L.elem[i]);

printf("\n");

printf("the length is:%d\n",L.length);

}

void main(){

SqList L,L1,L2;

InitList(L1);

Assign(L1);

InitList(L2);

Assign(L2);

MergeList(L1,L2,L);

ListTraverse( L);

}

五、运行结果

Please input the Number of the SqList:5

Please input the elements:2 4 6 8 9

Please input the Number of the SqList:8

Please input the elements:1 3 5 12 34 36 41 46

1 2 3 4 5 6 8 9 12 34 36 41 46

the length is:13

相关文档
最新文档