33
1 樹樹樹樹樹樹 樹樹樹樹樹 Data Structures 樹樹 (Arrays) Chapter 3

陣列 (Arrays)

  • Upload
    toyah

  • View
    53

  • Download
    0

Embed Size (px)

DESCRIPTION

Chapter 3. 陣列 (Arrays). 陣列. 陣列 (Array) 可分成一維陣列、二維陣列及多維陣列 ( 三維以上的陣列 ) 。 Java int ko[ ]=new int[5] ; int ko [ ] [ ] = new int[80] [50 ] ; int ko[ ] [ ] [ ] = new int[80] [50 ] [50 ] ;. 資料型態. 一維陣列. 一維陣列的宣告法: int ko[ ]=new int[5] ; int [ ]ko=new int[5] ; - PowerPoint PPT Presentation

Citation preview

Page 1: 陣列 (Arrays)

1

樹德科技大學 資訊管理系 Data

Structures

陣列 (Arrays) 陣列 (Arrays)

Chapter 3Chapter 3

Page 2: 陣列 (Arrays)

2

樹德科技大學 資訊管理系 Data

Structures 陣列陣列 (Array) 可分成一維陣列、二維陣列及多維陣列 ( 三維以上的陣列 ) 。

Java

int ko[ ]=new int[5] ;int ko [ ] [ ] = new int[80] [50 ] ;

int ko[ ] [ ] [ ] = new int[80] [50 ] [50 ] ;

Page 3: 陣列 (Arrays)

3

樹德科技大學 資訊管理系 Data

Structures資料型態

資料型態名稱 佔記憶體大小 ( 位元組 )

byte 1

short 2

int 4

long 8

char 2

float 4

double 8

Page 4: 陣列 (Arrays)

4

樹德科技大學 資訊管理系 Data

Structures一維陣列

一維陣列的宣告法:int ko[ ]=new int[5] ;int [ ]ko=new int[5] ;int ko[ ]={1 , 2 , 3 , 4 , 5} ;int [ ]ko={1 , 2 , 3 , 4 , 5} ;

Page 5: 陣列 (Arrays)

5

樹德科技大學 資訊管理系 Data

Structures一維陣列位址的配置

若陣列 ko[n] ,假設每一個變數佔了 d 個位元組的空間:變數 ko[0] ko[1] ko[2] ko[n-1]‧‧‧位址 m m+d m+2*d m+(n-1)*d‧‧‧

d 值代表資料型態所佔記憶體空間的大小,則:Loc(ko[n-1])=m+(n-1)*d .. ( 公式 3-1)其中 m=Loc(ko[0]) , d 為資料型態所佔記憶體的大小,n-1 代表 ko[0] 與 ko[n-1] 間隔。 Loc 代表 Location 記憶體位置。例題 ko3_1使用一維陣列,計算小學生成績

Page 6: 陣列 (Arrays)

6

樹德科技大學 資訊管理系 Data

Structures一維陣列位址的配置

P.74 例題 1:

假設在 Java 語言中有一陣列 A[ ] 儲存了 float 的資料,若 A[100] 的位址是 4413 ,則 A[200] 的位址為若干?

Page 7: 陣列 (Arrays)

7

樹德科技大學 資訊管理系 Data

Structures一維陣列位址的配置

解答:已知 Loc(A[100])=4413=m+(n-1)*d=m+100*d ,根據公式 3-1

Loc(ko[n-1])=m+(n-1)*d ,得知 Loc(ko[0])=m , d=4 ,Loc(A[100])=4413=m+100*4 ,得 m=4013

Loc(A[200])=m+(n-1)*d

=4013+200*4

=4813

Page 8: 陣列 (Arrays)

8

樹德科技大學 資訊管理系 Data

Structures一維陣列位址的配置

P.74 例題 2例題 ko3_2使用一維陣列,將一組字串之大寫變小寫,小寫變大寫

例題 ko3_3使用一維陣列,將一組數字,依大小順序排列

Page 9: 陣列 (Arrays)

9

樹德科技大學 資訊管理系 Data

Structures二維陣列

二維陣列宣告方式:int ko[ ][ ]=new int[5][3] ;int [ ][ ]ko=new int[5][3] ;int ko[ ][ ]={{1 , 2} , {3 , 4}} ;int [ ][ ]ko={{1 , 2} , {3 , 4}} ;二維陣列包含列 (Row) 及行 (Column) :

(1,1) (1,2) (1,3) (1,4)

(2,1) (2,2) (2,3) (2,4)

(3,1) (3,2) (3,3) (3,4)

Page 10: 陣列 (Arrays)

10

樹德科技大學 資訊管理系 Data

Structures二維陣列

例題 ko3_4 使用二維陣列,求陣列中最大值及最小值

例題 ko3_5 使用二維陣列,列出二維陣列,並求各列數字的和

例題 ko3_6 使用二維陣列,計算二個陣列之乘積– 先介紹二個陣列乘積之算法

Page 11: 陣列 (Arrays)

11

