c语言:【问题描述】 使用尾插法建立一个带头结点的存储学生信息(学号, 姓名)的单链表(学号为0,结束),然后从键盘上输入一个姓名,在单链表中查找该姓名的学生是否存在(可虑可能有重名的情况)。若存在,则输出学生的详细信息,若不存在,给出提示信息NotFound
时间: 2023-12-10 10:03:06 浏览: 63
尾插法建立带头结点的单链表
5星 · 资源好评率100%
好的,这是一道 C 语言的题目。我可以帮你分步解决这道题目。
1. 首先要定义一个学生结构体,包含学号和姓名两个成员变量。
```
struct Student {
int num;
char name[20];
struct Student *next;
};
```
2. 然后定义一个头结点,方便链表的操作。
```
struct Student *head = NULL;
head = (struct Student *) malloc(sizeof(struct Student));
head->num = 0;
head->next = NULL;
```
3. 接着,使用尾插法建立单链表。从键盘上输入学生信息,直到输入的学号为0为止。
```
struct Student *p = NULL;
struct Student *tail = head;
while (1) {
p = (struct Student *) malloc(sizeof(struct Student));
printf("请输入学生学号(输入0结束):");
scanf("%d", &(p->num));
if (p->num == 0) {
free(p);
printf("建立单链表成功!\n");
break;
}
printf("请输入学生姓名:");
scanf("%s", &(p->name));
tail->next = p;
tail = p;
}
```
4. 最后,从键盘上输入一个姓名,遍历单链表,查找姓名相同的学生信息。
```
char searchName[20];
printf("请输入要查找的学生姓名:");
scanf("%s", &(searchName));
struct Student *ptr = head->next;
int found = 0;
while (ptr != NULL) {
if (strcmp(ptr->name, searchName) == 0) {
printf("学号:%d,姓名:%s\n", ptr->num, ptr->name);
found = 1;
}
ptr = ptr->next;
}
if (!found) {
printf("NotFound\n");
}
```
这样,你就可以完成这道题目了。
阅读全文