zoukankan      html  css  js  c++  java
  • 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;

     }

  • 相关阅读:
    线性表的顺序存储结构详解
    Java就业急训营-感悟与分享
    在Ubuntu系统下用C语言编写程序
    NTIRE介绍和近年来超分SR结果展示
    《王道操作系统》学习笔记:计算机系统概述
    JavaScript 语言通识 — 重学 JavaScript
    python利用numpy存取文件
    Batch Normalization(批标准化,BN)
    全零填充(padding)
    感受野(Receptive Field)理解为什么采用多层小卷积核来替换一层大卷积核
  • 原文地址:https://www.cnblogs.com/emptyYPen/p/5925897.html
Copyright © 2011-2022 走看看