链表类的设计与实现,用继承的方法定义集合类。参与给分,小妹想看看大家的思想
一些例程:(供参考)
(1)整数链表的类的定义
struct Element{
int val;
Element *next;};
class List{
Element * elems;
public:
List();
~List();
Bool Insert(int); //insert in front of list
Bool Delete(int); //delete from list
Bool Contains(int); //check if in list
//求前一个结点的成员函数,参数为整数
//求后一个结点的成员函数,参数为整数
};
//链表示意图:
图 1
Bool List :: Insert( int val ) //insert in front of list
{ Element * elem = new Element;
if(elem != 0){
elem-> val = val ;
elem-> next = elems ;
elems = elem ;
}
return elem != 0;
}
Bool List :: Delete( int val ); //delete from list
{ if (elems = = 0) //empty list
return false ;
Element * tmp = elems;
if(elems -> val = = val ){ //delete the head
elems = elems -> next ;
delete tmp ;
return true;
} else
for(Element * elem=elems;elem -> next != 0;elem= elem -> next )
if(elem -> next -> val = = val ){
tmp = elem -> next ;
elem -> next = tmp -> next ;
delete tmp ;
return true;
}
(2)用继承的方法定义集合类(参考)
class Set : List{
int card;
public:
//成员函数
Bool Member( int ); //测试是否集合元素
ErrCode AddElem( int ); //加入元素
void RmvElem( int ); //删除元素
void Copy( Set * ); //集合拷贝
Bool Equal( Set * ); //判断两个集合是否相等
void Print( ); //打印输出集合
void Intersect( Set *, Set * );//交集
ErrCode Union( Set *, Set * ); //并集
//运算符重载
friend Bool operator & ( int, set );//测试是否集合元素
friend Bool operator == ( Set,Set); //集合是否相等
friend Bool operator != ( Set,Set); //集合是否不等
friend Set operator * (Set, Set); //交集
friend Set operator + (Set, Set); //并集
friend Bool operator < (Set, Set); //真子集
friend Bool operator <= (Set, Set); //子集
};
Bool Set :: Insert( int val )
{ if (Contains(val) && List :: Insert(val) ){
++ card;
return true;
}
return false;
}
Bool Set :: Delete( int val ) //delete from list
{ if (List :: Delete(val) )
– – card ;
return true;
}
return false;
}