資料結構題集 陣列 二維陣列

2021-04-07 09:52:14 字數 3736 閱讀 3427

設計乙個矩陣相乘的程式

假設有  

1  5  7  3            3  9  1  4  1  4

a= 3  6  3  9         b= 5  6  7  9  0  3

1  2  8  7            3  2  7  2  5  6

0  3  1  9            9  7  4  7  8  0

3  2  5  4

求出a*b的矩陣

程式構思:

我們所知的矩陣乘法運算的算式如下:

cij = aik x bkj   的k從1到 n 的和,那麼可以用乙個3層迴圈來運算此算式:

c(1,1)=a(1,1)*b(1,1)+a(1,2)*b(2,1)+a(1,3)*b(3,1)+a(1,4)*b(4,1)

=(1*3)+(5*5)+(7*3)+(3*9)

=3+25+21+27

=76同理

c(1,2)=a(1,1)*b(1,2)+a(1,2)*b(2,2)+a(1,3)*b(3,2)+a(1,4)*b(2,2)

=(1*9)+(5*6)+(7*2)+(3*7)

=9+30+14+21

=74依此類推,我們可以求得矩陣a與矩陣b的矩陣乘積。

void main(void)

;int matrixb[4][6]=;

int matrixc[5][6];

int i,j,k;

for(i=0;i<5;i++)

for(j=0;j<6;j++)

printf("the matrix a:/n");

for(i=0;i<5;i++)

printf("/nthe matrixb:/n");

for(k=0;k<4;k++)

printf("/nmatrix c=matrix a* matrix b/n");

for(i=0;i<5;i++)

}執行結果:

the matrix a:

1  5  7  3

3  6  3  9

1  2  8  7

0  3  1  9

3  2  5  4

the matrix b:

3  9  1  4  1  4

5  6  7  9  0  3

3  2  7  2  5  6

9  7  4  7  8  0

matrix c=matrix a*matrix b:

76   74   97   84  60  61

129  132  102  135  90  48

100  86   99   87  97  58

99   83   64   92  77  15

70   77   68   68  60  48

二維陣列行列互換

程式例項:

設計乙個能將二維陣列轉換成以列為主的一維陣列和以行為主的一維陣列。

預設二維陣列資料為:

9  7  6  6

3  5  3  3

data = 6  6  4  7

7  5  1  4

1  2  8  0

程式構思:

依題意知道,本程式所運用的資料結構為「二維陣列」,上報為進行陣列以列為主和以行為主的轉換。

已知該二維陣列的大小為 5*4

以行為主的陣列轉換公式為:

data[i][j]的位置=(i*4)+j

以列為主的陣列的轉換公式為:

data[i][j]的位置=(j*5)+i

宣告乙個大小為20的一維陣列,用來存久違轉換以列為主後的資料,並宣告乙個大小為20的一維陣列,用來存久違轉換後以行為主的資料。

void main(void)

;int rawdata[20];

int coldata[20];

int i,j;

printf("the data of two dimensional array:/n");

for(i=0;i<5;i++)

for(i=0;i<5;i++)

for(j=-;j<4;j++)

rowdata[i*4+j]=data[i][j];

printf("/nthe row major matrix:/n");

for(i=0;i<20;i++)

printf("%3d",rowdata[i]);

printf("/n");

for(i=0;i<5;i++)

for(j=0;j<4;j++)

coldata[j*5+i]=data[i][j];

printf("/nthe column major matrix:/n");

for(i=0;i<20;i++)

printf("%3d",coldata[i]);

printf("/n");

}執行結果:

the data of two dimension array:

9  7  6  6

3  5  3  3

6  6  4  7

7  5  1  4

1  2  8  0

the row major matrix:

9  7  6  6  3  5  3  3  6  6  4  7  7  5  1  4  1  2  8  0

9  3  6  7  1  7  5  6  5  2  6  3  4  1  8  6  3  7  4  0

練習例項:

假設有乙個浮點數二維陣列共有15列11行。資料儲存方式是以行為主,且在記憶體上的起始位址是30,現在要求出陣列中第三行第5 列的元素在記憶體中的位址。

練習解答:

由題意可以知道,以行為主儲存:

data[i][j]的記憶體位置=x+[(i*r)+j]*m

1)浮點數二維陣列-->每個元素占用的空間為4個位元組,m=4

2)陣列大小為共有15列11行--->r=15

3)起始位址是30--->x=30

data[3][5]的記憶體位置=30+[(3*15)+5]*4=150

練習例項:

假設陣列demo如下:

3  9  1  4  1  4

5  6  7  9  0  3

demo = 3  2  7  2  5  6

9  7  4  7  8  0

求出該陣列以列為主和以行為主轉換成一維陣列後的相對位置

練習解答:

1)以行為主:

一維陣列中的位置01

23

...19

2021

2223

在原陣列中的位置

(0,0)

(0,1)

(0,2)

(0,3)

(3,1)

(3,2)

(3,3)

(3,4)

(3,5)

內容值391

4...74

780

以列為主:

一維陣列中的位置01

23

...19

2021

2223

在原陣列中的位置

(0,0)

(1,0)

(2,0)

(3,0)

(3,4)

(0,5)

(1,5)

(2,5)

(3,5)

內容值353

9...84

360

資料結構與二維陣列 json xml

資料結構 二分查詢 陣列必須要從小到大排序 int search int b,int len,int key else if b mid key else if b mid key return 1 快速查詢最大值 int a int mix 0 for int i 1 i 6 i 二維陣列 1 定...

資料結構動態申請二維陣列

在實現圖操作的時候,因為用鄰接矩陣法實現,所以就用到二維陣列,而在這裡,就著重說下怎麼樣動態申請二維陣列,它的原理是 申請完畢後,就類似於在乙個一維陣列中,每乙個元素都為乙個指標,而這個指標正好指向乙個一維陣列 或者說就是這個一維陣列的首位址 當然,動態申請二維陣列和動態申請二級指標記憶體是乙個道理...

資料結構 二維陣列中的查詢

我們門來看一下題目 在乙個陣列中,每一行都按照從左往右遞增的順序排序。每一列都按照從上到下遞增的順序排列。請完成乙個函式,輸入這樣乙個 我們門來看一下題目 在乙個陣列中,每一行都按照從左往右遞增的順序排序。每一列都按照從上到下遞增的順序排列。請完成乙個函式,輸入這樣乙個整數,判斷陣列中是否含有該整數...