C++學習筆記47:鏈表的概念與結點類模板


學堂在線學習筆記

 鏈表的概念與結點類模板

順序訪問的線性群體--鏈表類

鏈表是一種動態數據結構,可以用來表示順序訪問的線性群體;

鏈表是由系列結點組成,結點可以在運行時動態生成;

每一個結點包括數據域和指向鏈表中下一個結點的指針(即下一個結點的地址)。如鏈表中每個結點中只有一個指向后繼結點的指針,則該鏈表稱為單鏈表;

單鏈表的結點類模板

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM