用c语言编写动态链表建立输出求数值型数据平均值搜索相应目标并输出,插入删除结点"
时间: 2024-09-10 17:06:06 浏览: 46
C语言数据结构实现链表逆序并输出
在C语言中,动态链表是一种常见的数据结构,用于在运行时动态地分配和管理内存。以下是一个简化的例子,展示了如何用C语言编写一个动态链表程序,实现创建链表、输出数据、计算平均值、搜索节点、插入节点和删除节点的功能。
首先,定义链表节点的结构体:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
exit(0); // 分配内存失败,退出程序
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 向链表中插入节点
void insertNode(Node** head, int data) {
Node* newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
// 删除链表中的节点
void deleteNode(Node** head, int key) {
Node* temp = *head, *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);
}
// 搜索链表中的节点
Node* searchNode(Node* head, int key) {
Node* current = head;
while (current != NULL) {
if (current->data == key) {
return current;
}
current = current->next;
}
return NULL;
}
// 计算链表中所有数值的平均值
float calculateAverage(Node* head) {
int sum = 0, count = 0;
Node* current = head;
while (current != NULL) {
sum += current->data;
count++;
current = current->next;
}
return count ? (float)sum / count : 0;
}
// 打印链表
void printList(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
// 释放链表内存
void freeList(Node* head) {
Node* temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
Node* head = NULL;
// 假设这里是一些动态插入节点的操作
insertNode(&head, 1);
insertNode(&head, 2);
insertNode(&head, 3);
insertNode(&head, 4);
insertNode(&head, 5);
// 打印链表
printf("链表: ");
printList(head);
// 计算平均值
printf("平均值: %f\n", calculateAverage(head));
// 搜索节点
int key = 3;
Node* searchResult = searchNode(head, key);
if (searchResult != NULL) {
printf("找到节点: %d\n", searchResult->data);
} else {
printf("未找到节点: %d\n", key);
}
// 删除节点
deleteNode(&head, 2);
printf("删除节点2后的链表: ");
printList(head);
// 清理链表内存
freeList(head);
return 0;
}
```
这个程序包含了动态链表操作的基本函数,以及一个简单的main函数来演示这些功能的使用。程序首先创建一个链表,然后插入几个节点,打印链表内容,计算平均值,搜索特定数值的节点,删除一个节点,最后清理分配的内存。
阅读全文