欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C语言的链表的操作,及其C语言的实现代码

C语言的链表的操作,及其C语言的实现代码

2025/1/30 15:21:38 来源:https://blog.csdn.net/kuixiang_yin/article/details/143426807  浏览:    关键词:C语言的链表的操作,及其C语言的实现代码

在C语言中,链表是一种重要的数据结构。常见的链表操作有以下几种:

  1. 创建链表节点
  2. 初始化链表
  3. 插入节点
  4. 删除节点
  5. 查找节点
  6. 更新节点
  7. 遍历链表
  8. 销毁链表

以下是每个操作的实现代码。假设使用单链表,每个节点包含一个整数数据和指向下一个节点的指针。

1. 创建链表节点

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
} Node;// 创建新节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (!newNode) {printf("内存分配失败\n");exit(1);}newNode->data = data;newNode->next = NULL;return newNode;
}

2. 初始化链表(创建空链表)

链表初始化通常通过将头指针设置为NULL来实现。

Node* initializeList() {return NULL; // 返回空链表
}

3. 插入节点

可以在链表的头部、尾部或指定位置插入节点。以下示例是在链表头部插入节点。

// 在链表头部插入节点
Node* insertAtHead(Node* head, int data) {Node* newNode = createNode(data);newNode->next = head;return newNode; // 返回新的头节点
}

4. 删除节点

删除链表中具有指定值的节点。

// 删除指定值的节点
Node* deleteNode(Node* head, int data) {if (head == NULL) return NULL;Node* temp = head;if (head->data == data) {head = head->next;free(temp);return head;}Node* prev = NULL;while (temp != NULL && temp->data != data) {prev = temp;temp = temp->next;}if (temp == NULL) return head; // 没找到节点prev->next = temp->next;free(temp);return head;
}

5. 查找节点

查找具有指定值的节点。

// 查找链表中的节点
Node* searchNode(Node* head, int data) {Node* current = head;while (current != NULL) {if (current->data == data) {return current;}current = current->next;}return NULL; // 没找到节点
}

6. 更新节点

修改链表中具有指定值的节点的数据。

// 更新指定节点的值
void updateNode(Node* head, int oldData, int newData) {Node* targetNode = searchNode(head, oldData);if (targetNode != NULL) {targetNode->data = newData;} else {printf("节点未找到\n");}
}

7. 遍历链表

遍历并打印链表中的每个节点。

// 遍历链表
void traverseList(Node* head) {Node* current = head;while (current != NULL) {printf("%d -> ", current->data);current = current->next;}printf("NULL\n");
}

8. 销毁链表

释放链表占用的内存。

// 销毁链表
void destroyList(Node* head) {Node* current = head;while (current != NULL) {Node* nextNode = current->next;free(current);current = nextNode;}
}

完整示例

int main() {Node* head = initializeList();// 插入节点head = insertAtHead(head, 10);head = insertAtHead(head, 20);head = insertAtHead(head, 30);// 遍历链表printf("链表内容: ");traverseList(head);// 查找节点Node* found = searchNode(head, 20);if (found) printf("找到节点: %d\n", found->data);// 更新节点updateNode(head, 20, 25);printf("更新后的链表: ");traverseList(head);// 删除节点head = deleteNode(head, 10);printf("删除后的链表: ");traverseList(head);// 销毁链表destroyList(head);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com