创建一个这样的矩阵
数据由我们插入(定位坐标行列及插入的数据)
代码如下:
思路:将每个坐标节点和我们插入的节点坐标做对比,如果行列坐标都相等,则value置1并输出其相应的数据,否则value还是为0,value为0 的坐标节点数据全都为0,此代码是将每个节点与(1,1,1),(2,3,5),(3,1,3)(行,列,数据)三个给定的节点坐标作对比,行列坐标对应则将数据代入。
#include<stdio.h>
#define number 3
typedef struct { //定义结构体,i=行坐标,j=列坐标 data=数据 int i,j;int data;
}triple; //将triple代表结构体
typedef struct { //定义结构体 triple data[number]; //包含了坐标数据结构体 存储该矩阵中所有非0元素的三元组int n,m,num; //n和m分别记录矩阵的行数和列数,num记录矩阵中所有的非0元素的个数
}TSMatrix;
//输出存储的稀疏矩阵
void display(TSMatrix M); //声明函数
int main() { TSMatrix M; //创建矩阵 M M.m=3; //矩阵是个 3*3 的大小 M.n=3;M.num=3; //非0元素有3个 M.data[0].i=1; //插入坐标数据 1,1 1 M.data[0].j=1;M.data[0].data=1;M.data[1].i=2; //插入坐标数据 2,3 5 M.data[1].j=3;M.data[1].data=5;M.data[2].i=3; //插入坐标数据 3,1 3 M.data[2].j=1;M.data[2].data=3;display(M); //输出矩阵 return 0;
}
void display(TSMatrix M){ //输出矩阵 for(int i=1;i<=M.n;i++){ //行坐标 for(int j=1;j<=M.m;j++){ //列坐标 int value =0; //定义一个值为0 for(int k=0;k<M.num;k++){ //三个取定的数据进行对比 if(i == M.data[k].i && j == M.data[k].j){ //数据对比 坐标对上的话 printf("%d ",M.data[k].data); //给该坐标赋值 value =1; //将值置1 break; //停止对比 }}if(value == 0)) //如果对比下来值没有变化则表示该坐标没有数据 printf("0 "); //该坐标为0 }printf("\n"); //一行对比完后换行 }
}
运行结果: