无头链表头插法的原理图
一.大致思路
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;
}
❤️希望大家多多支持❤️ |