<span style="font-size:32px;">//iOS学习交流群:230644538</span> #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; }
时间: 2024-11-08 18:44:29