将La和Lb合并到Lc上
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define LIST_SIZE 100
#define LIST_XZ 10
typedef int Status;
int number=0;
typedef struct{
int *elem;
int length;
int rl;
}Sqlist;
Status chushihua(Sqlist &L);
Status chuangjian(Sqlist &L,int n);
void mergelist(Sqlist &La,Sqlist &Lb,Sqlist &Lc);
//void Insert_list(Sqlist &L,int e,int pos);
Status chuangjian(Sqlist &L,int n)
{
if(chushihua(L)!=OK)
{
printf("初始化失败,即将退出\n");
exit(OVERFLOW);
}
printf("初始化成功,请输入顺序表生成的%d个整数\n",n);
for(int i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
L.length++;
}
return OK;
}
Status chushihua(Sqlist &L)
{
L.elem=(int *)malloc(LIST_SIZE*sizeof(int));
if(!L.elem)
{
exit(OVERFLOW);
}
L.length=0;
L.rl=LIST_SIZE;
return OK;
}
void mergelist(Sqlist &La,Sqlist &Lb,Sqlist &Lc)
{
if(chushihua(Lc)!=OK)
{
printf("初始化失败,即将退出\n");
exit(OVERFLOW);
}
int i=0,j=0,k=0;
while(i<La.length&&j<Lb.length)
{
if(La.elem[i]<Lb.elem[j])
{
Lc.elem[k]=La.elem[i];
i++;
k++;
}
else
{
Lc.elem[k]=Lb.elem[j];
j++;
k++;
}
Lc.length++;
}
while(i<La.length)
{
Lc.elem[k]=La.elem[i];
i++;
k++;
Lc.length++;
}
while(j<Lb.length)
{
Lc.elem[k]=Lb.elem[j];
j++;
k++;
Lc.length++;
}
}
//
//void Insert_list(Sqlist &L,int e,int pos)
//{
// int *p,*q;
// if(pos<0||pos>L.length)
// {
// exit(OVERFLOW);
// }
newbase=(int *)realloc(L.elem,(L.length+LIST_SIZE)*sizeof(int));
L.elem=newbase;
// p=&L.elem[pos];
for(q=&L.elem[L.length-1];q>=p;q++)
{
*(q+1)=*q;
}
// *p=e;
//}
int main(void)
{
int na,nb;
Sqlist La,Lb,Lc;
printf("请输入La的顺序表个数\n");
scanf("%d",&na);
if(chuangjian(La,na)!=OK)
{
printf("La创建失败,即将退出\n");
exit(OVERFLOW);
}
printf("请输入Lb的顺序表个数\n");
scanf("%d",&nb);
if(chuangjian(Lb,nb)!=OK)
{
printf("Lb创建失败,即将退出\n");
exit(OVERFLOW);
}
mergelist(La,Lb,Lc);
if(Lc.length==0)
{
printf("生成Lc失败\n");
exit(OVERFLOW);
}
for(int i=0;i<Lc.length;i++)
{
printf("%d ",Lc.elem[i]);
}
printf("\n");
return 0;
}
将Lb合并到La上
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define LIST_SIZE 100
#define LIST_XZ 10
typedef int Status;
int i=0,j=0;
typedef struct{
int *elem;
int length;
int rl;
}Sqlist;
Status chushihua(Sqlist &L);
void Insert_list(Sqlist &L,int e,int pos);
Status chuangjian(Sqlist &L,int n);
void mergelist(Sqlist &La,Sqlist &Lb,Sqlist &Lc);
Status chuangjian(Sqlist &L,int n)
{
if(chushihua(L)!=OK)
{
printf("初始化失败,即将退出\n");
exit(OVERFLOW);
}
printf("初始化成功,请输入顺序表生成的%d个整数\n",n);
for(int i=0;i<n;i++)
{
scanf("%d",&L.elem[i]);
L.length++;
}
return OK;
}
Status chushihua(Sqlist &L)
{
L.elem=(int *)malloc(LIST_SIZE*sizeof(int));
if(!L.elem)
{
exit(OVERFLOW);
}
L.length=0;
L.rl=LIST_SIZE;
return OK;
}
void mergelist(Sqlist &La,Sqlist &Lb)
{
while(i<La.length&&j<Lb.length)
{
if(La.elem[i]<Lb.elem[j])
{
i++;
}
else if(La.elem[i]>Lb.elem[j])
{
Insert_list(La,Lb.elem[j],i);//插入的数据和位置
j++;
La.length++;
}
else{
i++;
j++;
}
}
while(j<Lb.length)
{
Insert_list(La,Lb.elem[j],i);
j++;
La.length++;
}
}
void Insert_list(Sqlist &L,int e,int pos)
{
int *p,*q;
p=&L.elem[pos];
for(q=&L.elem[L.length-1];q>=p;q--)
{
*(q+1)=*q;
}
*p=e;
}
int main(void)
{
int na,nb;
Sqlist La,Lb;
printf("请输入La的顺序表个数\n");
scanf("%d",&na);
if(chuangjian(La,na)!=OK)
{
printf("La创建失败,即将退出\n");
exit(OVERFLOW);
}
printf("请输入Lb的顺序表个数\n");
scanf("%d",&nb);
if(chuangjian(Lb,nb)!=OK)
{
printf("Lb创建失败,即将退出\n");
exit(OVERFLOW);
}
mergelist(La,Lb);
printf("合并得到的La顺序表的总个数为%d\n",La.length);
for(int k=0;k<La.length;k++)
{
printf("%d ",La.elem[k]);
}
printf("\n");
}