使用后插法建立一个带头结点的存储学生信息的单链表,并将建立后的学生链表中的信息输出到屏幕上,学生的结构体类型可自行定义。
时间: 2024-03-22 11:41:29 浏览: 19
学生信息建立采用链表结构
好的,我可以帮你解决这个问题。
首先,让我们来定义一个学生结构体类型:
```c
typedef struct student {
char name[20]; // 学生姓名
int age; // 学生年龄
char id[10]; // 学生学号
struct student *next; // 指向下一个学生的指针
} Student;
```
然后,我们可以编写一个函数来创建学生节点,代码如下:
```c
// 创建一个新的学生节点
Student *createStudent() {
Student *stu = (Student*) malloc(sizeof(Student));
printf("请输入学生姓名: ");
scanf("%s", stu->name);
printf("请输入学生年龄: ");
scanf("%d", &stu->age);
printf("请输入学生学号: ");
scanf("%s", stu->id);
stu->next = NULL;
return stu;
}
```
接着,我们可以编写一个函数来插入学生节点到链表中,代码如下:
```c
// 插入一个学生节点到链表中
void insertStudent(Student *head) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = createStudent();
}
```
最后,我们可以编写一个函数来输出学生信息到屏幕上,代码如下:
```c
// 输出学生链表中的信息
void printStudent(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("姓名: %s, 年龄: %d, 学号: %s\n", p->name, p->age, p->id);
p = p->next;
}
}
```
完整的程序代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char name[20]; // 学生姓名
int age; // 学生年龄
char id[10]; // 学生学号
struct student *next; // 指向下一个学生的指针
} Student;
// 创建一个新的学生节点
Student *createStudent() {
Student *stu = (Student*) malloc(sizeof(Student));
printf("请输入学生姓名: ");
scanf("%s", stu->name);
printf("请输入学生年龄: ");
scanf("%d", &stu->age);
printf("请输入学生学号: ");
scanf("%s", stu->id);
stu->next = NULL;
return stu;
}
// 插入一个学生节点到链表中
void insertStudent(Student *head) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = createStudent();
}
// 输出学生链表中的信息
void printStudent(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("姓名: %s, 年龄: %d, 学号: %s\n", p->name, p->age, p->id);
p = p->next;
}
}
int main() {
// 创建一个头节点
Student *head = (Student*) malloc(sizeof(Student));
head->next = NULL;
// 插入学生节点
printf("请输入学生信息:\n");
for (int i = 0; i < 3; i++) {
insertStudent(head);
}
// 输出学生信息
printf("学生信息如下:\n");
printStudent(head);
return 0;
}
```
希望我的回答能够帮到你,如果还有什么问题可以继续问我哦!
阅读全文