题目内容
基本要求:
实现顺序表的各种基本运算的算法,求集合的并集、交集、差集:
测试案例:
线性表A的元素为:1 2 3 4
线性表B的元素为:2 3 5 6 7
A∪B为:1 2 3 4 5 6 7
A∩B为:2 3
A-B为:1 4
B-A为:5 6 7
算法描述
A:A的特有元素+AB共有元素;
B:B的特有元素+AB共有元素;
A∪B:将A、B的所有元素合到一起构成的集合C,相同的数字只取一次;
A∩B:将A、B的共有元素放入集合C中;
A-B:将A集合中特有的元素放入集合C中;
B-A:将B集合中特有的元素放入集合C中;
其中难点为:特有元素、共有元素的获取:
使用LocateElem函数(即查找函数): 在L1中寻找L2中的元素L2->data[i],也就是找共有元素,如果找到了,就返回i-1,没找到就返回0。
if(!(LocateElem(L1,L2->data[i])))
ListInsert(L3,L3->length+1,L2->data[i]);
if语句中加了‘!’,即此时找的为L2的特有元素,再把这个L2特有元素添加到L3中,则L3为并集
代码部分
定义结构
#define MAX 20
typedef char ElemType;
typedef struct
{
ElemType data [MAX];
int length;
}SqList;
顺序表的10个功能构建
//1.建立顺序表
void CreateList(SqList *&L,ElemType a[],int n)
{
for(int i=0;i<n;++i)
L->data[i]=a[i];
L->length=n;
}
//2.初始化顺序表
void InitList(SqList *&L)
{
L=new SqList;
L->length=0;
}
//3.销毁一个顺序表
void DestroyList(SqList *L)
{
delete L;
}
//4.判断是否为空表
bool ListEmpty(SqList *L)
{
return(0==L->length);
}
//5.求顺序表的长度
int ListLength(SqList *L)
{
return(L->length