基礎資料結構-陣列(Array)

儲存一堆資料,最直覺的方式是使用一維陣列(Array) A[0],A[1],...A[n]A[0], A[1], ...A[n]

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}}

results matching ""

    No results matching ""