问题提出:给你两个顺序表要求你求他们的交集和并集。
问题分析
- 首先要初始化顺序表
- 需要有输入和输出函数
- 求顺序表的交并集可以通过比较两个顺序表的数据值大小来作为元素是否相等,然后进一步操作。
头文件
#include <stdlib.h>
#include <stdio.h>
# define List_Init_Size 100
# define ListIncrement 10
数据类型声明
typedef int ElemType; //定义数据元素的类型
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度(数据元素个数)
int ListSize;//当前分配的存储容量
} Sqlist; //定义顺序表的类型
函数声明
void InitList (Sqlist &L); //初始化函数
void Input(Sqlist &L); //输入函数
void Output(Sqlist L); //输出函数
void Intersec(Sqlist La,Sqlist Lb,Sqlist &Lc) ;//求La和Lb的交集,结果存到Lc中
void Unio(Sqlist &La,Sqlist &Lb);//将La并Lb,结果存到La
初始化顺序表
void InitList (Sqlist &L){
L.elem=(ElemType *)malloc(List_Init_Size*sizeof(ElemType));//为顺序表分配一个大小为List_Init_Size的数组空间
if (!L.elem) exit(0) ;
L.length=0; //初始化顺序表的长度为0
L.ListSize=List_Init_Size;
}
交集
void Intersec(Sqlist La,Sqlist Lb,Sqlist &Lc)
{ int i,j;
//循环两个顺序表
for(i=0;i<La.length;i++){
for(j=0;j<Lb.length;j++)
{
//判断两个顺序表中的元素
if(La.elem[i]==Lb.elem[j]){
//如果两个顺序表中的元素相等则将相等的元素加入到Lc顺序表中
Lc.elem[Lc.length]=La.elem[i];
//更新顺序表的长度
Lc.length++;
}
}
}
}
并集
void Unio(Sqlist &La,Sqlist &Lb)
{
int i,j;
bool flag = false; //标记flag为false
for(i=0; i<Lb.length; i++)
{
flag = false; //循环Lb顺序表并标记为false
for(j=0; j<La.length; j++)
{
if(Lb.elem[i] == La.elem[j]) //循环两个顺序表判断元素是否相等
{
flag = true; //相等flag赋值为true
}
}
if(flag == false) //两顺序表的元素不相等
{
La.elem[La.length] = Lb.elem[i]; //将不相等的元素加入到La顺序表中
La.length++; //更新La顺序表
}
}
}
输入与输出函数
//输入n个数据元素
void Input(Sqlist &L)
{
int n,x;
scanf ("%d",&n);
for (int i=1;i<=n;i++)
{
scanf ("%d",&x);
L.elem[i-1]=x;
L.length++;
}
}
//输出顺序表
void Output(Sqlist L)
{
printf("number of elements:%d\n",L.length);
for (int i=1;i<=L.length;i++)
{
printf("%d element:%d\n",i,L.elem[i-1]);
}
}