C语言链表

C语言链表

C语言中的链表是一种非常重要的数据结构,它可以动态地分配内存空间,实现高效的数据操作。链表由一系列的节点构成,每个节点包含了数据和一个指向下一个节点的指针。在本文中,我们将详细介绍 C语言链表的实现方法,同时提供完整的源代码和运行结果。

链表的基本概念

链表是由若干个节点组成的数据结构,每个节点包含两部分:数据和指向下一个节点的指针。链表中的节点可以是任意类型的数据,通常使用结构体来表示。在 C语言中,定义一个链表节点的结构体如下:

struct ListNode {

int data; // 节点数据

struct ListNode* next; // 指向下一个节点的指针

};

链表中的第一个节点称为头节点,最后一个节点称为尾节点。头节点和尾节点都没有数据,只是为了方便操作而设置的。在链表中插入一个节点,就是将新节点插入到某个节点之后,删除一个节点,就是将该节点从链表中删除,并将其前一个节点的指针指向该节点的下一个节点。

链表的优点是可以动态地分配内存空间,可以在程序运行时动态地添加或删除节点,而且不会浪费内存空间。但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。

链表的实现

下面是 C语言中链表的实现代码,其中包括链表的创建、插入、删除、遍历等操作。我们使用一个简单的整数链表作为例子,完整的源代码如下:

#include

#include

// 定义链表节点结构体

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

在这个例子中,我们首先创建了一个空链表,然后插入了 5 个节点,节点的数据分别为 1、2、3、4 和 5。接着,我们遍历了整个链表,输出了每个节点的数据。然后,我们删除了节点 3,并再次遍历了链表,可以看到节点 3 已经被成功删除。

总结

链表是一种非常重要的数据结构,在 C语言中实现链表也是非常常见的。链表的优点是可以动态地分配内存空间,实现高效的数据操作。

但是,链表的缺点是访问节点需要遍历整个链表,效率比较低。在实际开发中,需要根据实际情况选择使用链表还是其他数据结构。

🎈 相关推荐

微博手机如何悄悄关注他人?教你一个小妙招!
365bet外围网站

微博手机如何悄悄关注他人?教你一个小妙招!

📅 07-05 👀 3399
Tankwar坦克战游戏
网彩365平台下载

Tankwar坦克战游戏

📅 07-24 👀 1504
呼噜声那么响,为什么自己听不见?
365bet外围网站

呼噜声那么响,为什么自己听不见?

📅 07-22 👀 7330