本文定义集合Set类为链表LinkedList类的派生类,并定义了集合插入、移除、求并、求交、求差等成员函数,集合数据结构最大的特点是元素不存在重复的情况,不管是插入、合并等等。具体实现的程序代码如下:
//set.h
#ifndef SET_H
#define SET_H
#include "linkedlist.h"
template<class Type>
class Set: public LinkedList<Type>
{
private:
//
public:
void Set_Insert(Type temp);
void Set_Remove(Type temp);
void Set_Union(Set* pset);
void Set_Difference(Set* pset);
void Set_Intersection(Set* pset);
bool Set_IsMember(Type data);
bool Set_IsSubset(Set* pset);
bool Set_IsEqual(Set* pset);
};
template<class Type>
void Set<Type>::Set_Insert(Type temp)
{
if(Set_IsMember(temp))
return;
Insert(GetSize()+1,temp);
}
template<class Type>
void Set<Type>::Set_Remove(Type temp)
{
if(!Set_IsMember(temp))
return;
Delete(Find(temp));
}
template<class Type>
void Set<Type>::Set_Union(Set* pset)
{
LinkNode<Type>* temp=pset->head->next;
while(temp)
{
LinkNode<Type>* test=head->next;
while(test)
{
if(test->data==temp->data)
break;
test=test->next;
}
if(!test)
Insert(GetSize()+1,temp->data);
temp=temp->next;
}
}
template<class Type>
void Set<Type>::Set_Difference(Set* pset)
{
LinkNode<Type>* temp=pset->head->next;
while(temp)
{
LinkNode<Type>* test=head->next;
while(test)
{
if(test->data==temp->data)
break;
test=test->next;
}
temp=temp->next;
if(test)
Delete(Find(test->data));
}
}
template<class Type>
void Set<Type>::Set_Intersection(Set* pset)
{
LinkNode<Type>* test=head->next;
while(test)
{
if(!pset->Set_IsMember(test->data))
{
int temp=test->data;
test=test->next;
Delete(Find(temp));
}
else
test=test->next;
}
}
template<class Type>
bool Set<Type>::Set_IsMember(Type data)
{
LinkNode<Type>* test=head->next;
while(test)
{
if(test->data==data)
return true;
test=test->next;
}
return false;
}
template<class Type>
bool Set<Type>::Set_IsSubset(Set* pset)
{
}
template<class Type>
bool Set<Type>::Set_IsEqual(Set* pset)
{
}
#endif