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