學堂在線學習筆記
鏈表的概念與結點類模板
順序訪問的線性群體--鏈表類
鏈表是一種動態數據結構,可以用來表示順序訪問的線性群體;
鏈表是由系列結點組成,結點可以在運行時動態生成;
每一個結點包括數據域和指向鏈表中下一個結點的指針(即下一個結點的地址)。如鏈表中每個結點中只有一個指向后繼結點的指針,則該鏈表稱為單鏈表;
單鏈表的結點類模板
template <class T> void Node<T>::insertAfter(Node<T> *p) { //p結點指針域指向當前結點的后繼結點 p->next = next; next = p;//當前結點的指針域指向p }
刪除結點之后的結點:
Node<T> *Node<T>::deleteAfter(void) { Node<T> *tempPtr = next; if (next == 0) return 0; next = tempPtr->next; return tempPtr; }
//Node.h #ifndef NODE_H #define NODE_H //類模板的定義 template <class T> class Node { private: Node<T> *next;//指向后繼結點的指針 public: T data;//數據域 Node(const T &data, Node<T> *next = 0); //構造函數 void insertAfter(Node<T> *p); //在本結點之后插入一個同類結點p Node<T> *deleteAfter();//刪除本結點的后繼結點,並返回其地址 Node<T> *nextNode(); //獲取后繼結點的地址 const Node<T> *nextNode() const;//獲取后繼結點的地址 }; //類的實現部分 //構造函數,初始化數據和指針成員 template <class T> Node<T> ::Node(const T &data ,Node<T> *next = 0) : data(data),next(next){} //返回后繼結點的指針 template <class T> Node<T> *Node<T>::nextNode() { return next; } //返回后繼結點的指針 template <class T> const Node<T> *Node<T>::nextNode() const { return next; } //在當前結點之后插入一個結點p template <class T> void Node<T> ::insertAfter(Node<T> *p) { p->next = next;//p結點指針域指向當前結點的后繼結點 next = p;//當前結點的指針域指向p } //刪除當前結點的后繼結點,並返回其地址 template <class T> Node<T> *Node<T>::deleteAfter() { Node<T> *tempPtr = next;//將欲刪除的結點地址存到tempPtr if (next == 0)//如果當前結點沒有后繼結點,返回空指針 return 0; next = tempPtr->next;//使當前結點的指針域指向tempPtr的后繼結點 return tempPtr;//返回被刪除的結點的地址 } #endif // !NODE_H