- 1
- 0
- 约3.66万字
- 约 119页
- 2017-08-19 发布于北京
- 举报
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 【例7.7】双向链表类模板和结点类模板 双链表结点模板类: templatetypename T class DblNode{ T info; //数据域 DblNodeT *llink,*rlink;//前驱(左链)、后继(右链)指针 public: DblNode(T data); //一般结点 DblNode(); //头结点 T Getinfo(){return info;}; friend class DblListT;}; templatetypename T DblNodeT::DblNode(){//一般结点 llink=rlink=NULL;} templatetypename T DblNodeT::DblNode(T data){ info=data; //头结点 llink=NULL; rlink=NULL; } 【例7.7】双向链表类模板和结点类模板 双链表模板类: templatetypename Tclass DblList{ DblNodeT *head,*current; public: DblList(); //建立表头结点 ~DblList(); void Insert(const T data); //链尾插入 DblNodeT* Remove(DblNodeT* p); //删除定结点 void Print(); //打印链表 int Length(); //计算链表长度 DblNodeT *Find(T data); //搜索数据与定值相同的结点 void MakeEmpty(); //清空链表 //其它操作 }; 【例7.7】双向链表类模板和结点类模板 下面分析几个成员函数: templatetypename T DblListT::DblList(){ //建立表头结点 head=new DblNodeT(); head-rlink=head-llink=head; current=NULL;} templatetypename T void DblListT::MakeEmpty(){ DblNodeT *tempP; //清空链表 while(head-rlink!=head){ tempP=head-rlink; head-rlink=tempP-rlink; //把头结点后的第一个结点从链中脱离 tempP-rlink-llink=head; //处理左指针 delete tempP; } //删除(释放)脱离下来的结点 current=NULL; }//current指针恢复 【例7.7】双向链表类模板和结点类模板 templatetypename T void DblListT::Insert(const T data){ current=new DblNodeT; //新结点在链尾 current-info=data; current-rlink=head; //注意次序 current-llink=head-llink; head-llink-rlink=current; head-llink=current; } //最后做 templatetypename T DblNodeT* DblListT::Remove(DblNodeT* p){//删除定结点 current=head-rlink; while(current!=headcurrent!=p) current=current-rlink; if(current==head) current=NULL; else{ //结点摘下 p-llink-rlink=p-rlink; p-rlink-llink=p-llink; p-
原创力文档

文档评论(0)