c语言使用尾插法建立一个带头结点的存储学生信息(学号, 姓名)的单链表(学号为0,结束),然后从键盘上输入一个姓名,在单链表中查找该姓名的学生是否存在(可虑可能有重名的情况)。若存在,则输出学生的详细信
时间: 2024-02-13 09:00:20 浏览: 208
息(包括学号和姓名),否则输出"查无此人"。
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
typedef struct student {
int id;
char name[MAX_NAME_LEN];
struct student *next;
} Student;
void insert(Student *head, int id, char *name) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
Student *newNode = (Student *) malloc(sizeof(Student));
newNode->id = id;
strcpy(newNode->name, name);
newNode->next = NULL;
p->next = newNode;
}
void print(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("id: %d, name: %s\n", p->id, p->name);
p = p->next;
}
}
void search(Student *head, char *name) {
Student *p = head->next;
int flag = 0;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("id: %d, name: %s\n", p->id, p->name);
flag = 1;
}
p = p->next;
}
if (flag == 0) {
printf("查无此人\n");
}
}
int main() {
Student *head = (Student *) malloc(sizeof(Student));
head->id = 0;
head->next = NULL;
int id;
char name[MAX_NAME_LEN];
scanf("%d %s", &id, name);
while (id != 0) {
insert(head, id, name);
scanf("%d %s", &id, name);
}
char searchName[MAX_NAME_LEN];
scanf("%s", searchName);
search(head, searchName);
return 0;
}
```
首先定义了一个 `Student` 结构体来存储学生信息,包括学号和姓名,以及一个指向下一个学生的指针 `next`。
然后实现了 `insert` 函数来进行尾插法建立单链表,实现了 `print` 函数来输出整个单链表,实现了 `search` 函数来查找指定姓名的学生。
在 `main` 函数中,首先创建了一个带头结点的单链表,然后通过循环从键盘上输入学生信息来建立单链表。最后从键盘上输入要查找的姓名,并调用 `search` 函数来查找该姓名的学生,输出详细信息或者"查无此人"。
阅读全文