• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++链表

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第一次理解链表和节点

节点俩基本属性:节点数据、指向下一个节点的指针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;

 }


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#之深度复制和浅度复制发布时间:2022-07-13
下一篇:
.net(c#)winform文本框只能输入数字,不能其他非法字符发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap