数组基础知识
数组是一个容器,该容器可容纳固定数目项目,这些项目应该都是相同的类型。大多数的数据结构的利用数组来实现它们的算法。以下我们来了解数组中的概念和一些重要的术语。
-
元素 − 存储在数组中的每个项被称为一个元素。
-
索引 − 在一个数组元素所在的每个位置,是具有一个用于识别该元素的数值索引。
数组表示

按照如上所示图中,以下是要考虑的重要问题。
-
索引从 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