計算機程式設計 - 陣列



考慮這樣一種情況:我們需要儲存五個整數。如果我們使用程式設計的簡單變數和資料型別概念,那麼我們需要五個 `int` 資料型別的變數,程式如下所示:

#include <stdio.h>

int main() {
   int number1;
   int number2;
   int number3;
   int number4;
   int number5;
   
   number1 = 10;      
   number2 = 20;   
   number3 = 30;   
   number4 = 40; 
   number5 = 50;     

   printf( "number1: %d\n", number1);
   printf( "number2: %d\n", number2);
   printf( "number3: %d\n", number3);
   printf( "number4: %d\n", number4);
   printf( "number5: %d\n", number5);
}

這很簡單,因為我們只需要儲存五個整數。現在假設我們需要儲存 5000 個整數。我們要使用 5000 個變數嗎?

為了處理這種情況,幾乎所有程式語言都提供了一個名為陣列的概念。陣列是一種資料結構,可以儲存相同資料型別的固定大小的元素集合。陣列用於儲存資料集合,但通常將陣列視為相同型別變數的集合更有用。

無需宣告單個變數,例如 number1、number2、...、number99,只需宣告一個整數型別的陣列變數 `number`,並使用 number[0]、number[1] 和 ...、number[99] 來表示單個變數。這裡,0、1、2、.....99 是與 `number` 變數關聯的索引,它們用於表示陣列中可用的單個元素。

所有陣列都由連續的記憶體位置組成。最低地址對應於第一個元素,最高地址對應於最後一個元素。

Arrays in C

建立陣列

要在 C 中建立陣列變數,程式設計師需要指定元素的型別和要儲存在該陣列中的元素數量。以下是 C 程式設計中建立陣列的簡單語法:

type arrayName [ arraySize ];

這稱為一維陣列。`arraySize` 必須是一個大於零的整數常量,`type` 可以是任何有效的 C 資料型別。例如,現在要宣告一個名為 `number` 的 10 個元素的 `int` 型別陣列,可以使用以下語句:

int number[10];

這裡,`number` 是一個數組變數,足以容納多達 10 個整數。

初始化陣列

您可以在 C 中逐個初始化陣列,也可以使用以下單一語句進行初始化:

int number[5] = {10, 20, 30, 40, 50};

大括號 { } 中的值的數量不能大於我們在方括號 [ ] 中為陣列宣告的元素數量。

如果您省略陣列的大小,則會建立一個足夠大的陣列來容納初始化。因此,如果您編寫:

int number[] = {10, 20, 30, 40, 50};

您將建立與前面示例中完全相同的陣列。以下是一個為陣列分配單個元素的示例:

number[4] = 50;

上述語句將陣列中的第 5 個元素賦值為 50。所有陣列的第一個元素的索引都是 0,也稱為基索引,陣列的最後一個索引將是陣列的總大小減 1。下圖顯示了我們上面討論的陣列的圖示:

Array Presentation

訪問陣列元素

透過索引陣列名稱來訪問元素。這是透過在陣列名稱之後方括號中放置元素的索引來完成的。例如:

int var = number[9];

上述語句將從陣列中獲取第 10 個元素並將值賦給 `var` 變數。以下示例使用了上述三個概念,即建立、賦值和訪問陣列:

#include <stdio.h>
 
int main () {
   int number[10]; /* number is an array of 10 integers */
   int i = 0;
 
   /* Initialize elements of array n to 0 */         
   while( i < 10 ) {
	
      /* Set element at location i to i + 100 */
      number[ i ] = i + 100;
      i = i + 1;
   }
   
   /* Output each array element's value */
   i = 0;
   while( i < 10 ) {
	
      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }
   
   return 0;
}

編譯並執行上述程式碼後,將產生以下結果:

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

Java 中的陣列

以下是使用 `new` 運算子在 Java 中建立陣列的方式略有不同的等效 Java 程式。

您可以嘗試執行以下程式以檢視輸出,該輸出必須與上述 C 示例生成的相同。

public class DemoJava {
   public static void main(String []args) {
      int[] number = new int[10];
      int i = 0;
      
      while( i < 10 ) {
		
         number[ i ] = i + 100;
         i = i + 1;
      }

      i = 0;
      while( i < 10 ) {
         System.out.format( "number[%d] = %d\n", i, number[i] );
         i = i + 1;
      }
   }
}

執行上述程式後,將產生以下結果:

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

Python 中的陣列(列表)

Python 沒有陣列的概念,而是提供了一種名為列表的其他資料結構,它提供了與任何其他語言中的陣列類似的功能。

以下是 Python 編寫的等效程式:

# Following defines an empty list.
number = []
i = 0

while i < 10:
   # Appending elements in the list
   number.append(i + 100)
   i = i + 1

i = 0
while i < 10:
   # Accessing elements from the list
   print "number[", i,  "] = ", number[ i ]
   i = i + 1

執行上述程式後,將產生以下結果:

number[ 0 ] =  100
number[ 1 ] =  101
number[ 2 ] =  102
number[ 3 ] =  103
number[ 4 ] =  104
number[ 5 ] =  105
number[ 6 ] =  106
number[ 7 ] =  107
number[ 8 ] =  108
number[ 9 ] =  109
廣告