樹德科技大學 資訊管理系 Data

Structures二維陣列位址的配置

二維陣列位置的配置可分為– 以列為主陣列位置的配置– 以行為主陣列位置的配置通常都是以列為主陣列位置的配置

Page 12: 陣列 (Arrays)

12

樹德科技大學 資訊管理系 Data

Structures以列為主陣列位址配置

假設每一個變數佔了 2 個位元組的空間, y 行內有 δ 個元素

Page 13: 陣列 (Arrays)

13

樹德科技大學 資訊管理系 Data

Structures以列為主陣列位址配置

若 Loc(A[0][0])=m ,而且以列為主陣列位置的配置方式,則 A[x][y] 記憶體位置的公式如下:Loc(A[x][y])=m+d(xδ+y)…………( 公式 3-2)

其中 δ 代表 y 行內有 δ 個元素, d 代表每一個變數佔了 d 個位元組的空間。

Page 14: 陣列 (Arrays)

14

樹德科技大學 資訊管理系 Data

StructuresP.81 例:有一個二維陣列 A ,假設 A[1][1] 與 A[3][3] 的位址分別為 644 與 676 ,求 A[4][4] 的位址為

若干? Loc(A[1][1])=644=m+d(δ+1)……………………….(1)

Loc(A[3][3])=676=m+d(3 δ+3)……………………..(2)(1)x3-(2) 得 2m=1256

m=628……………………………..(3)

d(δ+1)=16……………………….(4)將 (3)(4) 代入 Loc(A[4][4])=m+d(4 δ+4)

=m+4d(δ+1)=628+4x16=692

Page 15: 陣列 (Arrays)

15

樹德科技大學 資訊管理系 Data

Structures以行為主陣列位址配置

假設每一個變數佔了 2 個位元組的空間,x 列內有 δ 個元素

Page 16: 陣列 (Arrays)

16

樹德科技大學 資訊管理系 Data

Structures以行為主陣列位址配置

若 Loc(A[0][0])=m ,而且以行為主陣列位址的配置方式,則 A[x][y] 記憶體位址的公式如下:Loc(A[x][y])=m+d(yδ+x)………......( 公式 3-3)

其中 δ 代表 x 列內有 δ 個元素, d 代表每一個變數佔了 d 個位元組的空間。

Page 17: 陣列 (Arrays)

17

樹德科技大學 資訊管理系 Data

StructuresP.83 例:有一個以行為主的二維陣列 A[x][y] , A[3][2] 的位址是 1111 , A[2][3] 的位址為

1116 。若每一個元素佔了 1 個位元組,求 A[1][4]的位址為若

干? 已知 d=1 根據公式 3-3 Loc(A[x][y])=m+d(yδ+x) 得知:Loc(A[3][2])=1111=m+(2 δ+3)…………………..(1)‧Loc(A[2][3])=1116=m+(3 δ+2)…………………..(2)‧(2)-(1) 得 5=δ-1 ,求得 δ=6……………………….(3)(3) 代入 (1) 求得 m=1096Loc(A[1][4])=m+d(yδ+x)

=1096(4 6+1)‧ =1121

Page 18: 陣列 (Arrays)

18

樹德科技大學 資訊管理系 Data

Structures多維陣列位址的配置

以列為主陣列位址的配置加設有一三維陣列 A[z][y][x] , A[0][0][0]的位址為 m ,每一個元素佔了 d 個位元組,則 A[a][b][c] 的位址為:

Loc(A[a][b][c])=m+d(ayx+bx+c)……( 公式 3-4)

Page 19: 陣列 (Arrays)

19

樹德科技大學 資訊管理系 Data

StructuresP.85 例:設有一三維陣列 A[2][3][4] 中,陣列元素A[1][1][1] 在主記憶體中之位址為 3000 ,且一個元素佔一個位元組,以列為主排列時,陣列元素

A[2][1][3] 之位址為何? 已知三維陣列 A[2][3][4](z=2,y=3,x=4) ,每一個元素佔一個位元組, d=1 。根據公式 3-4 知 Loc(A[1][1][1])=m+d(ayx+bx+c)=m+1(1 3 4+1‧ ‧ ‧4+1)=m+17=3000 ,得 m=2983Loc(A[2][1][3])=m+d(ayx+bx+c)

=2983+1(2 3 4+1 4+3)‧ ‧ ‧ =2983+24+4+3 =3041

Page 20: 陣列 (Arrays)

20

樹德科技大學 資訊管理系 Data

Structures多維陣列位址的配置

以行為主陣列位址的配置假設有一三維陣列 A[z][y][x] , A[0][0][0]的位址為 m ,每一個元素佔了 d 個位元組,則 A[a][b][c] 的位址為:

Loc(A[a][b][c])=m+d(czy+bz+a)……( 公式 3-5)

Page 21: 陣列 (Arrays)

21

樹德科技大學 資訊管理系 Data

StructuresP.85 例:設有一三維陣列 A[2][3][4] 中,陣列元素A[1][1][1] 在主記憶體中之位址為 3000 ,且一個元素佔一個位元組,以行為主排列時,陣列元素

