已知稀疏矩阵采用三元组表压缩存储,试编写算法求稀疏矩阵中所有数的平均数。c语言 用已知结构体 完整代码不分段
时间: 2024-11-12 18:45:54 浏览: 10
以下是完整的C语言代码,用于计算稀疏矩阵中所有非零元素的平均数,假设矩阵已经使用给定的`TSMatrix`结构体进行了存储:
```c
#include <stdio.h>
#include <stdlib.h> // 需要这个头文件来处理内存分配
// 稀疏矩阵结构体定义
typedef struct {
int rows; // 行数
int cols; // 列数
int nums; // 非零元素个数
TupNode* data; // 存储三元组的指针
} TSMatrix;
// 初始化稀疏矩阵
void init_TSMatrix(TSMatrix* mat, int rows, int cols) {
mat->rows = rows;
mat->cols = cols;
mat->data = (TupNode*)malloc(sizeof(TupNode) * MaxSize); // 分配内存
mat->nums = 0;
}
// 添加非零元素到矩阵
void add_element(TSMatrix* mat, int row, int col, int value) {
mat->data[mat->nums].r = row;
mat->data[mat->nums].c = col;
mat->data[mat->nums].d = value;
mat->nums++;
}
// 求所有非零元素的和
double sum_of_elements(TSMatrix mat) {
double sum = 0;
for (int i = 0; i < mat.nums; ++i) {
sum += mat.data[i].d;
}
return sum;
}
// 计算平均数
double calculate_average(TSMatrix mat) {
if (mat.nums == 0) {
return 0; // 空矩阵,无元素平均值为0
} else {
return (double)sum_of_elements(mat) / mat.nums;
}
}
int main() {
// 初始化矩阵
int rows = 5, cols = 6;
TSMatrix sparse_matrix;
init_TSMatrix(&sparse_matrix, rows, cols); // 假设已添加数据
// 示例数据添加
// add_element(&sparse_matrix, 0, 0, 10);
// add_element(&sparse_matrix, 1, 2, 20);
// ... 其他非零元素
// 调用函数计算平均值
double average = calculate_average(sparse_matrix);
printf("稀疏矩阵中所有非零元素的平均数为: %.2f\n", average);
// 清理内存
free(sparse_matrix.data);
return 0;
}
阅读全文