想象一下,你現在是一名老師,要記錄班級裏5個同學的數學成績。如果不用數組,你可能會這樣做:記錄第一個同學成績用 score1 = 90,第二個同學 score2 = 85,第三個 score3 = 95…… 但如果班級有100個同學,要寫100個這樣的變量,不僅麻煩,而且管理所有成績時,你得一個個找、一個個改,效率極低。

這時候,數組就能派上用場了!數組就像一個“有序的容器”,可以把所有同學的成績打包成一個整體,讓你能方便地訪問、管理這些數據。

一、數組到底是什麼?

簡單來說,數組(Array)是一組相同類型的數據元素,按照一定順序排列,每個元素通過“索引”(也就是位置編號)來訪問

舉個例子,上面的5個同學成績,可以用一個數組表示爲:
scores = [90, 85, 95, 78, 92]

這裏:
- scores 是數組的名字(變量名);
- 方括號 [] 裏的是數組的“元素”,每個元素都是數字(類型相同);
- 每個元素都有一個“位置編號”,我們稱之爲“索引”,從 0 開始。

二、數組的核心結構:索引與訪問

數組最關鍵的特點是索引從0開始。第一個元素的位置是 0,第二個是 1,第三個是 2,以此類推。

1. 聲明與初始化

不同編程語言聲明數組的語法略有不同,但核心思想一致。以 Python 爲例:

# 聲明一個空數組(長度5),或直接初始化(已知元素)
scores = [90, 85, 95, 78, 92]  # 長度爲5的數組
scores = [0] * 5               # 聲明長度爲5的數組,元素全爲0

2. 訪問元素

要獲取數組中的某個元素,直接用“數組名[索引]”即可。比如:

print(scores[0])  # 輸出第一個元素:90
print(scores[3])  # 輸出第四個元素:78

注意:如果索引超出數組長度(比如數組只有5個元素,你訪問 scores[5]),就會報錯(比如 Python 會提示 IndexError),所以索引範圍要在 0長度-1 之間。

三、數組的基本操作

1. 遍歷數組

“遍歷”就是按順序訪問數組中的所有元素。用循環就能輕鬆實現:

for score in scores:
    print(score)  # 依次打印90、85、95、78、92

2. 插入元素

假設我們要給數組插入一個新成績(比如第6個同學,成績80),並放在第3個位置(索引2)。此時需要:
- 把索引2及之後的元素向後移動一位(原索引2的95→索引3,原索引3的78→索引4,原索引4的92→索引5);
- 將新成績80放在索引2的位置。

操作後數組變成:[90, 85, 80, 95, 78, 92]

3. 刪除元素

如果要刪除索引2的元素(比如成績80),則需要:
- 將索引3及之後的元素向前移動一位(原索引3的95→索引2,原索引4的78→索引3,原索引5的92→索引4);

操作後數組變成:[90, 85, 95, 78, 92]

四、數組的特點與優缺點

1. 核心特點

  • 類型相同:數組中所有元素必須是同一種數據類型(比如全是整數、全是字符串,不能混合不同類型,除非語言允許動態類型,如 Python 的列表);
  • 索引從0開始:第一個元素位置爲 0,方便計算地址;
  • 連續存儲:元素在內存中是連續排列的,因此可以通過索引直接定位,訪問速度極快。

2. 優缺點

  • 優點:訪問速度快(通過索引直接定位,時間複雜度 O(1));
  • 缺點:插入/刪除效率低(需要移動後續元素,時間複雜度 O(n),n 爲數組長度);靜態數組大小固定(無法動態擴容)。

五、爲什麼要學數組?

數組是數據結構的“基石”。你可能會想:“數組這麼簡單,有什麼用?”其實,後續學習的鏈表、棧、隊列、哈希表等結構,很多都是基於數組的思想設計的。比如:
- 棧可以用數組實現“後進先出”;
- 哈希表的底層存儲也常依賴數組的索引特性。

理解數組的核心思想(“通過索引快速訪問、連續存儲”),能幫你更清晰地分析和設計其他複雜結構。

總結

數組是一組相同類型數據的有序集合,通過索引從0開始訪問,元素在內存中連續存儲。它的優勢是訪問快,缺點是插入/刪除麻煩。雖然看似簡單,但它是所有數據結構的基礎。掌握數組,你就能邁出數據結構學習的第一步!

小夜