矩陣的快速轉置

#include<stdio.h>
#define OK 1
#define SIZE 100
typedef struct {
int i,j;
int e;
}Triple;
typedef struct{
 Triple data[SIZE+1];
int mu,nu,tu;
}Tsmatrix;
int a,b;
int createTsmarix(Tsmatrix *M){
int m,n,p=1;
int c;
printf("please input the Tsmatrix :\n");
for(m=1;m<=a;m++)
for(n=1;n<=b;n++){
 scanf("%d",&c);
if(c!=0)
{
M->data[p].e=c;
M->data[p].i=m;
M->data[p].j=n;
p++;
}
}
M->tu=p;
M->mu=a;
M->nu=b;
return OK;
}
int FastTransposeSMatrix(Tsmatrix *M,Tsmatrix *T){
int  p,col,q,t,m;
int num[100];
int cpot[100];
T->mu=M->nu;
T->nu=M->mu;
T->tu=M->tu;
if(T->tu!=0){
for(col=1;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->nu;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];
}
}
return  OK;
}
void printTsmatrix(Tsmatrix *T){
int m,n,p=1;
int d;
for(m=1;m<=b;m++){
 printf("\n");
for(n=1;n<=a;n++){
if(T->data[p].i==m&&T->data[p].j==n)
{
  d=T->data[p].e;
p++;
}
else d=0;
printf("%4d",d);
}
printf("\n");
}
}
void main(){
 
 Tsmatrix *M,*T;
M=(Tsmatrix *)malloc(sizeof(Tsmatrix));
T=(Tsmatrix *)malloc(sizeof(Tsmatrix));
printf(" please input the tsmatrix's mu,nu\n");
scanf("%d%d",&a,&b);
createTsmarix(M);
printf("the tsmatrix is :\n");
printTsmatrix(M);
FastTransposeSMatrix(M,T);
printf("the tsmatrix after fasttranspose is:\n");
printTsmatrix(T);
getch();
}
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
閱讀(186) | 評論(0) | 轉發(0) |
給主人留下些什麼吧!~~
評論熱議
發佈了47 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章