首页 > 编程笔记
C语言链表
C语言中的链表是一种非常重要的数据结构,它可以动态地分配内存空间,实现高效的数据操作。链表由一系列的节点构成,每个节点包含了数据和一个指向下一个节点的指针。在本文中,我们将详细介绍 C语言链表的实现方法,同时提供完整的源代码和运行结果。
链表的优点是可以动态地分配内存空间,可以在程序运行时动态地添加或删除节点,而且不会浪费内存空间。但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。
但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。在实际开发中,需要根据实际情况选择使用链表还是其他数据结构。
链表的基本概念
链表是由若干个节点组成的数据结构,每个节点包含两部分:数据和指向下一个节点的指针。链表中的节点可以是任意类型的数据,通常使用结构体来表示。在 C语言中,定义一个链表节点的结构体如下:struct ListNode { int data; // 节点数据 struct ListNode* next; // 指向下一个节点的指针 };链表中的第一个节点称为头节点,最后一个节点称为尾节点。头节点和尾节点都没有数据,只是为了方便操作而设置的。在链表中插入一个节点,就是将新节点插入到某个节点之后,删除一个节点,就是将该节点从链表中删除,并将其前一个节点的指针指向该节点的下一个节点。
链表的优点是可以动态地分配内存空间,可以在程序运行时动态地添加或删除节点,而且不会浪费内存空间。但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。
链表的实现
下面是 C语言中链表的实现代码,其中包括链表的创建、插入、删除、遍历等操作。我们使用一个简单的整数链表作为例子,完整的源代码如下:#include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 struct ListNode { int data; struct ListNode* next; }; // 创建链表 struct ListNode* createList() { struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)); head->next = NULL; return head; } // 在链表尾部插入一个节点 void insertNode(struct ListNode* head, int data) { struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode)); newNode->data = data; newNode->next = NULL; struct ListNode* p = head; while (p->next != NULL) { p = p->next; } p->next = newNode; } // 删除一个节点 void deleteNode(struct ListNode* head, int data) { struct ListNode* p = head->next; struct ListNode* pre = head; while (p != NULL) { if (p->data == data) { pre->next = p->next; free(p); return; } pre = p; p = p->next; } } // 遍历链表 void traverseList(struct ListNode* head) { struct ListNode* p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { // 创建链表 struct ListNode* head = createList(); // 在链表尾部插入节点 insertNode(head, 1); insertNode(head, 2); insertNode(head, 3); insertNode(head, 4); insertNode(head, 5); // 遍历链表 traverseList(head); // 删除节点 deleteNode(head, 3); // 遍历链表 traverseList(head); return 0; }运行结果如下:
1 2 3 4 5
1 2 4 5
总结
链表是一种非常重要的数据结构,在 C语言中实现链表也是非常常见的。链表的优点是可以动态地分配内存空间,实现高效的数据操作。但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。在实际开发中,需要根据实际情况选择使用链表还是其他数据结构。