c++单链表增删改查火车信息
时间: 2023-07-04 20:25:48 浏览: 94
c++实现链表增删改查
5星 · 资源好评率100%
好的,以下是一个简单的C++单链表的例子,用于管理火车信息:
```c++
#include <iostream>
#include <string>
using namespace std;
// 火车信息结构体
struct Train {
string name; // 火车名
string departure; // 出发地
string destination; // 目的地
int time; // 发车时间
};
// 单链表节点结构体
struct Node {
Train data; // 数据域
Node* next; // 指针域
};
// 单链表类
class LinkedList {
public:
LinkedList() {
head = new Node(); // 创建头节点
head->next = nullptr;
}
// 添加节点
void addNode(Train train) {
Node* newNode = new Node();
newNode->data = train;
newNode->next = nullptr;
Node* p = head;
while (p->next != nullptr) {
p = p->next;
}
p->next = newNode;
}
// 删除节点
bool deleteNode(string name) {
Node* p = head->next;
Node* pre = head;
while (p != nullptr) {
if (p->data.name == name) {
pre->next = p->next;
delete p;
return true;
}
pre = p;
p = p->next;
}
return false;
}
// 修改节点
bool modifyNode(string name, Train train) {
Node* p = head->next;
while (p != nullptr) {
if (p->data.name == name) {
p->data = train;
return true;
}
p = p->next;
}
return false;
}
// 查找节点
Train* findNode(string name) {
Node* p = head->next;
while (p != nullptr) {
if (p->data.name == name) {
return &p->data;
}
p = p->next;
}
return nullptr;
}
// 输出所有节点
void printAll() {
Node* p = head->next;
while (p != nullptr) {
cout << "火车名:" << p->data.name << endl;
cout << "出发地:" << p->data.departure << endl;
cout << "目的地:" << p->data.destination << endl;
cout << "发车时间:" << p->data.time << endl << endl;
p = p->next;
}
}
private:
Node* head;
};
// 主函数
int main() {
LinkedList list;
// 添加节点
Train train1 = { "G101", "北京", "上海", 800 };
Train train2 = { "D312", "上海", "广州", 1100 };
Train train3 = { "Z54", "北京", "武汉", 1300 };
list.addNode(train1);
list.addNode(train2);
list.addNode(train3);
// 输出所有节点
cout << "所有火车信息:" << endl;
list.printAll();
// 删除节点
cout << "删除火车信息:" << endl;
list.deleteNode("D312");
list.printAll();
// 修改节点
cout << "修改火车信息:" << endl;
Train train4 = { "Z54", "北京", "长沙", 1300 };
list.modifyNode("Z54", train4);
list.printAll();
// 查找节点
cout << "查找火车信息:" << endl;
Train* train5 = list.findNode("G101");
if (train5 != nullptr) {
cout << "火车名:" << train5->name << endl;
cout << "出发地:" << train5->departure << endl;
cout << "目的地:" << train5->destination << endl;
cout << "发车时间:" << train5->time << endl;
}
else {
cout << "没有找到该火车信息" << endl;
}
return 0;
}
```
这段代码实现了单链表的增删改查操作,你可以根据需求进行修改和扩展。
阅读全文