链表的程序是什么

时间:2025-01-25 08:28:29 手机游戏

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。以下是一个简单的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编译器进行编译和运行。