using namespace std;
#define MAXSIZE 20
#define TRUE 1
#define FALSE 0
typedef bool Status; /* Status是函数的类型,其值是函数结果状态代码*/
typedef char ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
/*初始化顺序表*/
Status InitList(SqList *&List)
{
List = new SqList;
List->length = 0;
return TRUE;
}
/*创建顺序表*/
Status CreateList(SqList *&List, ElemType e[], int len)
{
List = new SqList;
for(int i = 0; i < len; i++)
List->data[i] = e[i];
List->length = len;
return TRUE;
}
/*销毁顺序表*/
Status DestoryList(SqList *&List)
{
delete List;
return TRUE;
}
/*判断顺序表是否为空*/
Status ListEmpty(SqList *List)
{
return List->length;
}
/*返回顺序表长度*/
int ListLength(SqList *List)
{
return List->length;
}
/*输出链表*/
void DisplayList(SqList *List)
{
for(int i = 0; i < List->length; i++)
cout << List->data[i] << ' ';
printf("\n");
}
/*获取对应position位置上的值,放到e上*/
Status GetElem(SqList *List, int position , ElemType &e)
{
if(position <= 0 || position > List->length)
return FALSE;
e = List->data[position - 1];
return TRUE;
}
/*寻找链表中值为e的位置, 0表示没有找到*/
int LocateElem(SqList *List, ElemType e)
{
for(int i = 0; i < List->length; i++)
if(List->data[i] == e)
return i + 1;
return 0;
}
/*插入e到position中*/
Status ListInsert(SqList *&List, int position, ElemType e)
{
if(position <= 0 || position > List->length + 1)
return FALSE;
for(int i = List->length; i >= position; i--)
List->data[i] = List->data[i - 1];
List->data[position - 1] = e;
List->length += 1;
return TRUE;
}
/*删除position位置上的值,并把删除的值通过e返回*/
Status ListDelete(SqList *&List, int position, ElemType &e)
{
if(position <= 0 || position >= List->length)
return FALSE;
e = List->data[position - 1];
for(int i = position - 1; i < List->length; i++)
List->data[i] = List->data[i + 1];
List->length -= 1;
return TRUE;
}
/*去两个集合的合集, LA和LB位要去合集的对象, LC为结果*/
void UnionList(SqList *LA, SqList *LB, SqList *&LC)
{
int lena, lenb, i;
ElemType e;
lena = ListLength(LA);
lenb = ListLength(LB);
for(i = 1; i <= lena; i++) // 把LA放到LC上
{
GetElem(LA, i ,e);
ListInsert(LC, i ,e);
}
for(i = 1; i <= lenb; i++)
{
GetElem(LB, i, e);
if(!LocateElem(LA, e))
ListInsert(LC, ++lena, e);
}
}
void CommonList(SqList *LA, SqList *LB, SqList *&LC)
{
ElemType e;
int lena = ListLength(LA);
for(int i = 1; i <= lena; i++)
{
GetElem(LA, i, e);
if(LocateElem(LB, e))
ListInsert(LC, LC->length + 1, e);
}
}
void DifferenceSetList(SqList *LA, SqList *LB, SqList *&LC)
{
ElemType e;
int lena = ListLength(LA);
for(int i = 1; i <= lena; i++)
{
GetElem(LA, i, e);
if(!LocateElem(LB, e))
ListInsert(LC, LC->length + 1, e);
}
}
int main()
{
SqList *listA, *listB, *listC, *listD, *listE, *listF;
ElemType list_a[4] = {'a', 'b', 'c', 'd'};
ElemType list_b[5] = {'b', 'c', 'e', 'f', 'g'};
CreateList(listA, list_a, 5);
cout << "线性表A的元素是:";
DisplayList(listA);
CreateList(listB, list_b, 6);
cout << "线性表B的元素是:";
DisplayList(listB);
InitList(listC);
InitList(listD);
InitList(listE);
InitList(listF);
cout << "A ∪ B: ";
UnionList(listA, listB, listC);
DisplayList(listC);
cout << "A ∩ B: ";
CommonList(listA, listB, listD);
DisplayList(listD);
cout << "A - B: ";
DifferenceSetList(listA, listB, listE);
DisplayList(listE);
cout << "B - A: ";
DifferenceSetList(listB, listA, listF);
DisplayList(listF);
return 0;
}
顺序表的交集、并集、差集
最新推荐文章于 2023-03-03 14:25:15 发布