当前位置: 首页 > 文档资料 > 数据结构和算法 >

点击这里

优质
小牛编辑
129浏览
2023-12-01

在上一节中,我们已经了解了插入操作的工作原理。 并不总是需要在数组的末尾插入元素。 以下可能是阵列插入的情况 -

  • 在数组的开头插入
  • 在数组的给定索引处插入
  • 在给定的数组索引之后插入
  • 在给定的数组索引之前插入

在数组的开头插入

当插入发生在开头时,它会导致所有现有数据项向下移动一步。 在这里,我们设计并实现了一种在数组开头插入元素的算法。

算法 (Algorithm)

我们假设A是一个包含N元素的数组。 它可以存储的最大元素数由MAX定义。 我们将首先检查数组是否有任何空的空间来存储任何元素,然后我们继续插入过程。

begin
IF N = MAX, return
ELSE
   N = N + 1
   For All Elements in A
      Move to next adjacent location
   A[FIRST] = New_Element
end   

在C中实施

#include <stdio.h>
#define MAX 5
void main() {
   int array[MAX] = {2, 3, 4, 5};
   int N = 4;        // number of elements in array
   int i = 0;        // loop variable
   int value = 1;    // new data element to be stored in array
   // print array before insertion
   printf("Printing array before insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d \n", i, array[i]);
   }
   // now shift rest of the elements downwards   
   for(i = N; i >= 0; i--) {
      array[i+1] = array[i];
   }
   // add new element at first position
   array[0] = value;
   // increase N to reflect number of elements
   N++;
   // print to confirm
   printf("Printing array after insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d\n", i, array[i]);
   }
}

该程序应产生以下输出 -

输出 (Output)

Printing array before insertion −
array[0] = 2
array[1] = 3
array[2] = 4
array[3] = 5
Printing array after insertion −
array[0] = 0
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5

在数组的给定索引处插入

在这种情况下,我们给出了需要插入新数据元素( value )的数组的确切位置( index )。 首先,我们将检查阵列是否已满,如果不是,则我们将从该位置向下移动所有数据元素一步。 这将为新数据元素腾出空间。

算法 (Algorithm)

我们假设A是一个包含N元素的数组。 它可以存储的最大元素数由MAX定义。

begin
IF N = MAX, return
ELSE
   N = N + 1
   SEEK Location index
   For All Elements from A[index] to A[N]
      Move to next adjacent location
   A[index] = New_Element
end   

在C中实施

#include <stdio.h>
#define MAX 5
void main() {
   int array[MAX] = {1, 2, 4, 5};
   int N = 4;        // number of elements in array
   int i = 0;        // loop variable
   int index = 2;    // index location to insert new value
   int value = 3;    // new data element to be inserted
   // print array before insertion
   printf("Printing array before insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d \n", i, array[i]);
   }
   // now shift rest of the elements downwards   
   for(i = N; i >= index; i--) {
      array[i+1] = array[i];
   }
   // add new element at first position
   array[index] = value;
   // increase N to reflect number of elements
   N++;
   // print to confirm
   printf("Printing array after insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d\n", i, array[i]);
   }
}

如果我们编译并运行上面的程序,它将产生以下结果 -

输出 (Output)

Printing array before insertion −
array[0] = 1
array[1] = 2
array[2] = 4
array[3] = 5
Printing array after insertion −
array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5

在给定的数组索引后插入

在这种情况下,我们得到一个数组的位置( index ),之后必须插入一个新的数据元素( value )。 只有搜索过程变化,其余活动与前一个示例相同。

算法 (Algorithm)

我们假设A是一个包含N元素的数组。 它可以存储的最大元素数由MAX定义。

begin
IF N = MAX, return
ELSE
   N = N + 1
   SEEK Location index
   For All Elements from A[index + 1] to A[N]
      Move to next adjacent location
   A[index + 1] = New_Element
end   

在C中实施

#include <stdio.h>
#define MAX 5
void main() {
   int array[MAX] = {1, 2, 4, 5};
   int N = 4;        // number of elements in array
   int i = 0;        // loop variable
   int index = 1;    // index location after which <b>value</b> will be inserted
   int value = 3;    // new data element to be inserted
   // print array before insertion
   printf("Printing array before insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d \n", i, array[i]);
   }
   // now shift rest of the elements downwards   
   for(i = N; i >= index + 1; i--) {
      array[i + 1] = array[i];
   }
   // add new element at first position
   array[index + 1] = value;
   // increase N to reflect number of elements
   N++;
   // print to confirm
   printf("Printing array after insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d\n", i, array[i]);
   }
}

如果我们编译并运行上面的程序,它将产生以下结果 -

输出 (Output)

Printing array before insertion −
array[0] = 1
array[1] = 2
array[2] = 4
array[3] = 5
Printing array after insertion −
array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5

在给定的数组索引之前插入

在这种情况下,我们得到一个数组的位置( index ),在此之前必须插入一个新的数据元素( value )。 这次我们寻求index-1即在给定指数之前的一个位置,其余的活动与前面的例子相同。

算法 (Algorithm)

我们假设A是一个包含N元素的数组。 它可以存储的最大元素数由MAX定义。

begin
IF N = MAX, return
ELSE
   N = N + 1
   SEEK Location index
   For All Elements from A[index - 1] to A[N]
      Move to next adjacent location
   A[index - 1] = New_Element
end   

在C中实施

#include <stdio.h>
#define MAX 5
void main() {
   int array[MAX] = {1, 2, 4, 5};
   int N = 4;        // number of elements in array
   int i = 0;        // loop variable
   int index = 3;    // index location before which <b>value</b> will be inserted
   int value = 3;    // new data element to be inserted
   // print array before insertion
   printf("Printing array before insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d \n", i, array[i]);
   }
   // now shift rest of the elements downwards   
   for(i = N; i >= index + 1; i--) {
      array[i + 1] = array[i];
   }
   // add new element at first position
   array[index + 1] = value;
   // increase N to reflect number of elements
   N++;
   // print to confirm
   printf("Printing array after insertion −\n");
   for(i = 0; i < N; i++) {
      printf("array[%d] = %d\n", i, array[i]);
   }
}

如果我们编译并运行上面的程序,它将产生以下结果 -

输出 (Output)

Printing array before insertion −
array[0] = 1
array[1] = 2
array[2] = 4
array[3] = 5
Printing array after insertion −
array[0] = 1
array[1] = 2
array[2] = 4
array[3] = 5
array[4] = 3