C++项目中用链表存储信息详解代码

首先我们建立一个链表类,链表结构体也可

#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类型,会产生不可描述的错误

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

葛济维的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值