Inserimenti di array

Nella sezione precedente abbiamo appreso come funziona l'operazione di inserimento. Non è sempre necessario che un elemento venga inserito alla fine di un array. Di seguito può essere una situazione con l'inserimento di array:

  • Inserimento all'inizio di un array
  • Inserimento all'indice dato di un array
  • Inserimento dopo l'indice dato di un array
  • Inserimento prima dell'indice dato di un array

Inserimento all'inizio di un array

Quando l'inserimento avviene all'inizio, fa sì che tutti gli elementi di dati esistenti si spostino di un passo verso il basso. Qui, progettiamo e implementiamo un algoritmo per inserire un elemento all'inizio di un array.

Algoritmo

Assumiamo A è un array con Nelementi. Il numero massimo di elementi che può memorizzare è definito daMAX. Verificheremo prima se un array ha uno spazio vuoto per memorizzare qualsiasi elemento e poi procederemo con il processo di inserimento.

begin

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

Implementazione in 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]);
   }
}

Questo programma dovrebbe produrre il seguente output:

Produzione

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

Inserimento nell'indice dato di una matrice

In questo scenario, ci viene fornita la posizione esatta (index) di un array in cui un nuovo elemento dati (value) deve essere inserito. Per prima cosa controlleremo se l'array è pieno, se non lo è, quindi sposteremo tutti gli elementi di dati da quella posizione un passo verso il basso. Questo farà spazio a un nuovo elemento di dati.

Algoritmo

Assumiamo A è un array con Nelementi. Il numero massimo di elementi che può memorizzare è definito daMAX.

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

Implementazione in 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]);
   }
}

Se compiliamo ed eseguiamo il programma sopra, produrrà il seguente risultato:

Produzione

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

Inserimento dopo l'indice dato di una matrice

In questo scenario ci viene data una posizione (index) di un array dopo il quale un nuovo elemento dati (value) deve essere inserito. Solo il processo di ricerca varia, il resto delle attività sono le stesse dell'esempio precedente.

Algoritmo

Assumiamo A è un array con Nelementi. Il numero massimo di elementi che può memorizzare è definito daMAX.

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

Implementazione in 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 value 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]);
   }
}

Se compiliamo ed eseguiamo il programma sopra, produrrà il seguente risultato:

Produzione

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

Inserimento prima dell'indice dato di una matrice

In questo scenario ci viene data una posizione (index) di un array prima del quale un nuovo elemento di dati (value) deve essere inserito. Questa volta cerchiamo fino aindex-1 cioè, una posizione prima dell'indice dato, il resto delle attività è uguale all'esempio precedente.

Algoritmo

Assumiamo A è un array con Nelementi. Il numero massimo di elementi che può memorizzare è definito daMAX.

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

Implementazione in 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 value 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]);
   }
}

Se compiliamo ed eseguiamo il programma sopra, produrrà il seguente risultato:

Produzione

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