#include <stdio.h>
#include<string.h>
/*-------
实现稀疏矩阵(采用三元组表示)的基本运算
-------------*/
#define N 4
#define MaxSize 100 //矩阵中非零元素的最多个数
//三元组定义: 存储每个非零元素所在位置
typedef struct{
int r; //行号
int c; //列号
int d; //元素值
} TupNode;
//三元组顺序表定义:记录二维数组形态【多少行,多少列】,以及非零元素总个数
typedef struct{
int rows; //行数值
int cols; //列数值
int nums; //非零元素个数
TupNode data[MaxSize];
}TSMatrix;
//产生稀疏矩阵A的三元组表示t
void CreatMat(TSMatrix &t,int A[N][N]){
int i,j;
t.rows=N; //保存数组A的形态
t.cols=N;
t.nums=0;
for(i=0;i<N;i++){ //遍历数组A,记录非0元素个数
for(j=0;j<N;j++)
if(A[i][j] != 0){
t.data[t.nums].r = i; //保存非零元素所在行
t.data[t.nums].c = j; //保存列;此处t.nums可作为当前非零元素对应所在三元组下标
t.data[t.nums].d = A[i][j]; //保存元素值
t.nums++;
}
}
}
//输出三元组表示t
void DispMat(TSMatrix t){
int i;
if(t.nums <= 0)
return;
printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums); //输出行数、列数、非零元素个数
printf("\t--------------------\n");
for(i=0;i<t.nums;i++){
printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);
}
}
int main(){
int a1[N][N] = {{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};
TSMatrix a;
CreatMat(a,a1);
DispMat(a);
return 1;
}
实现稀疏矩阵(采用三元组表示)的基本运算
于 2022-05-04 17:11:53 首次发布