当前位置:首页 > 开发教程 > C语言 >

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

时间:2022-04-27 11:33 来源:未知 作者:男人心海底针 收藏

这篇文章主要介绍了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语言阅读排行

最新文章