二维数组可以来存放矩阵中的元素,比如int text[][5] = {{0,5,6,0,4},{0,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{0,2,0,0,1}}; 但是这个矩阵,五行五列,可以包含二十五个元素,但是此矩阵只有七个元素。但是我们在存放数据的时候分配了二十五块int单元。这样是不是有点太浪费了。如果我们只存储这七个元素我想会节省一部分内存空间。但是如果我们只存储矩阵中的元素还是不行的,因为只有元素我们就无法还原矩阵,我们还需要此元素的行列值。我们声明一个结构体来表示一个元素。就像这样: typedef struct juzhen { int row; //行 int col; //列 int value; //元素值 }; 如果矩阵的行列是一个很大的值,而且又是稀疏矩阵,这样做就可以节省很大的空间。这种存储结构只限于稀疏矩阵。 请用此结构体来存储稀疏矩阵并进行矩阵的转置。结构体数组第一个元素存储矩阵的总行数,总列数和总元素个数,分别对应row,col,value. 程序的总体结构如下: 不考虑输入错误的情况。 #define MAX_TERM 80// 结构体数组最大长度 struct juzhen a[MAX_TERM]; //存放矩阵中元素数值不为零的元素 struct juzhen b[MAX_TERM]; //转置后的矩阵 void show(struct juzhen a[],int count_a) //显示稀疏矩阵方法 { printf(" i row col val\n"); printf(" %d| %d %d %d\n"); } void zhuanzhi(struct juzhen a[],struct juzhen b[]) //转置矩阵方法 void init(struct juzhen a[],int rows, int cols,int count) //初始化稀疏矩阵 int main(void) { printf("please input the number of rows,cols and values\n"); scanf("%d,%d,%d"); init(); show(); printf("\n"); zhuanzhi(); show(); } 程序运行如下: please input the number of rows,cols and values 2,2,2 please input the row,col and value 0,1,1 please input the row,col and value 1,0,2 i row col val 1| 0 1 1 2| 1 0 2 i row col val 1| 0 1 2 2| 1 0 1

时间: 2023-12-09 18:06:38 浏览: 42
下面是使用稀疏矩阵结构体进行存储和转置的代码: ```c #include <stdio.h> #define MAX_TERM 80 // 结构体数组最大长度 struct juzhen { int row; // 行 int col; // 列 int value; // 元素值 }; void show(struct juzhen a[], int count_a) { // 显示稀疏矩阵方法 printf(" i row col val\n"); for (int i = 0; i <= count_a; i++) { printf(" %d| %d %d %d\n", i, a[i].row, a[i].col, a[i].value); } } void zhuanzhi(struct juzhen a[], struct juzhen b[]) { // 转置矩阵方法 int rows = a[0].row; int cols = a[0].col; int count = a[0].value; b[0].row = cols; b[0].col = rows; b[0].value = count; if (count == 0) { // 如果矩阵中元素数为0,则不需要转置 return; } int row_terms[cols + 1]; // 存储每一列中元素的个数 int start_pos[cols + 1]; // 存储每一列中第一个元素在b数组中的位置 // 统计每一列中元素的个数 for (int i = 1; i <= cols; i++) { row_terms[i] = 0; } for (int i = 1; i <= count; i++) { row_terms[a[i].col]++; } // 计算每一列中第一个元素在b数组中的位置 start_pos[1] = 1; for (int i = 2; i <= cols; i++) { start_pos[i] = start_pos[i - 1] + row_terms[i - 1]; } // 转置矩阵 for (int i = 1; i <= count; i++) { int j = start_pos[a[i].col]++; b[j].row = a[i].col; b[j].col = a[i].row; b[j].value = a[i].value; } } void init(struct juzhen a[], int rows, int cols, int count) { // 初始化稀疏矩阵 int index = 1; a[0].row = rows; a[0].col = cols; a[0].value = count; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { int value; scanf("%d", &value); if (value != 0) { a[index].row = i; a[index].col = j; a[index].value = value; index++; } } } } int main(void) { int rows, cols, count; printf("please input the number of rows,cols and values\n"); scanf("%d,%d,%d", &rows, &cols, &count); init(a, rows, cols, count); show(a, count); printf("\n"); zhuanzhi(a, b); show(b, b[0].value); return 0; } ``` 这里使用了两个稀疏矩阵结构体数组,一个用于存储原始矩阵中元素值不为0的元素,另一个用于存储转置后的矩阵。在转置矩阵函数中,首先统计每一列中元素的个数,然后计算每一列中第一个元素在b数组中的位置,最后进行矩阵转置。

相关推荐

最新推荐

recommend-type

Python二维数组实现求出3*3矩阵对角线元素的和示例

今天小编就为大家分享一篇Python二维数组实现求出3*3矩阵对角线元素的和示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C语言中二维数组作为函数参数来传递的三种方法

主要给大家介绍了关于C语言中二维数组作为函数参数来传递的三种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
recommend-type

Lua中使用二维数组实例

主要介绍了Lua中使用二维数组实例,本文直接给出代码实例,看代码更容易理解,需要的朋友可以参考下
recommend-type

python中字符串变二维数组的实例讲解

下面小编就为大家分享一篇python中字符串变二维数组的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

python矩阵转换为一维数组的实例

今天小编就为大家分享一篇python矩阵转换为一维数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。