首先我们建立一个链表类,链表结构体也可
#pragma once
#include"People.h"
class list
{
public:
People data;
list* next;
};
data信息类,可以根据实际需求自由拓展
#pragma once
#include<string>
#include<cstring>
using namespace std;
class People
{
public:
void setid(char *ID) { strcpy_s(id, ID); }
void setname(char * NAME) { strcpy_s(name,NAME); }
char* getid() { return id; }
char* getname() { return name; }
private:
char id[30];
char name[30];
};
然后用另一个类去管理链表的操作,写一些函数实现基本的功能
#pragma once
#include"list.h"
#include"People.h"
#include<iostream>
using namespace std;
class store
{
public:
//为了方便,我写成了内联函数的形式
store() {//构造函数,生成头结点
headNode = (list*)malloc(sizeof(list));
headNode->next = nullptr;
endNode = headNode;
}
void insertNode(People p) { //插入一个结点
list* node = createNode(p);
endNode->next = node; //尾插法,将新建的结点插入
endNode = endNode->next; //将尾指针向后移
}
void print() { //输出信息
list* p = headNode->next; //中间变量
while (p != nullptr) {
cout << p->data.getid() << ' ' << p->data.getname() << endl;
p = p->next;
}
}
//释放链表
void freeNode() {
list* p;
while (headNode != NULL) {
p = headNode;
headNode = headNode->next;
free(p);
p = NULL;
}
return;
}
private:
list* headNode; //头指针
list* endNode; //尾指针
list* createNode(People p) { //用来创建结点,返回一个新创建的结点
list* newNode = (list*)malloc(sizeof(list));
newNode->next = nullptr;
newNode->data = p;
return newNode;
}
};
然后我们测试一下
#include <iostream>
#include"People.h"
#include"list.h"
#include"store.h"
using namespace std;
int main()
{
People p[30];
store s;
int n;
cout << "输入人数:";
cin >> n;
for (int i = 0; i < n; ++i) {
char id[30], name[30];
cout << "输入id: ";
cin >> id;
cout << "输入name:";
cin >> name;
p[i].setid(id);
p[i].setname(name);
}
for (int i = 0; i < n; ++i) {
s.insertNode(p[i]);
}
s.print();
s.freeNode(); //记得回收空间
return 0;
}
正常运行:
根据这个模板,可以在实际项目中使用链表进行信息的存储、输出、遍历、文件的录入和读取
文件的录入和读取,之后再更
注意:
在使用链表中如果使用了string类型,会产生不可描述的错误