Informática, perguntado por brunarcascone, 7 meses atrás

URGENTE 30 PONTOS
Considere a implementação em linguagem C da estrutura de dados pilha com tamanho fixo.

#define tam 10

struct pilha{
int dados[tam];
int primeiro;
int ultimo;
};

pilha p;

void pop(){
p.dados[p.ultimo-1] = 0;
p.ultimo--;
}


A Pilha é uma das estruturas mais simples e mais versáteis dentre as utilizadas na computação. A pilha é uma estrutura em a entrada e a saída de dados se dão pela mesma extremidade, chamada de topo da pilha. São estruturas conhecidas como Last In, First Out (LIFO), que pode ser traduzido por Último a Entrar, Primeiro a Sair.

OLIVEIRA, Pietro Martins de; Pereira, Rogério de Leon. Estrutura de Dados I. Maringá-Pr.: Unicesumar, 2019.

Você recebeu o código parcialmente implementado, conforme o código apresentado acima. Seu gerente de projetos, solicitou que você complete este código incluindo as funções: inclusão de elementos PUSH(), função de exibir o pilha DISPLAY(), função principal MAIN().

Considere que durante a execução o usuário do programa executou as seguintes ações
1 - Executou a função POP(), porém o vetor está vazio.
2 - Foi executo 3 vezes a função PUSH();
3 - Executou 1 vez a função DISPLAY();

Neste caso específico, descreva o comportamento da pilha mediante a esta sequência de execuções.

Soluções para a tarefa

Respondido por Cristrodki
1

Resposta:

Resposta:

1 - Executou a função POP(), porém o vetor está vazio. O valor p.dados[0] vai ser igual a 0 e a variável p.último irá receber o valor 0

2 - Foi executo 3 vezes a função PUSH(); Ele irá inserir 3 registros, um sendo na posição 0, na posição 1 e posição 2.

3 - Executou 1 vez a função DISPLAY(); irá imprimir na tela o valor digitado na posição 0, na posição 1 e na posição 2, o valor contido no p.ultimo será igual a 2.

OBS.: os valores p.primeiro e p.ultimo foram inicializadas com o valor 1

Explicação:

Abaixo exemplo do código para que possam similar e testar.

#include <iostream>

#include <stdlib.h>

#define tam 10

struct pilha{

   int dados[tam];

   int primeiro;

   int ultimo;

};

pilha p;

int y;

void pop(){

   p.dados[p.ultimo-1] = 0;

   p.ultimo--;

   printf("Ultimo .: %d \n", p.ultimo);

}

void push()

{

 if ( p.ultimo <= tam ) // obedecendo tamanho limitado

   {

     printf("\n---------- Inserir dados na pilha -----------\n\n\n");

     printf("Digite o valor que deseja inserir.: ");

     if (p.ultimo <= 0 )  // Verifica caso o usuário tenha feito um excluir com a estrutura vazia, volta o primeiro vetor para a ultima posição digitada para que o programa não se perca.

       {

         p.primeiro = p.ultimo;

       }

     scanf("%i", &p.dados[p.ultimo]);

     p.ultimo++;

   }

  else

   {

      printf("\n---------- Pilha de dados está cheia favor apagar primeiro !-----------\n\n\n"); // Avisa que já ultrapassou a quantidade definida no início do programa

   }

}

void display()

{

 int contador;

 for (contador = p.primeiro; contador <= p.ultimo-1; contador++) //carrega o contador para impressão desde o primeiro registro até o ultimo registro da estrutura

   {

     printf("Dados.:%d =  %d \n\n", contador , p.dados[contador]);

   }

 printf("Primeiro.:  %d \n", p.primeiro);

 printf("Ultimo .: %d \n", p.ultimo-1);

}

int main()

{

 p.primeiro = 1; // carregando valores para as variáveis

 p.ultimo = 1;   // carregando valores para as variáveis.

while (y != 4 )

{

   printf("\n\n\n Escolha uma das opções abaixo.:\n");

   printf("Digite 1 para.: Inserir dados (push)\n");

   printf("Digite 2 para.: Excluir um registro (pop)\n");

   printf("Digite 3 para.: imprimir Pilha de dados (Display)\n");

   printf("Digite 4 para.: Sair\n");

   scanf("%i", &y);

   switch (y)

     {

       case 1 :

         push();

         break;

       case 2 :

         pop();

         break;

       case 3 :

         display();

         break;

       default :

         break;

     }

   }

return 0;

}

@laurijm

Perguntas interessantes