顺序表的合并

#include<bits/stdc++.h>
using namespace std;
#define ElemType int 
#define LIST_INIT_SIZE 3//线性表存储空间的初始分配量 
#define LISTINCREMENT  1//线性表存储空间的分配增量 
typedef struct
{
	ElemType *elem;//存储空间的基地址 
	int length;//当前长度 
	int listsize;//当前分配的内存容量	
}SqList;
/*线性表的初始化*/ 
bool InitList_Sq(SqList &L)
{
	L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//动态分配内存空间 
	if(!L.elem)	return false;//分配失败
	L.length=0;//初始化线性表的长度为0 
	L.listsize=LIST_INIT_SIZE;//初始化时线性表的总长为默认值100 
	return true;//成功初始化
} 
/*创建一个顺序表*/
void CreateList_Sq(SqList &L)
{
	int n;//准备输入元素的个数 
	int *newbase=NULL;//建立一个空指针 
	printf("请输入你准备输入的元素个数:");
	scanf("%d",&n);
	if(L.listsize<n)//顺序表的最大长度和要输入顺序表长度比较 
	{
		while(L.listsize <=n)//进行循环,直到顺序表的长度符合要求 
		{
			/*重新分配内存空间*/
			newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); 
			L.elem=newbase;
			L.listsize+=LISTINCREMENT;//增加存储容量 
		}
	}
	printf("请依此输入你的数据:(请以空格分割)\n"); 
	for(int i=0;i<n;i++)//输入数据 
		scanf("%d",&L.elem[i]);
	L.length=n;
}
/*打印顺序表*/
void PrintSqList(SqList &L)
{
	int *a;
	a=L.elem;
	for(int i=0;i<L.length;i++)
		printf("%d ",L.elem[i]);
	putchar('\n');
}
void MergeList_Sq(SqList &L1,SqList &L2,SqList &L3)
{
	int i,j;
	int *newbase=NULL;
	L3.length=L1.length+L2.length;//第3个顺序表的长度前2个顺序表的长度之和
	if(L3.listsize<L3.length)
	{
		while(L3.listsize <= L3.length)//进行循环,直到顺序表的长度符合要求 
		{
			/*重新分配内存空间*/
			newbase=(ElemType*)realloc(L3.elem,(L3.listsize+LISTINCREMENT)*sizeof(ElemType)); 
			L3.elem=newbase;
			L3.listsize+=LISTINCREMENT;//增加存储容量 
		}
	}
	for(i=0;i<L1.length;i++)//把第1个表赋值给第3个表 
		L3.elem[i]=L1.elem[i];
	for(i=0,j=L1.length;i<L2.length;i++)//把第2个表的赋值给3个表 
		L3.elem[j++]=L2.elem[i];
}
/*使用sort函数进行排序(需要包含algorithm的头文件此处包含在了bits/stdc++中)*/
void order(SqList &L)
{
	sort(L.elem,L.elem+L.length);//默认为升序排序 
}
int main()
{
	int i;
	SqList L[3];
	for(i=0;i<2;i++) 
	{
		printf("请输入第%d个线性表:\n",i+1);
		InitList_Sq(L[i]);
		CreateList_Sq(L[i]);
	}
	InitList_Sq(L[2]);//初始化第3个顺序表 
	MergeList_Sq(L[0],L[1],L[2]);//顺序表的合并 
	order(L[2]);//对合并后的顺序表进行排序
	printf("合并后的顺序表为:\n"); 
	PrintSqList(L[2]);//输出合并后的顺序表 
	/*释放内存空间*/
		for(i=0;i<2;i++)
			free(L[i].elem);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值