⭐C++再封装的方式写一个链式结构⭐(无头链表头插法)

无头链表头插法的原理图

一.大致思路

1.类的基本框架

1.1基本数据

先创建一个结构体用于储存基本数据
C++的类里面的const类型的数据必需通过初始化参数列表的方式初始化

struct DATA {
	const int id;
	const string name;
	DATA(int id, string name):id(id),name(name) {}
};

1.2结点类

类数据成员包括自定义的DATA类型数据和指向下一个结点的指针,并且类的组合以初始化参数列表的方式初始化

class Node {
public:
	Node(string name,int id,Node* nextNode):data(id,name),next(nextNode){}
protected:
	DATA data;
	Node* next;
};

1.3链表类

数据成员包括一个头节点和另一个用于记录当前结点个数的变量

class List {
public:
	List():headNode(NULL),curSize(0){}
protected:
	Node* headNode;
	int curSize;
};

2.链表的链接

通过成员函数BuiltList()创建结点,以原来的头节点充当新节点指向的下一个结点,并且把头节点指向新创建的结点,实现链接操作

class List {
public:
	List():headNode(NULL),curSize(0){}
	void BuiltList(DATA data) {
		headNode= new Node(data.name,data.id, headNode);
		curSize++;
	}
protected:
	Node* headNode;
	int curSize;
};

链表的打印要获取到每个结点的数据以及next指针,用于这些数据在结点里面是属于保护类型的,所以要在公共权限下创建能够外部访问值得接口

class Node {
public:
	Node(string name,int id,Node* nextNode):data(id,name),next(nextNode){}
	DATA getdata() {
		return data;
	}
	Node* getNext() {
		return next;
	}
protected:
	DATA data;
	Node* next;
};

下面就是在List类里实现链表打印

class List {
public:
	List():headNode(NULL),curSize(0){}
	void BuiltList(DATA data) {
		headNode= new Node(data.name,data.id, headNode);
		curSize++;
	}
	void printList() {
		Node* pmove = headNode;
		while (pmove) {
			cout << pmove->getdata().id<<'\t'<<pmove->getdata().name<< endl;
			pmove = pmove->getNext();
		}
	}
protected:
	Node* headNode;
	int curSize;
};

二.源代码

源代码如下:

#include<iostream>
using namespace std;
struct DATA {
	const int id;
	const string name;
	DATA(int id, string name):id(id),name(name) {}
};
class Node {
public:
	Node(string name,int id,Node* nextNode):data(id,name),next(nextNode){}
	DATA getdata() {
		return data;
	}
	Node* getNext() {
		return next;
	}
protected:
	DATA data;
	Node* next;
};
class List {
public:
	List():headNode(NULL),curSize(0){}
	void BuiltList(DATA data) {
		headNode= new Node(data.name,data.id, headNode);
		curSize++;
	}
	void printList() {
		Node* pmove = headNode;
		while (pmove) {
			cout << pmove->getdata().id<<'\t'<<pmove->getdata().name<< endl;
			pmove = pmove->getNext();
		}
	}
protected:
	Node* headNode;
	int curSize;
};
int main() {
	const int arrayNum = 3;
	List* list = new List;
	DATA data[arrayNum]{ {123,"小明"},{456,"小红"},{789,"小刚"} };
	for (int i = 0; i < arrayNum; i++)
		list->BuiltList(data[i]);
	list->printList();
	return 0;
}
❤️希望大家多多支持❤️

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值