⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 模板链表_02.h

📁 模板链表的类定义
💻 H
字号:
#ifndef EXAMPLE9_02_H
#define EXAMPLE9_02_H
#include <iostream>
#include <stdlib.h>
using namespace std;
template<class T>
class ListNode            //结点类
{
public:
      ListNode(){}         //结点类构造函数
      ListNode(const T& nItem, ListNode<T> *ptrNext=NULL);  //结点类带参数构造函数
      T& ShowData(){return Data;}              //返回本结点数据的引用
      void InsertAfter(ListNode<T> *ptr);   //插入新结点作为本结点的后续结点
      ListNode<T> *DeleteAfter(void);         //删除本结点的后续结点
	  ListNode<T> *NextListNode() const;      //获得本结点的后续结点的指针
      void SetNext(ListNode<T> *ptr){ptrNext=ptr;}   //设置本结点的后续结点指针
private:
      T Data;                                //本结点的数据
      ListNode<T> *ptrNext;    //指向本结点的后续结点的指针
};

template <class T>
class LinkedList     //链表类的声明及其实现
{
public:
      LinkedList(void);
      LinkedList(const LinkedList<T> &list);    //拷贝构造函数
      ~LinkedList(void){DeleteAll();}    //析构函数,释放链表占用的资源

      LinkedList<T> &operator=(const LinkedList<T> &list);       // ″=″号运算符							                       //的重载
      void Next();//指向链表的下一个结点

      int EndOfList() const{return (!ptrCurr);}  //判断链表当前位置是否是表尾
      int CurrPosition() const{return nPosition;}//获得当前位置指针在链表中的位置
	  ListNode<T> ptrFrontPosition() const{return ptrFront;}
	  ListNode<T> ptrTailPosition() const{return ptrTail;}
	  ListNode<T> ptrPrevPosition() const{return ptrPrev;}
	  void InsertFront(const T& nItem);  //将数据为nItem的结点插入到链表头
      void InsertTail(const T& nItem);     //将数据为nItem的结点插入到链表尾
      void InsertAt(const T& nItem); //将数据为nItem的结点插入到链表的当前位置
      void InsertAfter(const T& nItem);   //将数据为nItem的结点插入到链表的当前位置之后			                        //位置之后
      void InsertOrder(T nItem);
                        //将数据为nItem的结点插入到排序链表中,并构成新的排序链表

      int DeleteHead();      //删除链表头结点
      void DeleteCurr();    //删除链表当前结点
      void Delete(T key);   //删除链表中数据为key的结点
      void DeleteAll();       //删除链表中的所有结点

      T& GetData();          //得到链表中的当前结点数据

      void DisplayList();     //显示链表中所有结点的数据
      int Find(T& nItem);  //在链表中找到数据为nItem的结点

      int ListLength() const{return nListLength;};    //求链表的长度
      int ListEmpty() const{return nListLength;}      //判断链表是否为空
      void Reset(int nPos=0);        //重新设置链表的当前指针的位置	
	  private:
      ListNode<T> *ptrFront,      //链表的头结点指针
                    *ptrTail,                  //链表的尾结点指针
                  *ptrPrev,                   //链表的当前结点的前一个结点的指针
                      *ptrCurr;              //链表的当前结点指针
      int nListLength;                   //链表的长度
      int nPosition;                        //链表的当前结点指针的位置

      ListNode<T> *GetListNode(const T &nItem,ListNode<T> *ptrNext=NULL); 
				//获得链表的下一个结点指针
      void FreeListNode(ListNode<T> *ptr){delete ptr;}   //释放结点资源
      void CopyList(const LinkedList<T>& list);   //逐项拷贝链表

};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -