数据结构第二次实验
已知顺序表la和lb中的数据元素按递增有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc。Lc中的数据元素按递增有序排列,并且不破坏la表和lb表。
- 注意均为有序表。
#include<stdio.h>
#include<malloc.h>
#define maxsize 50
typedef int elemtype;
typedef struct
{elemtype data[maxsize];
int length;
}seqlist;
//建表
void createlist(seqlist &L,int n)
{int i;
for(i=0;i<n;i++)
scanf("%d",&L.data[i]);
L.length=n;
}
//显示
void displist(seqlist L)
{int i;
if(L.length==0)//判断表空
return ;
for(i=0;i<L.length;i++)
printf("%d ",L.data[i]);
printf("\n");}
//合并
int merge_seqlist(seqlist A,seqlist B,seqlist &C)
{int i=0,j=0,k=0;
if(A.length+B.length>=maxsize)//判断合并长度是否超过最大容量
{printf("顺序表容量不够");
return 0;}
while(i<A.length&&j<B.length)//i表示A的下标;j表示B的下标
if(A.data[i]<=B.data[j])
C.data[k++]=A.data[i++];
else
C.data[k++]=B.data[j++];
while(i<A.length)//如若A比较有剩余
C.data[k++]=A.data[i++];//直接后接
while(j<B.length)
C.data[k++]=B.data[j++];
C.length=k;
return 1;}
main()
{seqlist A,B,C;
createlist(A,6);
displist(A);
createlist(B,8);
displist(B);
merge_seqlist(A,B,C);
displist(C);
}