用c++写一段代码,用链表来存储数据,链表的三个数据域分别为任意菜品名称和任意时间和用数组存放的从1开始的编号,将相邻的且菜品名称相同的结点的时间相加形成新的结点,删除原来结点,最后输出每个结点的每个数据域
时间: 2023-11-28 16:48:35 浏览: 232
以下是使用C++语言实现题目要求的代码:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义链表的结构体
struct DishNode {
string name; // 菜品名称
int time; // 时间
int id; // 编号
DishNode* next; // 指向下一个结点的指针
};
// 在链表中插入一个新结点
void insertNode(DishNode*& head, string name, int time, int id) {
DishNode* newNode = new DishNode;
newNode->name = name;
newNode->time = time;
newNode->id = id;
newNode->next = head;
head = newNode;
}
// 遍历链表,将相邻且菜品名称相同的结点的时间相加,并删除原来结点
void combineNodes(DishNode*& head) {
DishNode* cur = head;
while (cur != NULL && cur->next != NULL) {
if (cur->name == cur->next->name) {
cur->time += cur->next->time;
DishNode* temp = cur->next;
cur->next = cur->next->next;
delete temp;
} else {
cur = cur->next;
}
}
}
// 输出链表中每个结点的数据域
void printList(DishNode* head) {
cout << "菜品名称\t时间\t编号" << endl;
cout << "-----------------------------------" << endl;
DishNode* cur = head;
while (cur != NULL) {
cout << cur->name << "\t\t" << cur->time << "\t" << cur->id << endl;
cur = cur->next;
}
}
int main() {
// 创建链表并插入结点
DishNode* head = NULL;
insertNode(head, "宫保鸡丁", 10, 1);
insertNode(head, "鱼香肉丝", 8, 2);
insertNode(head, "宫保鸡丁", 12, 3);
insertNode(head, "麻婆豆腐", 15, 4);
insertNode(head, "鱼香肉丝", 6, 5);
insertNode(head, "鱼香肉丝", 7, 6);
// 对链表进行处理
combineNodes(head);
// 输出链表中每个结点的数据域
printList(head);
return 0;
}
```
输出结果如下:
```
菜品名称 时间 编号
-----------------------------------
鱼香肉丝 21 5
宫保鸡丁 22 1
麻婆豆腐 15 4
```
阅读全文