?
二維數組的語(yǔ)言??實(shí)轉置是將一個(gè)二維數組的行列互換,(°o°)得(de)到一個(gè)新的數組二維數組,在C語(yǔ)言中,置輸我們可以通過(guò)遍歷原數組,語(yǔ)言實(shí)將元素按照新的數組順序放入新的數組中來(lái)實(shí)現二維數組的轉置。
(圖片來(lái)源網(wǎng)絡(luò ),置輸侵刪)以下是語(yǔ)言實(shí)一個(gè)簡(jiǎn)單的C語(yǔ)言實(shí)現二維數組轉置的示例:
1、我們需要定義一個(gè)二維數組,數組并初??始化它,置輸我們定義一個(gè)3行4列的語(yǔ)言實(shí)二維數組,并給它賦值:
int arr[3][4] = { { 1,數組 2, 3, 4}, { 5, 6, 7, 8}(′?`), { 9, 10, 11, 12}};2、我們需要定義一個(gè)新的置輸二維數組,用于存放轉置后的語(yǔ)言實(shí)數據,由于原數組是數組3行4列的,所以(′?`*)轉置后的置輸數組應(ying)該是4行3列的,我們可以使用動(dòng)態(tài)內存分配來(lái)創(chuàng )建這個(gè)新數組:
int rows = 3;int cols = 4;int transpose_rows = cols;int transpose_cols = rows;int *transpose_arr = (int *)malloc(tra(′ω`)nspose_rows * transpose_cols * sizeof(i??nt));if (transpose_arr == NULL) { printf("內存??分配失??!"); return 1;}3??、接下來(lái),我們需要遍歷原數組,并將元素按照新的順序放入新數組中,我們可以使用兩層嵌套循環(huán)來(lái)實(shí)(′Д` )現這個(gè)功能:
for (int i = 0; i < ro┐(′д`)┌ws; i++) { for (int j = 0; j < cols; j++) { transpo(′?`)se_arr[j * transpose_rows + i] = arr[i][j]; }}這里,外層循環(huán)遍歷原數組的行,內層循環(huán)遍歷原數組的列,我們將原數組的元素按照新的(de)順序放入新數組中,即transpose_arr[j * transpose_rows + i],這樣,我們就實(shí)現了二維數組的轉(′_`)置。
4、我們需要釋放新數組所占用的內存:
free(transpose_arr);
至此,我們就完成了(le)二維數組的轉置,以下是完整的代(dai)碼示例:
#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} }; fo??r (int i = 0; i < rows; i++) { for(′Д` ) (int j = 0; j < cols; j++) { transpose_arr[j * tran??spose_rows + i] = arr[i][j]; } } for (int i = 0; i < transpos(′_`)e_rows; i++) { for (int j = 0; j < transpose_cols; j++) { prin( ?ω?)tf("%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 這就是原二維數組的轉置結果。