题目:已知两个整数集合A和B,他们的元素分别依元素递增有序存放在两个顺序表La和Lb中,设计一个算法,求出这两个集合的并集C,要求集合C的元素值递增有序存放在顺序表Lc中。
(1)简单给出算法设计思想;
答:①创建顺序表La和Lb,里面按元素递增的次序分别存放集合A和集合B的数据;②循环用La中的每一个元素对比Lb中的所有元素,如果相等,则把La中的这个元素存放到Lc中。
(2)采用C语言描述算法。
#include <stdio.h>
#define MAX 100 //假设一个顺序表最大存储100个数据
typedef struct sequence_list
{
int data[MAX]; //用于存储数据
int lenth; //用于表示顺序表中实际存储数据的个数
}seq_list;
void CreatSeqlist(seq_list *L)
{
int i;
int n;
L->lenth = 0;
printf("请输入一个小于等于%d的正整数\n",MAX);//表示 创建的表最大能存多少个数据
scanf("%d",&n);
printf("请按从小到大的顺序输入%d个数据\n",n);
for (i = 0; i < n; i++)
{
scanf("%d",&(L->data[i]));
L->lenth++;
}
}
seq_list * qiu_union_set(seq_list *La,seq_list *Lb,seq_list *Lc)
{
int i,j;
Lc->lenth = 0;
for(i = 0; i < La->lenth; i++)
for(j = 0; j < Lb->lenth; j++)
{
if(La->data[i] == Lb->data[j])//如果相等就存储
{
Lc->data[Lc->lenth] = La->data[i];
Lc->lenth++;
}
}
return Lc;
}
//打印表中数据
void pri_seqlist(seq_list *L)
{
int i;
for(i = 0; i < L->lenth; i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
}
int main(void)
{
seq_list La,Lb,Lc;
//创建顺序表 La和Lb
printf("正在创建表La,请按提示输入数据\n");
CreatSeqlist(&La);
//创建顺序表 Lb
printf("正在创建表Lb,请按提示输入数据\n");
CreatSeqlist(&Lb);
//求交集
qiu_union_set(&La,&Lb,&Lc);
printf("La中的数据是:\n");
pri_seqlist(&La);
printf("Lb中的数据是:\n");
pri_seqlist(&Lb);
printf("Lc中的数据是:\n");
pri_seqlist(&Lc);
return 0;
}