基礎資料結構-陣列(Array)
儲存一堆資料,最直覺的方式是使用一維陣列(Array) 。
Array的特點:
- 佔據一塊連續的記憶體空間
- 裡面每個物件會使用的空間大小都是相同的
- 每個物件的空間會依序標上編號,稱為索引(Index),通常是從 0 開始
Array結構的屬性:
- 起始位址:表示陣列名稱(或陣列第一個元素)所在記憶體中的起始位址。
- 維度(dimension):代表此陣列為幾維陣列,如一維陣列、二維陣列、三維陣列等等。
- 索引上下限:指元素在此陣列中,記憶體所儲存位置的上標與下標。
- 陣列元素個數:是索引上限與索引下限的差+1 。
- 陣列型態:宣告此陣列的型態, 它決定陣列元素在記憶體所佔有的大小。
陣列(Array)的運作(operator)
operator[](int index) O(1)
2維陣列
以列為主(Row-Major) 若第一個元素為A[0, 0],位址公式為: 公式:A[i,j] = I0 + (i × n + j)×d
以行為主(Column-Major) 若第一個元素為A[0, 0],位址公式為: 公式:A[i,j] = I0 + (i + j × m )× d
C語言的陣列宣告
{% raw %}
int a[20];//一維陣列宣告
int m[20][8];//二維陣列宣告
//example
#include <stdio.h>
int main(){
int i,j;
int m[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf("%2d ", m[i][j]);
}
printf("\n");
}
return 0;
}
{% endraw %}
Java語言的陣列宣告
{% raw %}
int[] a = new int[20]; //一維陣列宣告
int[][] m = new int[20][8];//二維陣列宣告
//example
public class Ex1Class {
public static void main(String[] args) {
int[][] m = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
System.out.println("Hello world");
for (int i=0; i<3; i++) {
for (int j=0; j<4; j++) {
System.out.printf("%2d ", m[i][j]);
}
System.out.println();
}
}
}
{% endraw %}
Go語言的陣列宣告
{% raw %}
var a [20]int //一維陣列宣告
var a = [20][8]int //二維陣列宣告
//example
func main() {
m := [3][4]int{{1,2,3,4},{5,6,7,8},{9,10,11,12}}
for i := 0; i < 3; i++ {
for j := 0; j < 4; j++{
fmt.Printf("%2d ", m[i][j])
}
fmt.Println()
}
}
{% endraw %}
習題
1.撰寫程式hw6a找出一維陣列{12, 6, 4, 8, 9, 16, 7, 11, 8}之最大與最小值 2.設計程式hw6b計算兩二維陣列之和,{{1,2,3,4},{9,10,11,12}, {5,6,7,8}} {{4,7,1,2},{1,6,6,5},{9,1,3,7}}