在学生结构体struct Student基础上,增加struct Student* next成员。并以新的学生结构体struct Student类型为结点,使用malloc函数动态建立单链表。程序结束前使用free函数释放单链表所有结点。
时间: 2024-03-25 18:37:31 浏览: 59
数据结构关于单链表的一个小程序
好的,我来解答你的问题。
首先,我们需要定义一个包含姓名、学号和下一节点指针的结构体 `struct Student`,代码如下:
```c
struct Student {
char name[20];
int id;
struct Student* next;
};
```
接下来,我们需要使用 `malloc` 函数来动态分配内存,创建链表。链表的头节点可以用一个指向 `struct Student` 类型的指针来表示。
```c
int main() {
struct Student* head = NULL;
struct Student* p = NULL;
int n;
printf("请输入链表长度: ");
scanf("%d", &n);
// 创建链表
for (int i = 0; i < n; i++) {
struct Student* node = (struct Student*)malloc(sizeof(struct Student));
printf("请输入第%d个学生的姓名和学号: ", i + 1);
scanf("%s%d", node->name, &node->id);
node->next = NULL;
if (head == NULL) {
head = node;
p = head;
} else {
p->next = node;
p = p->next;
}
}
// 打印链表
p = head;
while (p != NULL) {
printf("姓名: %s, 学号: %d\n", p->name, p->id);
p = p->next;
}
// 释放链表
p = head;
while (p != NULL) {
struct Student* tmp = p;
p = p->next;
free(tmp);
}
return 0;
}
```
在上面的代码中,我们首先定义了链表的头指针 `head` 和一个指向当前节点的指针 `p`。然后,我们使用 `malloc` 函数来动态分配内存,创建一个新的节点,并将其加入链表中。如果链表还没有头节点,我们就把新节点作为头节点,否则就把新节点添加到链表的末尾。
创建完链表后,我们遍历链表并打印每个节点的信息。最后,我们释放链表中的所有节点,防止内存泄漏。
希望我的回答对你有所帮助!
阅读全文