C++鏈表


第一次理解鏈表和節點

節點倆基本屬性:節點數據、指向下一個節點的指針pNext。

鏈表倆基本屬性:鏈表頭指針、節點數。

鏈表之所以能像一條線一樣連接各個節點,關鍵就pNext指針,鏈表只是一個邏輯產物罷了。

那么問題來了,節點類有個指向下一個節點的指針,下一個節點還沒產生怎么指向。所以先有下一個節點,然后將當前的節點指針寫在上一個節點的pNext指針里的。過程就是在添加第二個節點時,在第一個節點的pNext上寫上當前的(也就是第二個節點的指針)節點指針。

所以添加一個節點后,pNext是沒有寫的;只有添加下一個節點才回去把上個的pNext寫上。這些都是一些邏輯罷了。

這個函數實現了簡單的三步:

1)尋找尾節點並將節點指針返回 ;

2)添加新節點,也就是把新的節點對象的指針給上一個節點的pNext指針,這樣就能通過上一個節點找到目前的節點,那么你就算是這個鏈表的節點的;

3)遍歷,就是把寫的節點一個個訪問一遍。

 

#include<iostream>

#include<string.h>

using namespace std; 

class CNode

{

    public:

       CNode *pNext;

       int Date;

       CNode(int date)

       {

           pNext = NULL;

           Date = date;

       }

       ~CNode()

       {

           delete pNext;

           pNext = NULL;

       }     

};

 

class CList

{

    public:

       CNode *pHeader;          //一個鏈表的頭指針,就是一個節點的指針

       int NodeSum;         //節點數

       CList()

       {

           pHeader = NULL;

           NodeSum = 0;

       }

       ~CList()

       {

           delete pHeader;

           pHeader = NULL;

       }

       CNode* Movetrail()          //移至尾節點,並將其返回

       {

           CNode *Temp;

           Temp = pHeader;

           for(int i=1; i<NodeSum; i++)

           {

              Temp = Temp->pNext;

           }

           return Temp;

       }

       void AddNode(CNode* pNode)       //在鏈尾端插入節點

       {                                   //插入節點的過程就是把自己的      

           CNode *pTrail;                  //節點指針寫到上一個節點pNext指針上

           if(NodeSum == 0)

           {

              pHeader = pNode;

           }

           else

           {

              pTrail = Movetrail();

              pTrail->pNext = pNode;

           }

           NodeSum++;

       }

       void DisplayAllNode()           //遍歷列表中的節點

       {

           CNode *Temp=pHeader; 

           cout<<"所有的節點按先后順序"<<endl;

           cout<<"第1個節點:"<<Temp->Date<<endl;

           for(int i =1; i<NodeSum; i++)

           {

              Temp = Temp->pNext;

              cout<<"第"<<i+1<<"個節點:"<<Temp->Date<<endl;  

           }  

       }     

};

 

int main()

{

    CNode *node1 = new CNode(520);

    CNode *node2 = new CNode(1314);

    CNode *node3 = new CNode(222);

    CList list1;

    list1.AddNode(node1);

    list1.AddNode(node2);

    list1.AddNode(node3);

    list1.DisplayAllNode();

    return 0;

 }


免責聲明!

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



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