尝试创建一个在给定数组内转置矩阵的函数。
我的转置函数如下所示:
void transpose(int a[], int rowSize, int colSize){
int d[size];
for (int i = 0; i < rowSize; i++) {
for (int j = 0; j < colSize; j++) {
int index1 = i*colSize+j;
int index2 = j*rowSize+i;
d[index2] = a[index1];
}
}
for (int i=0; i<size; i++) {
a[i] = d[i];
}
for (int i = 0; i < size; i++) {
if (i % colSize == 0) {
printf("\n");
}
printf("%d ", d[i]);
}
}
但是给定一个数组/矩阵:
int c[size] = {
1, 4,
2, 3,
3, 2,
4, 1
};
它返回:
1 3 4 2
2 4 3 1
所需的矩阵应如下所示:
1 2 3 4
4 3 2 1
最佳答案
这又是同样的逻辑。在这里,如果您使用附加数组,那么它将类似于数组的有序遍历。
void transpose(int a[], int colSize, int rowSize) {
/* int *d = malloc(sizeof(int)*colSize*rowSize);
if( d == NULL){
fprintf(stderr,"%s","Error in malloc");
exit(1);
}
*/
int d[rowSize*colSize];
int sz=0;
for(int j=0;j<colSize;j++)
for(int i=0;i<rowSize;i++)
{
d[sz++]=a[i*colSize+j];
}
for(int i=0;i<sz;i++)
a[i]=d[i];
// free(d);
}
对代码进行一些评论:-
每当您使用
malloc
时,请检查它的返回类型。如果没有分配任何内容,那么您将防止爆炸。工作完成后,必须释放动态分配的内存。它可以帮助您避免内存泄漏。
C99、C11 中提供 VLA 支持。
关于c - 一维数组中的矩阵转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022401/