c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的转置算法一)
2012-11-22 15:17
549 查看
//稀疏矩阵 /* |0 12 9 0 0 0 0| |0 0 -3 0 0 15| |0 0 0 0 0 0 0| |12 0 0 0 18 0| M=|-3 0 0 0 0 14 0| T=|9 0 0 24 0 0| |0 0 24 0 0 0 0| |0 0 0 0 0 -7| |0 18 0 0 0 0 0| |0 0 0 0 0 0| |15 0 0 -7 0 0 0| |0 0 14 0 0 0| |0 0 0 0 0 0| M的转置矩阵为T */ #include<stdio.h> #include<stdlib.h> #define MAXSIZE 12500 //假设非零元个数的最大值为12500 #define OK 1 #define OVERFLOW -2 typedef struct { int i,j; //非零元行的行下标和列下标 int e; //非零元的值 }Triple; typedef struct { Triple data[MAXSIZE+1]; //非零元三元组表,data[0]未用 int mu,nu,tu; //矩阵的行数,列数和非零个数 }TSMatrix; typedef int Status; Status TransposeSMatrix(TSMatrix M,TSMatrix *T) { int q,p,col; T->mu=M.mu; T->nu=M.nu; T->tu=M.tu; if(T->tu) { q=1; for(col=1;col<=M.mu;++col) { for (p=1;p<=M.nu;p++) { if (M.data[p].j==col) { T->data[q].i=M.data[p].j; T->data[q].j=M.data[p].i; T->data[q++].e=M.data[p].e; } } } } return OK; } Status FastTransposeSMatrix(TSMatrix M,TSMatrix *T) { T->mu=M.mu; T->nu=M.nu; T->tu=M.tu; int col,*num,t,*cpot,p,q; if(!(num=(int *)malloc((M.nu+1)*sizeof(int)))) { exit(OVERFLOW); } if (!(cpot=(int *)malloc((M.nu+1)*sizeof(int)))) { exit(OVERFLOW); } if (T->tu) { for (col = 0; col <= M.nu; col++) { num[col]=0; } for (t = 1; t <= M.tu; t++) { ++num[M.data[t].j]; } cpot[1]=1; for ( col = 2; col <= M.mu; col++) { cpot[col]=cpot[col-1]+num[col-1]; } for (p = 1; p <= M.tu ; ++p) { col=M.data[p].j; q=cpot[col]; T->data[q].i=M.data[p].j; T->data[q].j=M.data[p].i; T->data[q].e=M.data[p].e; ++cpot[col]; } } } void main() { TSMatrix M,T; int i=1; M.data[1].i=1; M.data[1].j=2; M.data[1].e=12; M.data[2].i=1; M.data[2].j=3; M.data[2].e=9; M.data[3].i=3; M.data[3].j=1; M.data[3].e=-3; M.data[4].i=3; M.data[4].j=6; M.data[4].e=14; M.mu=6; M.nu=7; M.tu=4; FastTransposeSMatrix(M,&T); for(i= 1; i<=T.tu;i++) { printf("%d %d %d\n",T.data[i].i,T.data[i].j,T.data[i].e); } getchar(); }
相关文章推荐
- c语言版数据结构(奇迹冬瓜)-数组和广义表(稀疏矩阵的乘法)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表存贮稀疏矩阵的行列值)
- c语言版数据结构(奇迹冬瓜)-数组和广义表(十字链表稀疏矩阵的加法)
- 数据结构_数组与广义表_矩阵的十字链表存储稀疏矩阵相加
- 5-3-行逻辑链接的顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- 2015年大二上-数据结构-数组与广义表(3)-2.稀疏矩阵的三元组表示
- c语言版数据结构(奇迹冬瓜)-串的匹配模式算法
- 数据结构--数组和广义表--以三元组顺序表存储方式的矩阵的一般转置和快速转置
- 5-4-十字链表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- c语言版数据结构(奇迹冬瓜)-栈实战(1)栈解迷宫<迷宫算法>
- 数组与广义表_稀疏矩阵的压缩存储_三元组做存储结构_矩阵转置
- 数据结构 数组操作 稀疏矩阵采用三元组存储,设计算法求两个矩阵的和。
- 第九周 数据结构实践项目——数组和广义表【项目3.1-稀疏矩阵的三元组表示的实现及应用】
- 2015年大二上-数据结构-数组与广义表(3)-1.稀疏矩阵的三元组表示
- 第九周 数据结构实践项目——数组和广义表【项目3.2-- 稀疏矩阵相加】
- 【数据结构】稀疏矩阵的压缩存储和转置算法(C++代码)
- 5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- c语言版数据结构(奇迹冬瓜)-链表实战(4)双链表解一元多项式相乘
- 《算法学习与数据结构》part3 算法分析与数据结构之数组和广义表
- 数据结构----稀疏矩阵的快速转置