C++链表类的封装详情介绍

 更新时间:2022年04月27日 10:30:18   作者:学习要充足  
这篇文章主要介绍了C++链表类的封装,文章基于C++的相关资料展开主题的详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

1.CList.h

#ifndef CLIST_H
#define CLIST_H
 
class CNode         //节点类
{
public:
    CNode();
    ~CNode();
    void *data;     //数据域  节点数据的地址
    CNode *pnext;   //指针域  保存下一个节点的地址
protected:
private:
};
 
class CList         //链表类
{
public:
    CList();
    ~CList();
    void addList(void *data);                  //在尾部添加节点
    int getListCount();                        //获取节点的个数
    int insertListByPos(int pos,void *data);   //根据pos插入节点
    int deleteListByPos(int pos);              //删除节点
    void *getNodeByPos(int pos);               //获取节点数据
    void *freeList();                          //释放链表
protected:
private:
    CNode *head;                               //链表头
    int count;                                 //节点个数
};
 
#endif

2.CList.cpp

#include"CList.h"
#include<stdio.h>
#include<cstring>//memset头文件
 
CNode::CNode()
{
    this->data = NULL;
    this->pnext = NULL;
}
 
CNode::~CNode()
{
}
 
CList::CList()
{
    this->head = new CNode;
    this->count = 0;
}
 
CList::~CList()
{
}
 
//在尾部添加节点
void CList::addList(void *data)
{
    CNode *tmp = this->head;
    while(tmp->pnext!=NULL)
    {
        tmp = tmp->pnext;    
    }
    CNode *newNode = new CNode;//创建新节点
    tmp->pnext = newNode;
    newNode->data = data;
    ++(this->count);
}
 
//获取节点的个数
int CList::getListCount()
{
    return this->count;
}
 
//根据pos插入节点
int CList::insertListByPos(int pos,void *data)
{
    int num = 0;
    CNode* tmp = this->head;
    while(tmp->pnext!=NULL)
    {
        count++;
        tmp = tmp->pnext;
        if(pos == count)
        {
            CNode* newNode = new CNode;  //新节点
            memset(newNode,'\0',sizeof(CNode));
            newNode->data = data;
            newNode->pnext = tmp->pnext;
            tmp->pnext = newNode;
            return 1;
        }
    }
    return 0;
}
 
//删除节点
int CList::deleteListByPos(int pos)
{
    int count = 0;
    CNode* tmp = head->pnext,*pre = head;
    while(tmp!=NULL)
    {
        count++;
        if(count == pos)
        {
            pre->pnext = tmp->pnext;
            //tmp数据域释放掉
            delete tmp->data;
            delete tmp;
            return 1;
        }
        pre = pre->pnext;
        tmp = tmp->pnext;
    }
    return -1;
}
 
//获取节点数据
void* CList::getNodeByPos(int pos)
{
    int count = 0;
    CNode* tmp = head;
    while(tmp->pnext!=NULL)
    {
        count++;
        tmp = tmp->pnext;
        if(pos == count)
        {
            return tmp->data;    
        }
    }
    return NULL;
}
 
//释放链表
void* CList::freeList()
{
    CNode* tmp = head;
    while(tmp!=NULL)
    {
        head = head->pnext;
        delete tmp->data;
        delete tmp;
        tmp = head;    
    }
    return this->head;
}

3.main.cpp

计算总节点数:

#include<iostream>
using namespace std;
#include"CTools.h"
#include "CLabel.h"
#include"CEdit.h"
#include"CButton.h"
#include"CtrBase.h"
#include"CLogin.h"      //显示登录窗口
#include"CIndexWin.h"   //管理员主界面窗口
#include"CManagerWin.h" //经理主界面窗口
#include"CWaiterWin.h"  //服务员主界面窗口
#include<stdlib.h>
#include"CList.h"
 
int main()
{
    CLoginWin *login = new CLoginWin(12,5,30,20);
    CIndexWin *index = new CIndexWin(3,3,25,23);
    CManagerWin *manager = new CManagerWin(3,3,25,23);
    CWaiterWin *waiter = new CWaiterWin(3,3,25,30);    
 
    CList *myList = new CList;
    myList->addList(login);
    myList->addList(index);
    myList->addList(manager);
    myList->addList(waiter);
    cout<<myList->getListCount()<<endl;//4
    return 0;
}

到此这篇关于C++链表类的封装详情介绍的文章就介绍到这了,更多相关C++链表类封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现优酷土豆去视频广告的方法

    C++实现优酷土豆去视频广告的方法

    这篇文章主要介绍了C++实现优酷土豆去视频广告的方法,实例分析了C++实现屏蔽功能的相关技巧,需要的朋友可以参考下
    2015-04-04
  • C++实现页面的缓冲区管理器

    C++实现页面的缓冲区管理器

    这篇文章主要介绍了C++实现页面的缓冲区管理器,文章围绕主题展开详细的内容介绍具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • c++11&14-多线程要点汇总

    c++11&14-多线程要点汇总

    这篇文章主要介绍了c++11&14-多线程的使用方法,文中代码非常详细,方便大家更好的参考和学习,感兴趣的朋友快来了解下
    2020-06-06
  • C++中的最小生成树算法超详细教程

    C++中的最小生成树算法超详细教程

    这篇文章主要介绍了C++中的最小生成树算法超详细教程,最小生成树的最著名的算法有两个, 一个是Prim算法, 另一个当然就是Kruskal算法, 接下来, 我将尽我所能的介绍这两个算法, 也算是对自己学习的一个回顾吧,需要的朋友可以参考下
    2023-08-08
  • C语言中的参数传递机制详解

    C语言中的参数传递机制详解

    这篇文章主要介绍了C语言中的参数传递机制,C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。下面我们详细探讨下
    2017-04-04
  • C语言中%c与%s的区别与划分详解

    C语言中%c与%s的区别与划分详解

    这篇文章主要介绍了C语言中%c与%s的区别与划分详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C语言、C++内存对齐问题详解

    C语言、C++内存对齐问题详解

    这篇文章主要介绍了C语言、C++内存对齐问题详解,内存对齐的问题主要存在于理解struct和union等复合结构在内存中的分布,需要的朋友可以参考下
    2014-10-10
  • VS及Unity安装和使用Nuget包

    VS及Unity安装和使用Nuget包

    本文主要介绍了VS及Unity安装和使用Nuget包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • C/C++详解如何实现文件备份

    C/C++详解如何实现文件备份

    这篇文章主要介绍了C/C++详解如何实现文件备份,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 解析C++编程中的bad_cast异常

    解析C++编程中的bad_cast异常

    这篇文章主要介绍了C++编程中的bad_cast异常,bad_cast异常通常出现于表达式中类型转换错误时等一些场景,需要的朋友可以参考下
    2016-01-01

最新评论