//复合类表示法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; };
基类和派生类表示法:
//使用struct定义LinkNode类class LinkNode { protected: int data; LinkNode *next; }; class List:public LinkNode { public: private: LinkNode *first; };
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; };
单链表广义表的几种节点表示方法
最新推荐文章于 2024-01-03 01:05:54 发布