/*
两个线性结构的并集
*/
# include
# include
# define INCRE_SIZE 2
//线性顺序结构
typedef struct
{
int * ele; //存储元素的空间地址
int init_size; //存储空间的初始大小
int length; //当前存储元素的个数
}SqList;
SqList create_list(); //创建线性表
void traverse(SqList Sq); //遍历
int Length(SqList Sq); //求线性表的长度
void union_set(SqList &p, SqList q); //求p,q的交集,保存在p
bool isIn(SqList p, int val); //判断元素val是否在p里面
void insert(SqList &p, int val); //将元素val插在线性结构p的后面
int main(void)
{
//定义三个线性存储表
SqList p, q;
//创建线性表p,q
p = create_list();
traverse(p);
q = create_list();
traverse(q);
//求两个线性表p,q元素的交集,保存在p中
union_set(p, q);
traverse(p);
return 0;
}
//创建线性表
SqList create_list()
{
SqList Sq;
int len, i, val;
printf("设定线性表的长度:len = ");
scanf("%d", &len);
Sq.init_size = len;
Sq.ele = (int *)malloc(sizeof(int) * len);
for(i = 0; i < len; i++)
{
printf("输入线性表第%d个元素 val = ", i+1);
scanf("%d", &val);
Sq.ele[i] = val;
}
Sq.length = len;
return Sq;
}
//线性表的遍历
void traverse(SqList Sq)
{
int len = Length(Sq);
int i;
for(i = 0; i < len; i++)
{
printf("%d ", Sq.ele[i]);
}
printf("\n");
}
//求线性表中元素得个数
int Length(SqList Sq)
{
return Sq.length;
}
//求两个线性表p,q元素的交集,结果保存在p
void union_set(SqList &p, SqList q)
{
int len_q = Length(q);
int i;
for(i = 0; i < len_q; i++)
{
//元素q.ele[i]是不在p中
if(!isIn(p, q.ele[i]))
{
insert(p, q.ele[i]); //将元素q.ele[i]插在p的后面
}
}
}
//判断val是否是p中的一个元素
bool isIn(SqList p, int val)
{
int len = Length(p);
int i;
for(i = 0; i < len; i++)
{
if(val == p.ele[i])
return true;
}
return false;
}
//将元素val插在p的后面
void insert(SqList &p, int val)
{
if(p.length >= p.init_size)
{
//新增开辟的空间
p.ele = (int *)realloc(p.ele, sizeof(int) * (p.init_size + INCRE_SIZE));
p.init_size = p.init_size + INCRE_SIZE;
}
p.ele[p.length] = val;
p.length ++;
}