用C语言编写链表,并实现链表的初始化,头删,尾插,并使用
时间: 2024-09-07 21:04:33 浏览: 48
C语言双向链表实现根据使用频率安排元素位置的功能实例代码
在C语言中编写链表需要定义节点结构体和相应的操作函数。下面是使用C语言实现链表初始化、头部删除节点、尾部插入节点的基本代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表
Node* initList() {
Node* head = (Node*)malloc(sizeof(Node));
if (head == NULL) {
exit(1); // 分配内存失败,退出程序
}
head->next = NULL; // 初始化为空链表
return head;
}
// 头部删除节点
int deleteHead(Node* head) {
if (head->next == NULL) {
return -1; // 链表为空,无法删除
}
Node* temp = head->next;
head->next = temp->next;
free(temp);
return 0; // 删除成功
}
// 尾部插入节点
void insertTail(Node* head, int value) {
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
exit(1); // 分配内存失败,退出程序
}
newNode->data = value;
newNode->next = NULL;
current->next = newNode;
}
// 打印链表
void printList(Node* head) {
Node* current = head->next; // 跳过头节点
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 主函数演示
int main() {
Node* list = initList(); // 初始化链表
insertTail(list, 10); // 尾部插入节点
insertTail(list, 20);
insertTail(list, 30);
printf("链表初始化并尾部插入后的数据: ");
printList(list); // 打印链表
deleteHead(list); // 头部删除节点
printf("头部删除节点后的数据: ");
printList(list); // 打印链表
// 释放链表内存
Node* current = list;
Node* next;
while (current != NULL) {
next = current->next;
free(current);
current = next;
}
return 0;
}
```
以上代码展示了如何创建一个简单的链表,并实现了初始化、头部删除和尾部插入的功能。注意,链表的使用还应该包括内存的正确释放,以避免内存泄漏。
阅读全文