//复合类表示法class List;class LinkNode{friend class List;private:int data;LinkNode *next;};class List{public://一些公共操作 private:LinkNode *first;};
//内嵌类表示法:
class List
{
public:
private:
class LinkNode
{
public :
int data;
LinkNode *next;
};
LinkNode *first;
};
基类和派生类表示法:
class LinkNode
{
protected:
int data;
LinkNode *next;
};
class List:public LinkNode
{
public:
private:
LinkNode *first;
};
//使用struct定义LinkNode类
struct LinkNode
{
int data;
LinkNode *next;
};
class List
{
public:
private:
LinkNode *first;
};
/* 标志域utype 用来表明该节点是什么类型,=0,是广义表专用的附加头节点;=1是原子节点。;
=2是子表节点 。
信息域 info 不通类型的结点在这个域中存放的内容不容。当utype=0时,该信息域存放引用计数ref,
当utype=1时,该信息域存放数据值value,当utype=2时,该信息域存放指向子表节点的指针hlink
尾指针域tlink 当utype=0时,该指针域存放指向该表头元素结点的指针;当utype!=0时,该指针域存放同一层下
一个表结点的地址,
*/
template<class T>
struct Items
{
int utype; //=0/1/2;
union
{
int ref; //utype=0 附加头节点,存放引用计数
T value; //utype=1 存放数值
GenListNode<T>*hlink //utype=2
}info;
Items():utype(0),info.ref(0){}
Items(Items<T>&RL){utype=RL.utype;info=RL.info;}
};
template<class T>
struct GenListNode
{
pulic:
GenListNode():utype(0),tlink(NULL),info.ref(0){}
GenListNode(GenListNode<T>&RL)
{
utype=RL.utype;
tlink=RL.tlink;
info=RL.info;
}
private:
int utype;
GenListNode<T>*tlink;
union
{
int ref;
T value;
GenListNode<T>*hlink;
}info;
};