使用头插法建立一个带头结点的存储学生信息的单链表
时间: 2023-11-08 22:03:55 浏览: 101
好的,我可以帮你回答这个问题。
首先,我们需要定义一个结构体来表示学生信息,例如:
```c
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
struct student *next; // 指向下一个节点的指针
} Student;
```
然后,我们可以定义一个头结点,并初始化它的 next 指针为 NULL,表示初始时链表为空。代码如下:
```c
Student *head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 初始化next指针为NULL
```
现在,我们可以开始向链表中插入节点了。假设我们有一个学生信息为 stu 的结构体,代码如下:
```c
Student *stu = (Student*)malloc(sizeof(Student)); // 创建新节点
stu->id = 1001; // 假设学号为1001
strcpy(stu->name, "张三"); // 假设姓名为张三
stu->age = 20; // 假设年龄为20
```
接下来,我们使用头插法将这个节点插入到链表中。具体做法是将新节点的 next 指针指向头结点的下一个节点,然后将头结点的 next 指针指向新节点。代码如下:
```c
stu->next = head->next; // 将新节点的next指针指向头结点的下一个节点
head->next = stu; // 将头结点的next指针指向新节点
```
这样,我们就成功地将一个新节点插入到了带头结点的单链表中。完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
struct student *next; // 指向下一个节点的指针
} Student;
int main() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 初始化next指针为NULL
// 创建一个新节点,并初始化其数据
Student *stu = (Student*)malloc(sizeof(Student));
stu->id = 1001;
strcpy(stu->name, "张三");
stu->age = 20;
// 将新节点插入到链表中
stu->next = head->next;
head->next = stu;
return 0;
}
```
希望这个例子对你有所帮助。如果你有其他问题,可以继续问我。
阅读全文