稀疏矩阵
对于稀疏矩阵,采用压缩存储方法时,只存储非0元素。必须存储非0元素的行下标值、列下标值、元素值。因此,一个三元组(i, j, aij)唯一确定稀疏矩阵的一个非零元素。
若以行序为主序,稀疏矩阵中所有非0元素的三元组,就可得构成该稀疏矩阵的一个三元组顺序表。
代码:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define MAXstrlen 255
typedef int Status;
typedef int ElemType;
typedef struct{
int row; //行下标
int col; //列下标
ElemType value; //元素值
}Triple;
typedef struct{
int rn; //行数
int cn; //列数
int tn; //元素值
Triple data[MAXSTRLEN];
}TMatrix;
void TransMatrix(TMatrix A, TMatrix *B){
int p, q, col;
B->cn = A.rn;
B->rn = A.cn;
B->tn = A.tn;
if(A.tn == 0)
printf("A表为空表");
q = 0;
for(col = 0; col < A.tn; col++){
//A的列数 一列一列变成B的行数
for(p = 0; p < A.tn; p++){
//循环次数是非零元素的个数
if(A.data[p].col == col){
B->data[q].row = A.data[p].col;
B->data[q].col = A.data[p].row;
B->data[q].value = A.data[p].value;
q++;
}
}
}
}
int main()
{
TMatrix A, B;
int i, j, e;
int k = 0;
printf("输入三元组 矩阵(行数,列数,值)\n");
//EOF 输入结束 下一行Ctrl+z enter
while(scanf("%d%d%d", &i,&j,&e) != EOF ){
A.data[k].row = i -1;
A.data[k].col = j-1;
A.data[k].value = e;
k++;
A.tn = k;
}
printf("矩阵为\n");
for(i = 0; i < A.tn; i++){
printf("%3d%3d%3d\n", A.data[i].row+1, A.data[i].col+1, A.data[i].value);
} printf("转置后:\n");
TransMatrix(A, &B);
for(i = 0; i < B.tn; i++){
printf("%3d%3d%3d\n", B.data[i].row+1, B.data[i].col+1, B.data[i].value);
}
return 0;
}
结果:
文章最后发布于: 2018-11-16 17:02:08
相关阅读
(额外补充:因为CSDN的编辑器现在对公式不太友好,所以公式都使用的图片。因为时间问题matlab代码已经找不到了,只保留了python代码。代
待办事项是我们做时间管理时一个很好的工具,那么我们如何用Axure做一个待办事项列表呢?这就要用到中继器这个功能。中继器在英文里r
三线表一般多见于教科书及一些科研杂志中,在日常生活中制作部分表格也会需要它。三线表能使内容清新的表达出来,从而使人迅速领会到
本质上是一个匿名的方法: 先看下面这个例子,一个传统的方法 `public int add(int x,int y){ return x+y; }` 转换为Lambd
Response.setContentType(MIME)的作用及参数列表
Response.setContentType(MIME)的作用是时客户端的浏览器区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来