ToB企服应用市场:ToB评测及商务社交产业平台
标题:
C语言中的链表封装
[打印本页]
作者:
玛卡巴卡的卡巴卡玛
时间:
2025-2-20 00:19
标题:
C语言中的链表封装
链表是一种常用的数据结构,在很多应用步伐中都有广泛的应用。它由一系列节点构成,每个节点包罗数据和指向下一个节点的指针。本篇文章将详细先容如何在C语言中实现链表的封装,并提供一些基本的操作函数,如添加元素、删除元素、遍历列表等。
链表的基本概念
链表是一种动态数据结构,它不像数组那样要求连续的内存空间。链表中的每个元素(称为节点)都包罗了实际的数据和一个指向下一个节点的指针。这种结构使得在链表中插入和删除元素变得非常轻易。
链表节点的界说
起首,我们必要界说链表节点的结构体。一个典型的链表节点结构如下:
typedef struct ListNode {
int data; // 存储的数据
struct ListNode *next; // 指向下一个节点的指针
} ListNode;
这里界说了一个名为 `ListNode` 的结构体范例,此中包罗了一个整型数据 `data` 和一个指向相同范例的指针 `next`。
链表的基本操作
接下来我们将界说几个常用的链表操作函数,这些函数将资助我们完成对链表的增编削查等基本操作。
创建空链表
// 创建一个空链表
ListNode *createList() {
return NULL;
}
添加元素到链表尾部
// 在链表尾部添加一个新元素
void appendToList(ListNode **list, int value) {
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
if (*list == NULL) {
*list = newNode;
} else {
ListNode *current = *list;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
从链表中删除元素
// 从链表中删除指定值的节点
void deleteFromList(ListNode **list, int value) {
ListNode *current = *list;
ListNode *previous = NULL;
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
if (current == NULL) {
return; // 没有找到要删除的元素
}
if (previous == NULL) {
*list = current->next;
} else {
previous->next = current->next;
}
free(current); // 开释节点
}
遍历链表并打印全部元素
// 遍历链表并打印全部元素
void printList(ListNode *list) {
ListNode *current = list;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
清空链表
// 清空整个链表
void clearList(ListNode **list) {
ListNode *current = *list;
ListNode *next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
*list = NULL;
}
完整示例代码
现在让我们将上述函数整合到一个完整的示例中,以便展示它们是如何工作的。
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 创建一个空链表
ListNode *createList() {
return NULL;
}
// 在链表尾部添加一个新元素
void appendToList(ListNode **list, int value) {
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
if (*list == NULL) {
*list = newNode;
} else {
ListNode *current = *list;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 从链表中删除指定值的节点
void deleteFromList(ListNode **list, int value) {
ListNode *current = *list;
ListNode *previous = NULL;
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
if (current == NULL) {
return; // 没有找到要删除的元素
}
if (previous == NULL) {
*list = current->next;
} else {
previous->next = current->next;
}
free(current); // 开释节点
}
// 遍历链表并打印全部元素
void printList(ListNode *list) {
ListNode *current = list;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
// 清空整个链表
void clearList(ListNode **list) {
ListNode *current = *list;
ListNode *next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
*list = NULL;
}
int main() {
ListNode *list = createList();
appendToList(&list, 10);
appendToList(&list, 20);
appendToList(&list, 30);
printf("Original List:\n");
printList(list);
deleteFromList(&list, 20);
printf("After Deleting 20:\n");
printList(list);
clearList(&list);
printf("After Clearing the List:\n");
printList(list);
return 0;
}
总结
以上就是关于链表封装的先容。通过本篇文章,你已经学会了如何在C语言中界说链表节点、实现链表的基本操作函数,并且通过一个完整的示例了解了这些函数的使用方法。链表是一种非常灵活的数据结构,把握了这些基本操作之后,你可以根据必要扩展更多的功能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4