Inserciones de matriz

En la sección anterior, hemos aprendido cómo funciona la operación de inserción. No siempre es necesario que se inserte un elemento al final de una matriz. Lo siguiente puede ser una situación con inserción de matriz:

  • Inserción al comienzo de una matriz
  • Inserción en el índice dado de una matriz
  • Inserción después del índice dado de una matriz
  • Inserción antes del índice dado de una matriz

Inserción al principio de una matriz

Cuando la inserción ocurre al principio, hace que todos los elementos de datos existentes se desplace un paso hacia abajo. Aquí, diseñamos e implementamos un algoritmo para insertar un elemento al comienzo de una matriz.

Algoritmo

Asumimos A es una matriz con Nelementos. El número máximo de elementos que puede almacenar está definido porMAX. Primero comprobaremos si una matriz tiene algún espacio vacío para almacenar algún elemento y luego procedemos con el proceso de inserción.

begin

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

Implementación en 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]);
   }
}

Este programa debería producir el siguiente resultado:

Salida

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

Inserción en el índice dado de una matriz

En este escenario, se nos da la ubicación exacta (index) de una matriz donde un nuevo elemento de datos (value) debe insertarse. Primero verificaremos si la matriz está llena, si no lo está, entonces moveremos todos los elementos de datos desde esa ubicación un paso hacia abajo. Esto dejará espacio para un nuevo elemento de datos.

Algoritmo

Asumimos A es una matriz con Nelementos. El número máximo de elementos que puede almacenar está definido porMAX.

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

Implementación en 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]);
   }
}

Si compilamos y ejecutamos el programa anterior, producirá el siguiente resultado:

Salida

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

Inserción después del índice dado de una matriz

En este escenario, se nos da una ubicación (index) de una matriz después de la cual un nuevo elemento de datos (value) debe insertarse. Solo varía el proceso de búsqueda, el resto de actividades son las mismas que en el ejemplo anterior.

Algoritmo

Asumimos A es una matriz con Nelementos. El número máximo de elementos que puede almacenar está definido porMAX.

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

Implementación en 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]);
   }
}

Si compilamos y ejecutamos el programa anterior, producirá el siguiente resultado:

Salida

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

Inserción antes del índice dado de una matriz

En este escenario, se nos da una ubicación (index) de una matriz antes del cual un nuevo elemento de datos (value) debe insertarse. Esta vez buscamos hastaindex-1 es decir, una ubicación por delante del índice dado, el resto de las actividades son las mismas que en el ejemplo anterior.

Algoritmo

Asumimos A es una matriz con Nelementos. El número máximo de elementos que puede almacenar está definido porMAX.

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

Implementación en 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]);
   }
}

Si compilamos y ejecutamos el programa anterior, producirá el siguiente resultado:

Salida

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