设链表结点结构已经给出,试编写链表插入函数Insert将实现链表末尾添加数据,再编写函数Print,实现链表中链表数据打印,编写Destroy函数,实现链表的销毁释放,并在main函数中写出完整的调用过程。 typedef struct node { char Name[20]; struct node *Next; }Node;
时间: 2023-07-11 20:50:25 浏览: 50
好的,我来解答你的问题。
下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 链表结点结构体定义
typedef struct node {
char Name[20];
struct node *Next;
} Node;
// 链表插入函数
void Insert(Node **head, char *name) {
Node *new_node = (Node*)malloc(sizeof(Node)); // 创建新结点
strcpy(new_node->Name, name); // 将数据复制到结点中
new_node->Next = NULL; // 新结点的Next指针指向NULL
if (*head == NULL) { // 如果链表为空
*head = new_node; // 新结点成为头结点
} else { // 如果链表不为空
Node *p = *head;
while (p->Next != NULL) { // 遍历链表,找到最后一个结点
p = p->Next;
}
p->Next = new_node; // 将新结点插入到链表末尾
}
}
// 链表打印函数
void Print(Node *head) {
Node *p = head;
while (p != NULL) { // 遍历链表
printf("%s ", p->Name); // 打印结点中的数据
p = p->Next;
}
printf("\n");
}
// 链表销毁函数
void Destroy(Node **head) {
Node *p = *head;
while (p != NULL) { // 遍历链表
Node *temp = p; // 保存当前结点的地址
p = p->Next; // 移动到下一个结点
free(temp); // 释放当前结点的内存
}
*head = NULL; // 将头结点指针设置为NULL
}
int main() {
Node *head = NULL; // 头结点指针初始化为NULL
// 添加数据
Insert(&head, "Alice");
Insert(&head, "Bob");
Insert(&head, "Charlie");
// 打印链表数据
Print(head); // 输出: Alice Bob Charlie
// 销毁链表
Destroy(&head);
return 0;
}
```
在主函数中,我们首先将头结点指针初始化为NULL,然后调用Insert函数向链表中添加数据。最后调用Print函数打印链表中的数据,并调用Destroy函数销毁链表并释放内存。
注意,在Insert函数中,我们使用了二级指针来修改头结点指针的值,这是因为头结点指针是需要修改的,而如果只使用一级指针,则无法修改头结点指针的值。
以上就是链表插入、打印和销毁的完整代码。希望能对你有所帮助!