我们事先输入一个稀疏矩阵的行列数,随机产生一个稀疏矩阵。 再设计另一个大小为MAXSIZE *3的新数组来存储压缩后的数据。 我们利用一个两层的循环,遍历原数组中的每一笔数据。 当数据内容不为零时,则记录其列数、行数及内容于新数组中。用c语言编程。
时间: 2024-12-21 09:29:25 浏览: 40
在C语言中,我们可以按照以下步骤创建和操作稀疏矩阵:
1. 定义结构体(struct)用于表示矩阵中的非零元素,包含行索引(row)、列索引(col)和值(value):
```c
typedef struct {
int row;
int col;
double value;
} SparseElement;
```
2. 初始化变量,包括原矩阵的行数(m),列数(n),以及预设的最大尺寸(MAXSIZE):
```c
int m, n, MAXSIZE;
SparseElement* compressedData = malloc(MAXSIZE * 3 * sizeof(SparseElement));
```
3. 使用`malloc`动态分配存储压缩后数据的空间。
4. 遍历原稀疏矩阵,如果元素值不为零,将其添加到压缩数据数组中:
```c
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (sparseMatrix[i][j] != 0) {
SparseElement newEntry = {i, j, sparseMatrix[i][j]};
// 检查是否需要扩展数组容量
if (currentSize >= MAXSIZE * 3) {
// 如果已满,先释放旧数组并扩大一倍
SparseElement* temp = realloc(compressedData, (MAXSIZE * 6) * sizeof(SparseElement));
if (!temp) {
printf("Memory allocation failed.\n");
exit(1);
}
compressedData = temp;
MAXSIZE *= 2;
}
// 将新元素添加到数组的当前索引位置
compressedData[currentSize++] = newEntry;
}
}
}
```
5. 在完成遍历后,记得更新`compressedData`指针指向新数组的起始位置。
阅读全文
相关推荐


















