• Matéria: Informática
  • Autor: franciscoesleyloiola
  • Perguntado 4 anos atrás

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.

Respostas

respondido por: alexandrevaladao
1

Resposta:

Explicação:

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.

Acho que é isso.


kalsanto: @alexandrevaladao sua resposta esta errada, para esse exercício é necessário inserir os códigos solicitados e fazer uma narrativa do que aconteceu com o código, não é só responder o que é pilha.
alexandrevaladao: Obrigado
alexandrevaladao: Sabe como é?
respondido por: laurijm
9

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 vairável p.ultimo irá receber o valor 0

2 - Foi executo 3 vezes a função PUSH(); Ele irá inserir 3 regsistros, 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 simuilar 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;

}

Perguntas similares