在C语言中,链表是一种常见的数据结构,用于存储一系列元素,每个元素(称为节点)包含数据和指向下一个节点的指针。下面是一个简单的链表实现示例,包括创建节点、插入节点、删除节点和打印链表的基本操作。
链表节点的定义
首先,定义链表节点的结构体:
```c
typedef struct Node {
int data; // 存储数据
struct Node* next; // 指向下一个节点的指针
} Node;
```
创建新节点
创建一个新节点的函数:
```c
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
```
插入节点
将新节点插入到链表尾部的函数:
```c
void insertNode(Node head, int data) { Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; return; } Node* temp = *head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } ``` 删除节点 从链表中删除节点的函数(以删除第一个节点为例): ```c void deleteFirstNode(Node
if (*head == NULL) {
printf("List is empty, nothing to delete.\n");
return;
}
Node* temp = *head;
*head = (*head)->next;
free(temp);
}
```
打印链表
打印链表中所有节点的函数:
```c
void printList(Node* head) {
Node* ptr = head;
printf("[");
while (ptr != NULL) {
printf("(%d)", ptr->data);
if (ptr->next != NULL) {
printf(", ");
}
ptr = ptr->next;
}
printf("]\n");
}
```
主函数示例
在主函数中,可以创建链表,插入节点,打印链表,然后删除节点:
```c
int main() {
Node* head = NULL;
// 插入节点
insertNode(&head, 10);
insertNode(&head, 20);
insertNode(&head, 30);
// 打印链表
printList(head);
// 删除节点
deleteFirstNode(&head);
// 打印链表
printList(head);
return 0;
}
```
内存管理
在使用`malloc`分配内存后,记得在适当的时候使用`free`释放内存,以避免内存泄漏。
总结
以上示例展示了C语言中链表的基本实现。链表适用于需要动态插入和删除元素的场景,相比数组,链表不需要预先指定大小,因此在处理不确定数量的数据时非常有用。在实际编程中,链表的操作需要特别注意内存管理,确保所有分配的内存都被正确释放。