数据结构 - 三元组顺序表 - - 稀疏矩阵的转置和快速转置

更新时间:2024-04-21 10:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据结构---三元组顺序表------稀疏矩阵的转置和快速转置

#include #include #include

#define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0

#define INEEASLIBE -1 #define OVERFLOW -2 #define maxsize 100

typedefint status; typedefintelemtype;

typedefstruct { inti,j; elemtype e; }elem;

typedefstruct { elem data[maxsize+1]; intmu,mn,tu; }matrix;

statusshowmatrix(matrix M) { inti,j,k=1; for(i=1;i<=M.mu;i++) { for(j=1;j<=M.mn;j++) { if(i==M.data[k].i&&j==M.data[k].j) { printf(\ k++; } else printf(\

} printf(\ } return OK; }

status trans(matrix M,matrix&T) { inti=1,j=1,k=1; T.tu=M.tu; T.mn=M.mu; T.mu=M.mn; while(i<=M.mn) { for(;k<=M.tu;k++) if(M.data[k].j==i) { T.data[j].e=M.data[k].e; T.data[j].i=M.data[k].j; T.data[j].j=M.data[k].i; j++; } k=1; i++; } return OK; }

statusinitmatrix(matrix &M) {

printf(\请输入该矩阵行数mu和列数mn和非零元个数tu\\nmu=\scanf(\getchar();

printf(\scanf(\getchar();

printf(\scanf(\getchar();

if(M.tu>maxsize) { printf(\非零元个数已超过定义的值\\n请重新输入tu=\ scanf(\ getchar();

}

printf(\请输入非零元和它所在的行数和列数(矩阵从先从左到右,再从上到下输入)\\n\for(inti=1;i<=M.tu;i++) { if(i==1) printf(\输入非零元:\ else

printf(\输入下一个非零元:\scanf(\getchar();

printf(\输入该非零元的行数:\scanf(\getchar();

while(M.data[i].i>M.mu||M.data[i].i<1) { }

printf(\输入的行数不合法\\n请重新输入行数:\scanf(\getchar();

printf(\输入该非零元的列数:\scanf(\getchar();

while(M.data[i].j>M.mn||M.data[i].j<1) {

printf(\输入的列数不合法\\n请重新输入列数:\ scanf(\ getchar(); } } return OK; }

statusfasttrans(matrix M,matrix&T) { T.tu=M.tu; T.mn=M.mu; T.mu=M.mn; int *num,*pose; num=(int*)malloc(M.mn*sizeof(int)); pose=(int*)malloc(M.mn*sizeof(int)); *(pose)=1; inti=1;

for(;i<=M.mn;i++) *(num+i-1)=0; for(i=1;i<=M.tu;i++) { *(num+M.data[i].j-1)=*(num+M.data[i].j-1)+1; } for(i=2;i<=M.mn;i++) { *(pose+i-1)=*(pose+i-2)+*(num+i-2); } for(i=1;i<=M.tu;i++) { T.data[*(pose+M.data[i].j-1)].i=M.data[i].j; T.data[*(pose+M.data[i].j-1)].j=M.data[i].i; T.data[*(pose+M.data[i].j-1)].e=M.data[i].e; *(pose+M.data[i].j-1)=*(pose+M.data[i].j-1)+1; } return OK; }

main() { matrix M,T; char c; while(1) { printf(\初始化矩阵\\n2:显示矩阵\\n3:普通转置\\n4:快速转置\\n\ scanf(\ getchar(); switch(c) { case '1': if(initmatrix(M)==OK) printf(\初始化成功\\n\ break; case '2': showmatrix(M); break; case '3': trans(M,T); printf(\转置后矩阵为:\\n\ showmatrix(T); break; case '4':

}

fasttrans(M,T);

printf(\转置后矩阵为:\\n\ showmatrix(T); break; default: } }

printf(\输入不合法\\n\break;

本文来源:https://www.bwwdw.com/article/v4xp.html

Top