二维数组的转置是将一个二维数组的行列互换,得到一个新的二维数组,在C语言中,我们可以通过遍历原数组,将元素按照新的顺序放入新的数组中来实现二维数组的转置。
以下是一个简单的C语言实现二维数组转置的示例:
1、我们需要定义一个二维数组,并初始化它,我们定义一个3行4列的二维数组,并给它赋值:
int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
2、我们需要定义一个新的二维数组,用于存放转置后的数据,由于原数组是3行4列的,所以转置后的数组应该是4行3列的,我们可以使用动态内存分配来创建这个新数组:
int rows = 3; int cols = 4; int transpose_rows = cols; int transpose_cols = rows; int *transpose_arr = (int *)malloc(transpose_rows * transpose_cols * sizeof(int)); if (transpose_arr == NULL) { printf("内存分配失败! "); return 1; }
3、接下来,我们需要遍历原数组,并将元素按照新的顺序放入新数组中,我们可以使用两层嵌套循环来实现这个功能:
for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transpose_arr[j * transpose_rows + i] = arr[i][j]; } }
这里,外层循环遍历原数组的行,内层循环遍历原数组的列,我们将原数组的元素按照新的顺序放入新数组中,即transpose_arr[j * transpose_rows + i]
,这样,我们就实现了二维数组的转置。
4、我们需要释放新数组所占用的内存:
free(transpose_arr);
至此,我们就完成了二维数组的转置,以下是完整的代码示例:
#include <stdio.h> #include <stdlib.h> int main() { int rows = 3; int cols = 4; int transpose_rows = cols; int transpose_cols = rows; int *transpose_arr = (int *)malloc(transpose_rows * transpose_cols * sizeof(int)); if (transpose_arr == NULL) { printf("内存分配失败! "); return 1; } int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { transpose_arr[j * transpose_rows + i] = arr[i][j]; } } for (int i = 0; i < transpose_rows; i++) { for (int j = 0; j < transpose_cols; j++) { printf("%d ", transpose_arr[i * transpose_cols + j]); } printf(" "); } free(transpose_arr); return 0; }
运行上述代码,我们可以得到如下输出:
1 5 9 2 6 10 3 7 11 4 8 12
这就是原二维数组的转置结果。
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/360067.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复