数组

数组基础知识

数组是一个容器,该容器可容纳固定数目项目,这些项目应该都是相同的类型。大多数的数据结构的利用数组来实现它们的算法。以下我们来了解数组中的概念和一些重要的术语。

  • 元素 − 存储在数组中的每个项被称为一个元素。

  • 索引 − 在一个数组元素所在的每个位置,是具有一个用于识别该元素的数值索引。

数组表示

Array

按照如上所示图中,以下是要考虑的重要问题。

  • 索引从 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

上一篇: 数据结构基本概念 下一篇: 哈希表