使用头插法建立一个带头结点的存储学生信息(学号, 姓名)的单链表,并将建立后的学生链表中的信息输出到屏幕上。
时间: 2024-02-12 13:06:58 浏览: 113
头插法建立单链表
好的,我可以帮你解决这个问题。以下是使用头插法建立带头结点的单链表,并输出学生信息的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct Student {
char id[10]; // 学号
char name[20]; // 姓名
struct Student *next; // 指向下一个学生的指针
} Student;
int main() {
int n; // 学生个数
printf("请输入学生个数:");
scanf("%d", &n);
// 创建头结点
Student *head = (Student *)malloc(sizeof(Student));
head->next = NULL;
// 依次插入学生信息
for (int i = 0; i < n; i++) {
Student *stu = (Student *)malloc(sizeof(Student));
printf("请输入第%d个学生的学号和姓名:", i+1);
scanf("%s %s", stu->id, stu->name);
// 头插法插入学生信息
stu->next = head->next;
head->next = stu;
}
// 输出学生信息
printf("\n学生信息如下:\n");
printf("学号\t姓名\n");
Student *p = head->next;
while (p != NULL) {
printf("%s\t%s\n", p->id, p->name);
p = p->next;
}
// 释放内存
p = head;
while (p != NULL) {
Student *q = p->next;
free(p);
p = q;
}
return 0;
}
```
使用头插法建立单链表的思路是:每读入一个学生信息,就创建一个包含该信息的结点,并将该结点插入到头结点之后。这样每插入一个结点,就会成为新的头结点,最后得到的链表是逆序的。因此需要从头结点的下一个结点开始遍历链表,输出学生信息。最后需要记得释放内存。
阅读全文