十字链表储存求元素平均值C语言完整代码
时间: 2024-11-08 07:01:19 浏览: 33
十字链表是一种特殊的链表结构,它在每个节点除了常规的数据域和指向下一个节点的指针外,还额外包含一个指向上一个节点的指针,这使得数据访问更快,尤其适用于需要频繁插入和删除元素的情况。不过,直接计算元素平均值并不是十字链表特有的优势,因为它仍然需要遍历整个列表。
这里是一个简单的C语言代码示例,使用普通单链表存储整数并计算平均值:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
struct Node* prev; // 上一个节点指针
} Node;
// 创建新节点
Node* create_node(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
newNode->prev = NULL;
return newNode;
}
// 添加元素到链表尾部
void append_to_list(Node** head, int value) {
Node* newNode = create_node(value);
if (newNode != NULL && *head == NULL) {
*head = newNode;
} else if (newNode != NULL) {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
newNode->prev = current;
}
}
// 计算平均值
double calculate_average(Node* head) {
double sum = 0.0;
int count = 0;
Node* temp = head;
while (temp != NULL) {
sum += temp->data;
count++;
temp = temp->next;
}
return count > 0 ? sum / count : 0.0; // 防止除以零
}
int main() {
Node* listHead = NULL;
int values[] = {5, 10, 15, 20, 25};
for (int i = 0; i < sizeof(values) / sizeof(values[0]); i++) {
append_to_list(&listHead, values[i]);
}
double avg = calculate_average(listHead);
printf("Average of the elements in the list is: %.2f\n", avg);
return 0;
}
```
阅读全文