返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++链表类的封装详情介绍
  • 459
分享到

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

2024-04-02 19:04:59 459人浏览 独家记忆
摘要

目录1.CList.h2.CList.cpp3.main.cpp1.CList.h #ifndef CLIST_H #define CLIST_H   class Cnode    

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++链表类封装内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++链表类的封装详情介绍

本文链接: https://lsjlt.com/news/147498.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++链表类的封装详情介绍
    目录1.CList.h2.CList.cpp3.main.cpp1.CList.h #ifndef CLIST_H #define CLIST_H   class CNode    ...
    99+
    2024-04-02
  • C++链表类怎么封装
    这篇文章主要介绍“C++链表类怎么封装”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++链表类怎么封装”文章能帮助大家解决问题。1.CList.h#ifndef CLIST_H#defi...
    99+
    2023-06-30
  • 关于C# 类的封装详情
    目录1、前言2、实例1、前言 法存取数据。除此之外,还可以控制数据的存取方式。在面向对象编程中,大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结[成一个单位。设计类...
    99+
    2024-04-02
  • C++ 封装 DLL 供 C# 调用详细介绍
    目录1、VLC代码封装1.1 QT(C++)工程1.2static 声明 m_instance 优化效率1.3封装 DLL1.4应用程序的导出函数1.5 vlc 简单封装的具体实现2...
    99+
    2024-04-02
  • php中链表的详细介绍
    这篇文章主要介绍“php中链表的详细介绍”,在日常操作中,相信很多人在php中链表的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中链表的详细介绍”的疑惑有所帮...
    99+
    2024-04-02
  • Python的装饰器详情介绍
    目录1.定义及使用2.@classmethod1.定义及使用 例1:装饰器定义:       def 装饰器函数(外部函数):   ...
    99+
    2024-04-02
  • C++ 多继承详情介绍
    C++支持多继承,即允许一个类同时继承多个类。 关于多继承,一直以来争议不断,有一部分人认为多继承会带来大量的问题,为了解决这些问题会使得语言本身变得非常复杂,因此应当避免。另外一派...
    99+
    2024-04-02
  • C++List链表的介绍和使用
    目录1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity...
    99+
    2023-03-07
    C++ List链表 C++ List使用
  • C++的类与C#的类详细介绍
    本篇内容介绍了“C++的类与C#的类详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!许多编程人员学习C++总结经验为,有的觉得C++语...
    99+
    2023-06-17
  • C++ 函数重载详情介绍
    文章转自微信公众号:Coder梁(ID:Coder_LT) 函数重载 函数重载还有一个别名叫函数多态,其实我个人感觉函数多态这个名字更好理解更恰当一些。 函数多态是C++在C语言基础...
    99+
    2024-04-02
  • 详情介绍C++之命名空间
    目录C++命名空间1.概述 2.格式 3.定义范围 4.瀑布式开发格式 5.命名空间的访问方式 5.1空间名::变量名 5.2using namespace 空间名6.命名空间可以无...
    99+
    2024-04-02
  • C++运算符重载详情介绍
    文章转自公众号:Coder梁(ID:Coder_LT) C++当中除了函数可以重载之外,其实运算符也是可以重载的。我们之前已经接触过一些,可能大家没有意识到。 举个例子,乘号*,运用...
    99+
    2024-04-02
  • C++链表节点的添加和删除介绍
    目录前言1. 节点的创建 2. 链表的定义3. 创建节点4. 节点的插入 4.1 头插法 4.2 尾插法 4.3 插入中间节点 总结前言 链表...
    99+
    2024-04-02
  • C++中封装与信息隐藏的详解及其作用介绍
    目录概述类的公用接口类的私有实现方法与消息概述 封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念. 这样能避免受到外界干扰和误用. 数据隐藏包括数据封装和数据抽象两...
    99+
    2024-04-02
  • C++ 自定义单向链表 ListNode详情
     链表有两种:  1、带头结点,头结点存放的是链表的长度,从第二个节点开始存放数据。 2、不带头结点,没有存放链表长度的节点,从头结点开始就存放数据。 ...
    99+
    2024-04-02
  • Vue封装DateRangePicker组件流程详细介绍
    目录前言一、封装el-date-picker二、父组件中进行引用总结前言 日期选择器在实际使用中,可能会要求默认固定日期、回显日期或者是时间固定点(00:00:00到23:59:59...
    99+
    2022-11-16
    Vue DateRangePicker Vue封装DateRangePicker组件
  • 数据结构C语言链表的实现介绍
    目录前言函数1. 链表初始化2. 计算链表长度3. 打印链表4.计算链表长度5. 删除链表中指定位置节点6. 向链表中指定位置插入节点7. 全代码+运行效果前言 需要用到的函数库 ...
    99+
    2024-04-02
  • C++数据封装以及定义结构介绍
    今天小编给大家分享的是C++数据封装以及定义结构介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。先介绍一个字符串比较函数:strcmp(s1,s2),当s1<s2时,返回一个...
    99+
    2023-08-03
  • Java中包装类和Arrays类的详细介绍
    目录包装类为什么需要包装类自动装箱:自动拆箱:包装类的特有功能:小结:Arrays类Arrays类的概述Arrays类的常用APIsort方法自定义规则:总结包装类 包装类其实就是8...
    99+
    2022-12-14
    java的Arrays类 Java包装类 java的array类
  • C++编程语言实现单链表详情
    目录一、单链表简单介绍二、下面我们先实现单链表的初始化。 三、实现单链表的插入与删除数据一、单链表简单介绍 首先,我们再回顾一下线性表的两种存储方式——顺序存储与链式存储 上图左边...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作