陣列是一個容器,該容器可容納固定數目專案,這些專案應該都是相同的型別。大多數的資料結構的利用陣列來實現它們的演算法。以下我們來了解陣列中的概念和一些重要的術語。
元素 ? 儲存在陣列中的每個項被稱為一個元素。
索引 ? 在一個陣列元素所在的每個位置,是具有一個用於識別該元素的數值索引。
按照如上所示圖中,以下是要考慮的重要問題。
索引從 0 開始
陣列的長度為 8,這意味著它可以儲存 8 個元素。
每個元素可以通過它的索引來存取。例如,我們可以在索引6獲取元素的值:9。
以下是由陣列所支援的基本操作。
遍歷 ? 一個一個地列印所有的陣列元素。
插入 ? 給定索引處新增(插入)元素。
刪除 ? 刪除給定索引處的元素。
搜尋 ? 搜尋用特定索引或元素值。
更新 ? 更新給定索引處的元素。
在C語言中,當初始化一個陣列大小,然後將其分配元素的預設值,在下列順序。
資料型別 | 預設值 |
---|---|
bool | false |
char | 0 |
int | 0 |
float | 0.0 |
double | 0.0f |
void | |
wchar_t | 0 |
插入操作是插入一個或多個資料元素到一個陣列。根據要求,新元素可以在開始,結束或陣列中的任何給定的索引位置加入。
在這裡,可以看到插入操作的實際執行,我們在陣列的末尾新增(插入)資料 ?
陣列是一個有 MAX 個元素的線性無序陣列。
結果
LA是一個線性陣列(無序)配有N個元素,K是正整數且 K<= N。 下面就是 ITEM 插入到 LA 的第 K 個位置的演算法
1. Start 2. Set J = N 3. Set N = N+1 4. Repeat steps 5 and 6 while J >= K 5. Set LA[J+1] = LA[J] 6. Set J = J-1 7. Set LA[K] = ITEM 8. Stop
下面是上述演算法的執行 ?
#include <stdio.h> main() { int LA[] = {1,3,5,7,8}; int item = 10, k = 3, n = 5; int i = 0, j = n; printf("The original array elements are :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } n = n + 1; while( j >= k){ LA[j+1] = LA[j]; j = j - 1; } LA[k] = item; printf("The array elements after insertion :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } }
當編譯和執行,上面的程式產生以下結果 -
The original array elements are : LA[0]=1 LA[1]=3 LA[2]=5 LA[3]=7 LA[4]=8 The array elements after insertion : LA[0]=1 LA[1]=3 LA[2]=5 LA[3]=10 LA[4]=7 LA[5]=8
刪除指從陣列中刪除去現有元素,並重新組織陣列的所有元素。
考慮 LA 是一個具有 n 個元素線性陣列,以及 K 是正整數,其中 K<= N。下面的演算法是刪除在 LA 中第 K 個位置的可用元素。
1. Start 2. Set J = K 3. Repeat steps 4 and 5 while J < N 4. Set LA[J-1] = LA[J] 5. Set J = J+1 6. Set N = N-1 7. Stop
下面是上述演算法的執行 ?
#include <stdio.h> main() { int LA[] = {1,3,5,7,8}; int k = 3, n = 5; int i, j; printf("The original array elements are :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } j = k; while( j < n){ LA[j-1] = LA[j]; j = j + 1; } n = n -1; printf("The array elements after deletion :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } }
當編譯和執行,上面的程式產生以下結果 -
The original array elements are : LA[0]=1 LA[1]=3 LA[2]=5 LA[3]=7 LA[4]=8 The array elements after deletion : LA[0]=1 LA[1]=3 LA[2]=7 LA[3]=8
可以在陣列元素的值或它的索引執行搜尋。
考慮 LA 是一個具有 n 個元素線性陣列,以及 K 是正整數,如 K<= N。下面的演算法是使用順序搜尋找出元素 ITEM 的值。
1. Start 2. Set J = 0 3. Repeat steps 4 and 5 while J < N 4. IF LA[J] is equal ITEM THEN GOTO STEP 6 5. Set J = J +1 6. PRINT J, ITEM 7. Stop
下面是上述演算法的執行 -
#include <stdio.h> main() { int LA[] = {1,3,5,7,8}; int item = 5, n = 5; int i = 0, j = 0; printf("The original array elements are :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } while( j < n){ if( LA[j] == item ){ break; } j = j + 1; } printf("Found element %d at position %d\n", item, j+1); }
當編譯和執行,上面的程式產生以下結果 -
The original array elements are : LA[0]=1 LA[1]=3 LA[2]=5 LA[3]=7 LA[4]=8 Found element 5 at position 3
更新操作是從陣列指定索引處更新指定的現有元素。
考慮 LA 是一個具有 n 個元素線性陣列,K是正整數,且 K<= N。下面演算法是更新在 LA 的第K個位置的可用元素。
1. Start 2. Set LA[K-1] = ITEM 3. Stop
下面是上述演算法的執行
#include <stdio.h> main() { int LA[] = {1,3,5,7,8}; int k = 3, n = 5, item = 10; int i, j; printf("The original array elements are :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } LA[k-1] = item; printf("The array elements after updation :\n"); for(i = 0; i<n; i++) { printf("LA[%d] = %d \n", i, LA[i]); } }
當編譯和執行,上面的程式產生以下結果
The original array elements are : LA[0]=1 LA[1]=3 LA[2]=5 LA[3]=7 LA[4]=8 The array elements after updation : LA[0]=1 LA[1]=3 LA[2]=10 LA[3]=7 LA[4]=8