ï¼Cè¯è¨ï¼ç¨çç©éµçå¿«é转置ç®æ³/*ç©éµçå¿«é转置*/
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define MAXSIZE 200 /*ç©éµä¸æ大éé¶å
ç个æ°*/
typedef struct triple
{
int i; /*è¡æ ,æ¬ç¨åºä¸ä»1å¼å§ç*/
int j; /*åæ ï¼æ¬ç¨åºä¸ä»1å¼å§ç*/
int e; /*éé¶å
*/
}Triple; /*ä¸å
ç»å®ä¹*/
typedef struct tabletype
{
int mu; /*ç©éµçè¡æ°*/
int nu; /*åæ°*/
int tu; /*éé¶å
个æ°*/
Triple data[MAXSIZE]; /*éé¶å
çä¸å
ç»è¡¨,æ¬ç¨åºä¸æ¯ä»data[1]å¼å§ä½¿ç¨ç*/
}Tabletype; /*ä¸å
ç»çº¿æ§è¡¨*/
/*以ä¸ä¸ºå½æ°å£°æï¼æ³¨æå书æ¬ä¸çåæ°ç±»åä¸åï¼æç¨çå½¢åå
¨ä¸ºæé*/
void CreatSMatrix(Tabletype *); /*çæç©éµ*/
void DestroySMatrix(Tabletype *); /*éæ¯ç©éµ*/
void out_matrix(Tabletype *); /*æå° ç©éµ*/
int FastTransposeSMatrix(Tabletype *,Tabletype *); /*å¿«é转置ç®æ³*/
int main( void ) /*主å½æ°*/
{
char ch;
Tabletype a = {0,0,0,{0,0,0}}; /*åå§å为0ï¼ä¾¿äºè¾å
¥æ°æ®æ¶çæ ææ£æµ*/
Tabletype b; /*声æç©éµb*/
while(1)
{
printf(" @@@@@@@@@@@@@@æ¬ç¨åºçåè½æ¯å®ç°ç¨çç©éµçå¿«é转置@@@@@@@@@@@@@@@\n");
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
CreatSMatrix(&a);
printf("The source Matrix:\n");
out_matrix(&a);
if(FastTransposeSMatrix(&a,&b)) /*è¥aä¸ä¸ºé¶ç©éµå转置aï¼åå
¥bä¸*/
{ printf("After TransposeSMatrix: \n");
out_matrix(&b);
}
else
{
printf("The matrix is zeros:\n");
out_matrix(&a);
}
/*以ä¸ä¸ºç¨åºæ§å¶*/
printf("Input 'q' to quit and 'c' run again:");
do{
if((ch = getchar()) == 'q' || ch == 'Q')
{
DestroySMatrix(&a);
DestroySMatrix(&b);
exit(0);
}
}while((ch!='C') && (ch!='c'));
system("cls");
}
return 1;
}
void CreatSMatrix(Tabletype *a)
{
int i;
printf("请è¾å
¥ç©éµçè¡æ°ãåæ°åéé¶å
个æ°ï¼ç¨ç©ºæ ¼é´é:");
scanf("%d%d%d",&(a->mu),&(a->nu),&(a->tu));
for(i=1;i<= a->tu;)
{
printf("请è¾å
¥ç©éµä¸ç¬¬%d个éé¶å
ï¼æè¡æ ãåæ ãå¼ç顺åºï¼ç©ºæ ¼é´éï¼:",i);
scanf("%d%d%d",&(a->data[i].i),&(a->data[i].j),&(a->data[i].e));
if(a->data[i].i < 1 || a->data[i].i > a->mu || a->data[i].j < 1 || a->data[i].j > a->nu) /*ä¸æ è¶ç*/
{
printf("注æï¼ä¸æ è¶çè¾å
¥æ°æ®æ æ!\n请éæ°è¾å
¥:è¡æ èå´ï¼1--%d,åæ èå´1--%d!!!\n",a->mu,a->nu);
continue;
}
if( ((a->data[i].i) < (a->data[i-1].i)) ||
(((a->data[i].i) == (a->data[i-1].i)) && ((a->data[i].j) <= (a->data[i-1].j)))) /*éæè¡é¡ºåºè¾å
¥*/
{
printf("注æï¼è¾å
¥æ°æ®æ æ!\n请æç
§æè¡åå¨ç顺åºè¾å
¥æ°æ®!!!\n");
continue;
}
i++;
}
}
void DestroySMatrix(Tabletype *a)
{ /* éæ¯ç¨çç©éµa*/
(*a).mu=0;
(*a).nu=0;
(*a).tu=0;
}
void out_matrix(Tabletype *a) /* æå°ç©éµ*/
{
int i,j,k = 1;
for(i = 1 ;i <= a->mu; i++)
{
for(j = 1; j<= a->nu; j++)
{ /*å¤ææ¯å¦ä¸ºéé¶å
*/
if((a->data[k].i == i)&&(a->data[k].j == j))
{
printf("%4d",a->data[k].e);
k++;
}
else
printf("%4d",0);
}
printf("\n");
}
}
int FastTransposeSMatrix(Tabletype *a,Tabletype *b)
{
int p,q,col;
int *num;
int *cpot;
b->mu = a->nu; /*åç©éµçè¡æ°ä¸ºæ°ç©éµçåæ°ï¼ååæ°ä¸ºæ°è¡æ°ï¼éé¶å
个æ°ä¸å*/
b->nu = a->mu;
b->tu = a->tu;
num=(int *)malloc((b->nu+1)*sizeof(int)); /* çæ两个è¾
å©æ°ç»*/
cpot=(int *)malloc((b->nu+1)*sizeof(int));
if(b->tu) /*è¥aä¸ä¸ºé¶ç©éµ*/
{
for(col = 0;col <a->nu;col++) /*åå§åç©éµaçæ¯åä¸éé¶å
ç个æ°å为0*/
num[col] = 0;
for(col = 0; col <=a->tu ; col++)/*ç»è®¡æ¯åä¸éé¶å
ç个æ°*/
num[a->data[col].j]++;
cpot[1] = 1; /*ç¡®å®æ¯åä¸ç¬¬ä¸ä¸ªéé¶å
çä½ç½®*/
for(col = 2;col <= a->nu; col++)
cpot[col] = num[col-1]+cpot[col-1];
for(p = 1; p <= a->tu; p++) /*p为a-dataçä¸æ */
{
col = a->data[p].j; /*交æ¢å
ç´ */
q = cpot[col];
b->data[q].i = a->data[p].j;
b->data[q].j = a->data[p].i;
b->data[q].e = a->data[p].e;
q++;
cpot[col]++;
}
free(num); /*éæ¾ä¸¤ä¸ªè¾
å©æ°ç»*/
free(cpot);
return 1; /*转置æå*/
}
else /*a为é¶ç©éµ*/
return 0;
温馨提示:答案为网友推荐,仅供参考