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
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.
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;
}