顺序表的合并

将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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值