程序设计: 设有线性表 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");
}