矩阵转置 动态内存实现
#include<stdio.h>
#include<stdlib.h>
#define SWAP(X,Y,TEMP) ((TEMP)=(X),(X)=(Y),(Y)=(TEMP))
#define MAX_SIZE 3
#define CALLOC(P, N, S)\
if(!((P)=calloc(N, S))){\
printf(stderr, "Insufficient memory");\
exit(EXIT_FAILURE);\
}
void transpose(int **a, int rows);
int **make2dArray(int rows, int cols);
int main(void)
{
int **a;
a=make2dArray(MAX_SIZE,MAX_SIZE);
for(int i=0,k=1; i<MAX_SIZE; i++)
for(int j=0; j<MAX_SIZE; j++)
a[i][j]=k++;
transpose(a, MAX_SIZE);
for(int i=0; i<MAX_SIZE; i++)
for(int j=0; j<MAX_SIZE; j++)
printf("%d",a[i][j]);
for(int i=0; i<MAX_SIZE; i++)
free(a[i]);
free(a);
return 0;
}
void transpose(int **a, int rows)
{
for(int i=0; i<rows; i++)
for(int j=i+1,temp=0;j<rows; j++)
SWAP(a[i][j],a[j][i],temp);
}
int **make2dArray(int rows, int cols)
{
int **x;
CALLOC(x,rows,sizeof(int*));
for(int i=0; i<rows; i++)
CALLOC(x[i],rows,sizeof(int));
return x;
}
posted on 2018-01-03 09:53 MACHINE_001 阅读(112) 评论(0) 编辑 收藏 举报