Inserções de matriz

Na seção anterior, aprendemos como funciona a operação de inserção. Nem sempre é necessário que um elemento seja inserido no final de uma matriz. A seguir pode ser uma situação com a inserção de matriz -

  • Inserção no início de uma matriz
  • Inserção no índice dado de uma matriz
  • Inserção após o índice dado de uma matriz
  • Inserção antes do índice dado de uma matriz

Inserção no início de uma matriz

Quando a inserção acontece no início, ela faz com que todos os itens de dados existentes sejam deslocados um passo para baixo. Aqui, projetamos e implementamos um algoritmo para inserir um elemento no início de um array.

Algoritmo

Nós presumimos A é um array com Nelementos O número máximo de elementos que ele pode armazenar é definido porMAX. Devemos primeiro verificar se um array tem algum espaço vazio para armazenar algum elemento e então prosseguir com o processo de inserção.

begin

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

Implementação em 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 deve produzir a seguinte saída -

Resultado

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

Inserção no Índice Dado de uma Matriz

Neste cenário, recebemos a localização exata (index) de uma matriz onde um novo elemento de dados (value) precisa ser inserido. Primeiro, devemos verificar se o array está cheio, se não estiver, então devemos mover todos os elementos de dados daquele local um passo para baixo. Isso abrirá espaço para um novo elemento de dados.

Algoritmo

Nós presumimos A é um array com Nelementos O número máximo de elementos que ele pode armazenar é 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

Implementação em 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 compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -

Resultado

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

Inserção após o índice fornecido de uma matriz

Neste cenário, recebemos uma localização (index) de uma matriz após a qual um novo elemento de dados (value) tem de ser inserido. Apenas o processo de busca varia, o resto das atividades são as mesmas do exemplo anterior.

Algoritmo

Nós presumimos A é um array com Nelementos O número máximo de elementos que ele pode armazenar é 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

Implementação em 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 compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -

Resultado

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

Inserção antes do índice fornecido de uma matriz

Neste cenário, recebemos uma localização (index) de uma matriz antes da qual um novo elemento de dados (value) tem de ser inserido. Desta vez, buscamos atéindex-1 ou seja, um local à frente de determinado índice, o restante das atividades são as mesmas do exemplo anterior.

Algoritmo

Nós presumimos A é um array com Nelementos O número máximo de elementos que ele pode armazenar é 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

Implementação em 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 compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -

Resultado

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