数据结构(严蔚敏)算法2.1
-------------------------------------------------------------------------------------------------
Problem:假设利用两个线性表LA和LB分别表示两个集合A和B(即线性表中的数据元素即为集合中的成员), 现要求一个新的集合A=AUB。
-------------------------------------------------------------------------------------------------
代码区
#include <iostream>
using namespace std;
struct List
{
int num;
List * next;
};
int Listlenth(List* list);
void unions(List *LA,List*LB);
int GetElem(List* list,int e,int Len_B);
bool LocateElem(List* list,int e,int Len_A);
void ListInsert(List* list,int e,int& Len_A);
int main()
{
List a,b,c,d; //1,3,5,6
List *Head_A=&a;
a.num=1,a.next=&b;
b.num=3,b.next=&c;
c.num=5,c.next=&d;
d.num=6,d.next=NULL;
List A,B,C; //1,2,4,
List *Head_B=&A;
A.num=1,A.next=&B;
B.num=2,B.next=&C;
C.num=4,C.next=NULL;
unions(Head_A,Head_B);
return 0;
}
void unions(List *LA,List*LB) //LB不改变,定义为指向常量的指针。
{
int Len_A=Listlenth(LA);int Len_B=Listlenth(LB);
int i;
for(i=1;i<=Len_B;i++)
{
int e=GetElem(LB,i,Len_B);
if(!LocateElem(LA,e,Len_A))
{
ListInsert(LA,e,Len_A);
}
}
List* pointer=LA;
for(i=1;i<=Len_A;i++)
{
cout<<"第"<<i<<"个数是"<<pointer->num<<endl;
pointer=pointer->next;
}
}
int Listlenth(List* list)
{
List *point=list;
int i=1;
while(1)
{
if(point->next!=NULL)
{
i++;
point=point->next;
}
else
{
point=NULL;
return i;
}
}
}
int GetElem(List* list,int e,int Len_B)
{
List* pointer=list;
int num;
for(int i=1;i<=e;i++)
{
num=pointer->num;
pointer=pointer->next;
}
pointer=NULL;
return num;
}
bool LocateElem(List* list,int e,int Len_A)
{
List* pointer=list;
for(int i=1;i<Len_A;i++)
{
if(pointer->num==e)
return true;
pointer=pointer->next;
}
return false;
}
void ListInsert(List* list,int e,int& Len_A)
{
List* pointer=list;int i;
List* Insert=new List;
Insert->num=e;Insert->next=NULL;
for(i=1;i<Len_A;i++)
{
pointer=pointer->next;
}
pointer->next=Insert;
Len_A++;
}
结果: