//iOS学习交流群:230644538
#include <stdio.h>
#include <string.h>
using namespace std;
#define OK 1
#define MAX 10//用户自定义三元组的最大长度
//定义三元组表
typedef struct
{
int i, j;//非零元素的行下标和列下标
int v; //非零元素的值
}TriTupleNode;
typedef struct
{
TriTupleNode data[MAX]; //非零元素三元组表
int m; //矩阵行数
int n; //矩阵列数
int t; //三元组表长度(非零元素个数)
}TSMatrix;
/****-----------------------------------------------------------------****/
//函数名: InitTriTupleNode(TSMtrix *a)
//参数: (传入)TSMatrix *a 稀疏矩阵指针
//作用: 建立稀疏矩阵的三元组表
/****-----------------------------------------------------------------****/
void InitTriTupleNode(TSMatrix *a)
{
int i, j, k, val, maxrow, maxcol;
maxrow = 0;
maxcol = 0;
k = 1;
while(i != -1 && j != -1) { /*row = -1 && col = -1结束输入*/
printf("input row col val:");
scanf("%d %d %d", &i, &j, &val);
//存储非零元素的位置和值
a->data[k].i = i;
a->data[k].j = j;
a->data[k].v = val;
if(maxrow < i) maxrow = i;
if(maxcol < j) maxcol = j;
k++;
}
//设置矩阵a的行列参数以及非零元素个数
a->m = maxrow;
a->n = maxcol;
a->t = k;
}
/****---------------------------------------------*****/
//函数名: ShowMatrix(TSMatrix *a)
//参数: (传入)TSMatrix *a稀疏矩阵指针
//作用: 输出稀疏矩阵
/****---------------------------------------------*****/
void ShowMatrix(TSMatrix *a)
{
int p, q;
int t = 1;
for(p = 1; p <= a->m; p++) {
for(q = 1; q <= a->n; q++) {
if(a->data[t].i == p && a->data[t].j == q) { //打印非零元素
printf("%d ", a->data[t].v);
t++;
}
else
{
printf("0 "); //否则打印输出0
}
}
printf("\n");
}//for
}
/****---------------------------------------------------*****/
//函数名: TransposeSMatrix(TSMatrix &a, TSMatrix *b)
//参数: (传入)TSMatrix *a, *b,稀疏矩阵a,转置矩阵b
//作用: 转置稀疏矩阵
/****---------------------------------------------------*****/
void TransposeSMatrix(TSMatrix *a, TSMatrix *b)
{
int q, col, p;
b->m = a->n;
b->n = a->m;
b->t = a->t;
if(b->t) {
q = 1;
for(col = 1; col <= a->n; col++) { //从a的第一行开始起扫描
for(p = 1; p <= a->t; p++) {
if(a->data[p].j == col) {
//将每个三元组中的i和j相互调换
b->data[q].i = a->data[p].j;
b->data[q].j = a->data[p].i;
b->data[q].v = a->data[p].v;
++q;
}
}
}
}
}
/**********************测试程序******************************/
int main()
{
TSMatrix a, b;
TSMatrix *pa = &a, *pb = &b;
InitTriTupleNode(pa);
printf("稀疏矩阵转置前:\n");
ShowMatrix(pa);
printf("稀疏矩阵转置后:\n");
TransposeSMatrix(pa, pb);
ShowMatrix(pb);
return 0;
}
4.3稀疏矩阵的运算与实现
最新推荐文章于 2023-02-02 04:15:00 发布