按照输入的顺序建立一个链表,每个节点包括:学号、姓名、性别、年龄。直到输入的学号为-1结束。然后输出此链表。然后从键盘上输入一个学生的学号,把此学生的节点删除后再输出链表。(要求建立链表、删除用函数)
时间: 2024-02-12 14:07:19 浏览: 155
好的,我可以帮你完成这个任务。以下是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义节点结构体
struct Student {
int id; // 学号
string name; // 姓名
char gender; // 性别
int age; // 年龄
Student *next; // 下一个节点的指针
};
// 创建链表函数
Student *createLinkedList() {
Student *head = new Student(); // 创建头节点
Student *tail = head; // 创建尾指针,初始指向头节点
int id; // 输入的学号
cin >> id;
while (id != -1) {
// 创建新节点
Student *node = new Student();
node->id = id;
cin >> node->name >> node->gender >> node->age;
node->next = NULL;
// 将新节点添加到链表末尾
tail->next = node;
tail = node;
// 继续输入学号
cin >> id;
}
return head;
}
// 输出链表函数
void printLinkedList(Student *head) {
Student *p = head->next; // 从第一个节点开始输出
while (p != NULL) {
cout << p->id << " " << p->name << " " << p->gender << " " << p->age << endl;
p = p->next;
}
}
// 删除节点函数
void deleteNode(Student *head, int id) {
Student *p = head->next; // 从第一个节点开始查找
Student *prev = head; // 初始化前驱节点为头节点
while (p != NULL) {
if (p->id == id) { // 找到待删除节点
prev->next = p->next; // 前驱节点指向待删除节点的后继节点
delete p; // 释放待删除节点的内存
return;
}
prev = p; // 更新前驱节点
p = p->next; // 更新当前节点
}
cout << "未找到学号为" << id << "的学生!" << endl;
}
int main() {
// 创建链表
Student *head = createLinkedList();
// 输出链表
cout << "链表中的学生信息为:" << endl;
printLinkedList(head);
// 删除节点
int id;
cout << "请输入要删除的学生的学号:";
cin >> id;
deleteNode(head, id);
// 再次输出链表
cout << "删除后,链表中的学生信息为:" << endl;
printLinkedList(head);
return 0;
}
```
运行程序后,你可以按照要求输入学生信息和要删除的学生的学号。程序将会输出链表和删除后的链表。注意,如果要删除的节点不存在,程序会提示“未找到学号为XXX的学生!”
阅读全文