数据结构稀疏矩阵的实现及转置
来源:互联网 发布:气味图书馆淘宝 编辑:程序博客网 时间:2024/05/23 22:06
昨天在机房没有做出来,我想了很久,都不知道原因。在机房时就是不明白那些Triple和TSMatrix结构之间的联系。不知道如何进行数据输入和输出。
且我一直在思考如果创建矩阵成功,又如何将其可视化的输出呢,就像我们看数学课本上的矩阵那样。今天晚上才明白过了。三元组顺序表实际是将看似非线性的矩阵实现了线性化的存储。不过现在看来我真正理解那个矩阵转置算法还需花时间。数据结构与算法的这个矩阵利用三元组顺序表实现线性存储让我明白了计算机是如此的傻瓜和伟大。记得去年这个时候我还在一直困惑着“计算机如何利用0和1实现存储图像、音乐、视频等,这完全不可能吧”,现在我学了数据结构与算法的一点皮毛,让我彻底相信计算机仅仅利用0和1是可以实现这些的,且完全有可能做更多的事情。
下面是利用三元组顺序表创建矩阵、存储和进行矩阵转置的代码:
#include<iostream>#include<iomanip>using namespace std;#define MAXSIZE 12500typedef struct{int i,j;//该非零元的行下标和列下标int e;}Triple;typedef struct{Triple data[MAXSIZE+1];//非零元三元组表,data[0]未用int mu,nu,tu;//矩阵的行数,列数和非零元个数}TSMatrix;void initTS(TSMatrix &X){cout<<"请输入你要创建的矩阵的行数列数和非零元个数"<<endl;cin>>X.mu>>X.nu>>X.tu;cout<<"您要创建的矩阵的行数、列数、和非零元个数分别为:"<<X.mu<<" "<<X.nu<<" "<<X.tu<<endl;int p;cout<<"现在开始输入矩阵的元素了!请在输完一个元素后回车(*^__^*) \a"<<endl;for(p=1;p<=X.tu;p++)//构造循环,直到输完所有非零元素结束{cout<<"请输入第 "<<p<<"个非零元素的行数:";cin>>X.data[p].i;cout<<"请输入列数:";cin>>X.data[p].j;cout<<"请输入具体的数值:";cin>>X.data[p].e;cout<<endl;}}void print(TSMatrix X){cout<<"现在的矩阵为:"<<endl;for(int k=1;k<=X.tu;k++){cout<<"矩阵的行数 "<<"矩阵的列数 "<<"内容"<<endl;cout<<setw(8)<<X.data[k].i<<setw(8)<<X.data[k].j<<setw(8)<<X.data[k].e<<endl;}}void TransposeSM(TSMatrix X,TSMatrix &T){cout<<"正在对矩阵进行转置!"<<endl;T.mu=X.nu;T.nu=X.mu;T.tu=X.tu;if(T.tu){int q=1;for(int col=1;col<=X.nu;++col)//注意不忘了等于for(int p=1;p<=X.tu;++p)if(X.data[p].j==col){T.data[q].i=X.data[p].j;T.data[q].j=X.data[p].i;T.data[q].e=X.data[p].e;++q;}}}int main(){TSMatrix X,T;initTS(X);print(X);TransposeSM(X,T);cout<<"矩阵X的转置矩阵为:"<<endl;print(T);return 0;}
网上 收集的代码参考:
//.......SparseMatrix.h#include<iostream.h>#include<stdio.h>#define MAXSIZE 12500typedef struct{ int i,j;//非0元素的行下标,列下标 int e;//非0元素的值}Triple;typedef struct{ Triple data[MAXSIZE]; int mu,nu,tu;//稀疏矩阵的行数,列数和非0元素个数}TSMatrix;//--------------------------------------------------------------//创建稀疏矩阵//--------------------------------------------------------------void CreateSMatrix(TSMatrix &M){ int num;//非0元素的个数 int m;//遍历矩阵的字符 int Rnum,Cnum;//稀疏矩阵的行数,列数 int row,col,a;//非0元素的行下标,列下标,值 cout<<"请输入系数矩阵非0元素的个数,num= "; cin>>num; cout<<"\n\n------------------------------\n"; M.tu =num; cout<<"请输入稀疏矩阵的行数,Rnum= "; cin>>Rnum; M.mu =Rnum; cout<<"\n------------------------------\n"; cout<<"请输入稀疏矩阵的列数,Cnum= "; cin>>Cnum; M.nu =Cnum; cout<<"\n------------------------------\n"; for(m=0;m<num;m++) { cout<<"第"<<m+1<<"个非0元素是:\n"; cout<<"行数 "; cin>>row; cout<<"\n------------------------------\n"; cout<<"列数 "; cin>>col; cout<<"\n------------------------------\n"; cout<<"值 "; cin>>a; cout<<"\n------------------------------\n\n"; M.data[m].i =row; M.data[m].j =col; M.data[m].e =a; }// M.tu =num;}//--------------------------------------------------------------//输出稀疏矩阵//--------------------------------------------------------------void PrintSMatrix(TSMatrix M){ int n; cout<<"稀疏矩阵是: \n"; cout<<"i "<<"j "<<"e \n"; for(n=0;n<M.tu;n++) { cout<<M.data[n].i<<" "<<M.data[n].j <<" "<<M.data[n].e<<endl; }}//--------------------------------------------------------------//稀疏矩阵转置//--------------------------------------------------------------bool TransposeSMatrix(TSMatrix M,TSMatrix &T){ int q;//矩阵T的数组下标 int p;//遍历矩阵M的字符 int col;//矩阵M的列数 T.mu =M.nu ; T.nu =M.mu ; T.tu =M.tu ; if(T.tu ) { q=0; for(col=1;col<=M.nu ;col++) for(p=0;p<M.tu ;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; q++; } } return true; return false;}//----------------------------------------------------------------------//稀疏矩阵转置—2//----------------------------------------------------------------------///.....main.cpp//#include"SparseMatrix.h"void main(){ TSMatrix M,T; CreateSMatrix(M); PrintSMatrix(M); cout<<"矩阵M转置后:"; cout<<"\n\n----------------------------\n\n"; if(TransposeSMatrix(M,T)) PrintSMatrix(T); getchar();}
- 数据结构稀疏矩阵的实现及转置
- 数据结构----稀疏矩阵的快速转置
- 稀疏矩阵的数据结构及相关算法
- 数据结构--稀疏矩阵的快速转置及快速相乘操作
- 稀疏矩阵的存储,及矩阵的转置
- 数据结构之稀疏矩阵的快速转置
- C语言数据结构——稀疏矩阵的转置
- 数据结构练习---java实现普通矩阵与稀疏矩阵的矩阵转置,矩阵加法,矩阵乘法,应用简单工厂与模板方法。
- 第九周--数据结构--稀疏矩阵的三元组表示的实现及应用
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- 稀疏矩阵的实现
- 稀疏矩阵的压缩存储及转置
- 稀疏矩阵的压缩存储及转置算法
- 稀疏矩阵的压缩存储及转置
- 稀疏矩阵的压缩存储及快速转置
- 稀疏矩阵的转置
- 也谈移动APP中是否应该在首页加上使用说明
- Linux 线程模型的比较:LinuxThreads 和 NPTL
- 关于I2C timeout的一个解释
- float类型,bool类型的比较
- arm-linux-gcc 安装
- 数据结构稀疏矩阵的实现及转置
- 给数组排序
- android的frameworks层键盘事件处理流程分析
- 指针扫盲--复杂指针解析
- android体系结构
- 2011.11.3 poj1860 Currency Exchange 单源最短路径 Bellman-Ford算法 解题报告
- ArcBall原理解析
- sizeof 和 strlen (32位.64位)
- Frame框架编程技术详解