使用后插法建立一个带头结点的存储学生信息的单链表,并将建立后的学生链表中的信息输出到屏幕上,学生的结构体类型可自行定义。
时间: 2024-03-22 11:41:22 浏览: 62
好的,我来为您解答。
首先,需要定义学生结构体类型,如下所示:
```c
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
struct student *next; // 指向下一个结点的指针
} Student;
```
然后,可以编写一个函数来创建带头结点的单链表,并返回头指针。函数代码如下:
```c
Student *createList() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 头结点的 next 指针置为 NULL
Student *cur = head; // cur 指向当前结点,初始时指向头结点
// 循环读入学生信息,直到输入 -1 停止
while (1) {
int id;
char name[20];
int age;
scanf("%d", &id);
if (id == -1) {
break;
}
scanf("%s%d", name, &age);
// 创建新结点并赋值
Student *newNode = (Student*)malloc(sizeof(Student));
newNode->id = id;
strcpy(newNode->name, name);
newNode->age = age;
newNode->next = NULL;
// 将新结点插入到链表尾部
cur->next = newNode;
cur = newNode;
}
return head; // 返回头指针
}
```
最后,编写一个函数来遍历链表并输出学生信息。函数代码如下:
```c
void printList(Student *head) {
Student *cur = head->next; // cur 指向第一个结点
while (cur != NULL) {
printf("%d %s %d\n", cur->id, cur->name, cur->age);
cur = cur->next; // cur 指向下一个结点
}
}
```
完整代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
struct student *next; // 指向下一个结点的指针
} Student;
Student *createList() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 头结点的 next 指针置为 NULL
Student *cur = head; // cur 指向当前结点,初始时指向头结点
// 循环读入学生信息,直到输入 -1 停止
while (1) {
int id;
char name[20];
int age;
scanf("%d", &id);
if (id == -1) {
break;
}
scanf("%s%d", name, &age);
// 创建新结点并赋值
Student *newNode = (Student*)malloc(sizeof(Student));
newNode->id = id;
strcpy(newNode->name, name);
newNode->age = age;
newNode->next = NULL;
// 将新结点插入到链表尾部
cur->next = newNode;
cur = newNode;
}
return head; // 返回头指针
}
void printList(Student *head) {
Student *cur = head->next; // cur 指向第一个结点
while (cur != NULL) {
printf("%d %s %d\n", cur->id, cur->name, cur->age);
cur = cur->next; // cur 指向下一个结点
}
}
int main() {
Student *head = createList(); // 创建链表并返回头指针
printList(head); // 遍历链表并输出学生信息
return 0;
}
```
以上就是使用后插法建立一个带头结点的存储学生信息的单链表,并将建立后的学生链表中的信息输出到屏幕上的方法。
阅读全文