A[2][1][3] 之位址為何? 已知三維陣列 A[2][3][4](z=2,y=3,z=4) ,每一個元素佔一

個位元組, d=1 。根據公式 3-5 知 Loc(A[1][1][1])=m+d(czy+bz+a)=m+1(1 2‧ ‧3+1 2+1)=m+9=3000‧ ,得m=2991Loc(A[2][1][3])=m+d[czy+bz+a]

=2991+1(3 2 3+1 2+2)‧ ‧ ‧ =2991+18+2+2 =3013

Page 22: 陣列 (Arrays)

22

樹德科技大學 資訊管理系 Data

Structures特殊矩陣

稀疏矩陣– 所謂稀疏矩陣是指矩陣中的元素大多數為 0 。擁有多少個零元素才稱得上「稀疏矩陣」,並沒有明確的定義。

Page 23: 陣列 (Arrays)

23

樹德科技大學 資訊管理系 Data

Structures 以二維陣列來儲存此稀疏陣列,地以列用來儲存稀疏矩陣的列數、行數以及非零元素數,第二列一後用來儲存稀疏矩陣的非零元素所在的位址及其值,此法稱為行列索引表示法

Page 24: 陣列 (Arrays)

24

樹德科技大學 資訊管理系 Data

StructuresP.90 例:一個 mxn 的整數矩陣 (Matrix) ,其中有 k個非零的值。如果用陣列儲存這個 Sparse Matrix的 k 值。需要多少個記憶體? (A)k(B)2k+1(C)3(k+1)

(D)4k依據圖 3-6 ,總共非零元素有 8 個,存放稀疏矩陣的記憶體空間 =3*(8+1)=27

因此,答案應為 (C)3(k+1)

Page 25: 陣列 (Arrays)

25

樹德科技大學 資訊管理系 Data

Structures下三角形矩陣

正方形矩陣 A[x][y] 其對角線以上的元素均為 0 。 x y≦ , A[x][y]=0

Page 26: 陣列 (Arrays)

26

樹德科技大學 資訊管理系 Data

Structures下三角形矩陣位置配置

以列為主

]][[]1][[A[X][0]]0][[

]1][[]1][1[1][0]-A[X

‥‥‥‥‥‥‥‥‥‥‥

A[2][2]A[2][1]A[2][0]

A[1][1]A[1][0]

A[0][0]

A[x][y]

YXA‥‥‥‥XAXA

XXA‥‥‥‥XA

Loc (A[x][y])= Loc (A[0][0])+(1+x)x/2+y . . . ( 公式 3-8) 例題 ko3_7 ( 下三角型以列為主的位址配置,二維陣列轉換成一維陣列 )

Page 27: 陣列 (Arrays)

27

樹德科技大學 資訊管理系 Data

Structures下三角形矩陣以行為主

Loc (A[x][y])= Loc (A[0][0])+n(y-1)-y(y-1)/2+x

( 公式 3-9)

例題 ko3_8 ( 下三角型以行為主的位址配置,二維陣列轉換成一維陣列 )

Page 28: 陣列 (Arrays)

28

樹德科技大學 資訊管理系 Data

Structures上三角形矩陣

x y≧ , A[x][y]=0

Page 29: 陣列 (Arrays)

29

樹德科技大學 資訊管理系 Data

Structures上三角形矩陣以列為主

Loc (A[x][y])= Loc (A[0][0])+n(x-1)-x(x-1)/2+y

( 公式 3-10)

例題 ko3_9 ( 以上三角型矩陣以列為主的位址配置,二維陣列轉換成一維陣列 )

Page 30: 陣列 (Arrays)

30

樹德科技大學 資訊管理系 Data

Structures上三角形矩陣以行為主

Loc (A[x][y])= Loc (A[0][0])+y(y-1)/2+x

( 公式 3-11)

例題 ko3_10 ( 以上三角型以行為主的位址配置,二維陣列轉換成一維陣列 )

Page 31: 陣列 (Arrays)

31

樹德科技大學 資訊管理系 Data

Structures多項式陣列

使用 n+2 長度的陣列 a 儲存多項式 f(x) 。 f(x)=7x3+4x+13 。A[5]={3 , 7 , 0 , 4 , 13} 。

Page 32: 陣列 (Arrays)

32

樹德科技大學 資訊管理系 Data

Structures多項式陣列

以 a[2p+1] 儲存多項式 f(x) 。 f(x)=7x3+4x+13 。A[7]={3 , 3 , 7 , 1 , 4 , 0 , 13} 。

Page 33: 陣列 (Arrays)

33

樹德科技大學 資訊管理系 Data

Structures類別

Java 語言的類別與陣列類似,可將一些資料組在一起。但是資料陣列的每一元素的資料型態必須一致;類別的每一元素的資料型態不必一致。

因此,陣列記憶體的空間也較類別記憶體的空間容易掌握。

例題 ko3_11使用類別宣告各種資料型態