【程序设计: 设有线性表 LA=(3,5,8,11)和 LB=(2,6,8,9,11,15,20); 1.若LA和LB分别表示两个集合A和B,求新集合A二AUB(“并”操作,相同元素不保留)】

程序设计: 设有线性表 LA=(3,5,8,11)和
LB=(2,6,8,9,11,15,20);
1.若LA和LB分别表示两个集合A和B,求新集合A二AUB(“并”操作,相同元素不保留);

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10  //设置默认最大长度 
typedef int Elemtype;
typedef struct{
	Elemtype *date;  //指示动态分配数组的指针 
	int MaxSize;  //顺序表的最大容量 
	int length;  //顺序表当前长度 
}List;

void InitList(List &L)  //对顺序表初始化 
{
	L.date=(Elemtype *)malloc(InitSize*sizeof(Elemtype));//申请一片连续的存储空间 
	L.length=0;
	L.MaxSize=InitSize; 
}

void IncreaseSize(List &L, int len) //增容操作(增加len的长度) 
{
	int *p=L.date;
	L.date=(Elemtype *)malloc((L.MaxSize+len)*sizeof(Elemtype));
	for(int i=0; i<L.length; i++)
	{
		L.date[i]=p[i];  //将数据复制到新的区域 
	}
	L.MaxSize=L.MaxSize+len;  //顺序表的最大长度增加len 
	free(p);  //释放原来的内存空间 
}

void CreateList(List &L) //创建线性表 
{
	int n;  //定义顺序表数据元素个数的变量n  
	scanf("%d",&n);
	if(n>L.MaxSize) //判断是否需要增容 
	{
	IncreaseSize(L,InitSize);  //给顺序表增加 InitSize长度 
	}
	printf("\n请输入表的元素:\n");
	ElemType e;//设置临时输出变量 
	for(int i=0;i<n;i++)//将e中数据存储到表中 
	{
		scanf("%d",&e);
		L.date[i]=e;
		L.length=i+1; 
	}
 } 
 

void unions(List &La,List &Lb)//将表Lb与表La不相等的值插入La 
{
	for(int i=0;i<Lb.length;i++){
		int count=0;
		for(int j=0;j<La.length;j++){
			if(La.date[j]==Lb.date[i]){
				count+=1;
			}
		}
		if(count==0){
			La.date[La.length++]=Lb.date[i];
		}
	}
}


int main()
{
	List La,Lb;  //声明La和Lb顺序表 
	InitList(La); //初始化顺序表 La
	InitList(Lb); //初始化顺序表 Lb
	printf("请输入线性表La的数据元素个数:");
	CreateList(La); //创建线性表La 
	printf("\n表La为:");
	for(int i=0;i<La.length;i++)//遍历输出表La 
	{
		printf("%d ",La.date[i]);
	}
	printf("\n");
	printf("请输入线性表Lb的数据元素个数:"); 
	CreateList(Lb);  //创建线性表Lb 
	printf("\n表Lb为:");
	for(int i=0;i<Lb.length;i++)//遍历输出表Lb 
	{
	printf("%d ",Lb.date[i]);
	}
	printf("\n");
    printf("合并后的线性表La为:");
    unions(La,Lb);  //将表Lb与表La不相等的值插入La 
	for(int i=0;i<La.length;i++)//遍历输出合并后的表La 
	{
		printf("%d ",La.date[i]);
	}
	printf("\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值