用C语言编写程序利用链表的插入用算法建立线性链表,然后利用链表的查找,删除、计数、输出等 运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并 能在屏幕上输出操作前后的结果。
时间: 2023-12-13 10:04:41 浏览: 72
C语言实现带头结点的链表的创建、查找、插入、删除操作
以下是一个简单的用C语言实现链表的例子,包括插入、删除、查找、计数、输出等操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 插入节点
void insertNode(struct Node** headRef, int data) {
// 创建新节点
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
// 如果链表为空,则新节点为头节点
if (*headRef == NULL) {
*headRef = newNode;
}
// 否则,在链表末尾添加新节点
else {
struct Node* lastNode = *headRef;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
printf("节点 %d 插入成功\n", data);
}
// 查找节点
struct Node* findNode(struct Node* head, int data) {
struct Node* currNode = head;
while (currNode != NULL) {
if (currNode->data == data) {
printf("节点 %d 找到了\n", data);
return currNode;
}
currNode = currNode->next;
}
printf("节点 %d 没有找到\n", data);
return NULL;
}
// 删除节点
void deleteNode(struct Node** headRef, int data) {
// 如果链表为空,则无法删除节点
if (*headRef == NULL) {
printf("链表为空,无法删除节点\n");
return;
}
// 如果要删除的节点为头节点,则将头指针指向下一个节点
if ((*headRef)->data == data) {
struct Node* temp = *headRef;
*headRef = (*headRef)->next;
free(temp);
printf("节点 %d 删除成功\n", data);
return;
}
// 在链表中查找要删除的节点
struct Node* prevNode = *headRef;
struct Node* currNode = (*headRef)->next;
while (currNode != NULL) {
if (currNode->data == data) {
prevNode->next = currNode->next;
free(currNode);
printf("节点 %d 删除成功\n", data);
return;
}
prevNode = currNode;
currNode = currNode->next;
}
printf("节点 %d 没有找到,无法删除\n", data);
}
// 计算节点数量
int countNodes(struct Node* head) {
int count = 0;
struct Node* currNode = head;
while (currNode != NULL) {
count++;
currNode = currNode->next;
}
printf("链表中共有 %d 个节点\n", count);
return count;
}
// 输出链表
void printList(struct Node* head) {
printf("链表中的节点:");
struct Node* currNode = head;
while (currNode != NULL) {
printf(" %d", currNode->data);
currNode = currNode->next;
}
printf("\n");
}
int main() {
// 初始化链表头节点
struct Node* head = NULL;
// 插入节点
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
// 查找节点
findNode(head, 2);
findNode(head, 4);
// 删除节点
deleteNode(&head, 1);
deleteNode(&head, 4);
// 计算节点数量
countNodes(head);
// 输出链表
printList(head);
return 0;
}
```
在上述代码中,我们定义了一个 `Node` 结构体,表示链表的节点,包含一个整型数据和一个指向下一个节点的指针。然后,我们实现了插入节点、查找节点、删除节点、计算节点数量和输出链表等操作。在 `main` 函数中,我们演示了如何使用这些操作来对链表进行操作。
阅读全文