c语言:【问题描述】 使用尾插法建立一个带头结点的存储学生信息(学号, 姓名)的单链表(学号为0,结束),然后从键盘上输入一个姓名,在单链表中查找该姓名的学生是否存在(可虑可能有重名的情况)。若存在,则输出学生的详细信息,若不存在,给出提示信息NotFound。代码实现
时间: 2024-02-12 13:06:32 浏览: 22
好的,以下是完整的 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int num;
char name[20];
struct Student *next;
};
int main() {
struct Student *head = NULL;
head = (struct Student *) malloc(sizeof(struct Student));
head->num = 0;
head->next = NULL;
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;
}
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");
}
return 0;
}
```
这个程序使用了尾插法建立一个带头结点的单链表,并通过遍历链表查找输入的姓名是否存在。如果存在,则输出该学生的学号和姓名,否则输出 "NotFound"。