使用后插法建立一个带头结点的存储学生信息的单链表,并将建立后的学生链表中的信息输出到屏幕上,学生的结构体类型可自定义
时间: 2024-03-22 10:40:55 浏览: 71
学生信息建立采用链表结构
好的,我可以为您编写代码来实现这个功能。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 50 // 学生姓名最大长度
typedef struct student {
int id; // 学号
char name[MAX_NAME_LENGTH]; // 姓名
int age; // 年龄
struct student *next; // 指向下一个学生的指针
} Student;
// 创建一个新的学生节点
Student *new_student(int id, char *name, int age) {
Student *s = (Student *)malloc(sizeof(Student));
s->id = id;
strncpy(s->name, name, MAX_NAME_LENGTH);
s->age = age;
s->next = NULL;
return s;
}
// 在链表末尾插入一个新的学生节点
void insert_student(Student *head, Student *s) {
while (head->next != NULL) {
head = head->next;
}
head->next = s;
}
// 输出学生链表中的信息
void print_students(Student *head) {
while (head->next != NULL) {
head = head->next;
printf("学号:%d,姓名:%s,年龄:%d\n", head->id, head->name, head->age);
}
}
int main() {
// 创建带头结点的学生链表
Student *head = new_student(0, "", 0);
// 插入若干个学生节点
insert_student(head, new_student(1001, "张三", 20));
insert_student(head, new_student(1002, "李四", 21));
insert_student(head, new_student(1003, "王五", 22));
// 输出学生链表中的信息
print_students(head);
// 释放链表中的所有节点
Student *p = head;
while (p != NULL) {
Student *q = p;
p = p->next;
free(q);
}
return 0;
}
```
执行上述代码后,会输出以下结果:
```
学号:1001,姓名:张三,年龄:20
学号:1002,姓名:李四,年龄:21
学号:1003,姓名:王五,年龄:22
```
这个程序使用了后插法建立了一个带头结点的学生链表,并将链表中的所有学生信息输出到了屏幕上。如果您有其他问题,欢迎随时提出。
阅读全文