数据结构实现稀疏矩阵(采用三元组表示)的基本运算
目的
领会稀疏矩阵三元组存储结构及基本算计运算
内容
假设n*n的稀疏矩阵A采用三元组表示,设计一个程序实现以下功能
- 生成以下两个稀疏矩阵的三元组a和b
- 输出a转置矩阵的三元组
- 输出a+b的三元组
- 输出a*b的三元组
源代码(经VS、decC++编译通过)
#include <stdio.h>
#include <stdbool.h>
#include<stdlib.h>
#define N 4
#define MAX_SIZE 100 // 矩阵中非零元素最多个数
typedef int ElemType;
/*
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;
与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。
*/
/*三元组定义*/
typedef struct
{
int r; /*行号*/
int c; /*列号*/
ElemType d; /*元素值*/
}TupNode;
/*三元组存储结构顺序表定义*/
typedef struct
{
int rows; // 行数值
int cols; // 列数值
int nums; // 非零元素个数
TupNode data[MAX_SIZE];
}TSMatrix;
/*产生稀疏矩阵A的三元组的顺序表存储结构t*/
static void create_matrix(TSMatrix &t, ElemType A[N][N])
{
int i, j;
t.rows = N; /* 行数赋值*/
t.cols = N; /* 列数赋值*/
t.nums = 0; /*非零元素个数初始化*/
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (A[i][j] != 0)
{
t.data[t.nums].r = i; /*行号*/
t.data[t.nums].c = j; /*列号*/
t.data[t.nums].d = A[i][j]; /*元素值*/
t.nums++; /*非零元素个数增1*/
}
}
}
}
/*输出三元组表示t*/
static void disp_matrix(TSMatrix t)
{
int i;
/*异常打回*/
if (t.nums <= 0)
return;
/*行列数与非零个数输出*/
printf("\t行号、列号、与非零值\n");
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[