使用尾插法建立一个带头结点的存储学生信息(学号, 姓名)的单链表(学号为0,结束),然后从键盘上输入一个姓名,在单链表中查找该姓名的学生是否存在(可虑可能有重名的情况)。若存在,则输出学生的详细信息,若不存在,给出提示信息NotFound。 (1)创建链表( 自定义函数, 尾插法) (2) 根据输入的姓名查找,若存在,则输出学生的详细信息,若不存在,给出提示信息NotFound。 (自定义函数) (3)在main函数中完成初始化工作并调用上述两个函数。 【输入形式】 输入若干行。每行数据包括学号(整数), 姓名, 最后一行输入一个0 然后输入一个名字(字符串)
时间: 2023-12-08 10:05:19 浏览: 84
好的,我能够帮你解决这个问题。以下是代码实现:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义学生结构体
struct Student {
int number;
string name;
Student* next;
};
// 创建链表
Student* createList() {
Student* head = new Student;
head->number = 0;
head->name = "";
head->next = NULL;
Student* tail = head;
int number;
string name;
cin >> number >> name;
while (number != 0) {
Student* newStudent = new Student;
newStudent->number = number;
newStudent->name = name;
newStudent->next = NULL;
tail->next = newStudent;
tail = newStudent;
cin >> number >> name;
}
return head;
}
// 查找学生
void findStudent(Student* head, string name) {
bool found = false;
Student* p = head->next;
while (p != NULL) {
if (p->name == name) {
cout << "Number: " << p->number << ", Name: " << p->name << endl;
found = true;
}
p = p->next;
}
if (!found) {
cout << "NotFound" << endl;
}
}
int main() {
Student* head = createList();
string name;
cin >> name;
findStudent(head, name);
return 0;
}
```
代码思路:
首先定义学生结构体,包括学号、姓名和指向下一个学生的指针。然后定义一个创建链表的函数,使用尾插法建立一个带头结点的单链表。在创建链表时,输入若干行数据,包括学号和姓名,以0作为结束标志。
接着定义一个查找学生的函数,根据输入的姓名在单链表中查找学生。如果找到了,输出学生的学号和姓名;如果没找到,输出提示信息。
最后在main函数中调用上述两个函数,先创建链表,再输入要查找的姓名,最后调用查找学生函数即可。
注意事项:
为了避免重复输入相同的姓名,建议使用getline函数读取输入的姓名。另外,为了保证程序的健壮性,应该在读入学号和姓名时进行输入类型的判断。
阅读全文