链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。以下是一个简单的C语言程序,演示了如何实现链表的基本操作,包括创建、插入、查找、遍历、删除和释放节点。
```c
include include // 定义链表节点结构体 typedef struct Node { int data; struct Node *next; } Node; // 创建新节点 Node* createNode(int data) { Node *newNode = (Node *)malloc(sizeof(Node)); if (newNode == NULL) { printf("Memory allocation failed\n"); exit(1); } newNode->data = data; newNode->next = NULL; return newNode; } // 插入节点到链表头部 void insertAtHead(Node head, int data) { Node *newNode = createNode(data); newNode->next = *head; *head = newNode; } // 遍历链表并打印节点数据 void traverseList(Node *head) { Node *temp = head; while (temp != NULL) { printf("%d -> ", temp->data); temp = temp->next; } printf("NULL\n"); } // 删除链表中的节点 void deleteNode(Node head, int key) { Node *temp = *head; Node *prev = NULL; // 如果头节点是要删除的节点 if (temp != NULL && temp->data == key) { *head = temp->next; free(temp); return; } // 查找要删除的节点 while (temp != NULL && temp->data != key) { prev = temp; temp = temp->next; } // 如果节点不存在 if (temp == NULL) return; // 删除节点 prev->next = temp->next; free(temp); } // 释放链表内存 void freeList(Node *head) { Node *temp = head; while (head != NULL) { temp = head; head = head->next; free(temp); } } int main() { Node *head = NULL; // 创建链表并插入节点 insertAtHead(&head, 3); insertAtHead(&head, 2); insertAtHead(&head, 1); // 遍历并打印链表 traverseList(head); // 删除节点 deleteNode(&head, 2); // 再次遍历并打印链表 traverseList(head); // 释放链表内存 freeList(head); return 0; } ``` 代码说明: 定义了一个链表节点结构体 `Node`,包含一个整数数据 `data` 和一个指向下一个节点的指针 `next`。 `createNode` 函数用于创建一个新节点并返回其指针。 `insertAtHead` 函数用于在链表头部插入一个新节点。 `traverseList` 函数用于遍历链表并打印每个节点的数据。 `deleteNode` 函数用于从链表中删除一个指定数据的节点。 `freeList` 函数用于释放链表占用的所有内存。 这个程序展示了链表的基本操作,并可以在CentOS操作系统环境下使用gcc编译器进行编译和运行。结构体定义:
创建节点:
插入节点:
遍历链表:
删除节点:
释放链表: