Faça uma função que receba uma pilha como argumento e retorne o valor armazenado em seu topo. A função deve remover também esse elemento.
Passo 1
O enunciado pede para criarmos a operação de remoção de um elemento no topo de uma pilha (pop): isso envolve retornar o valor que está no topo e também removê-lo. O conteúdo é a estrutura de dados pilha e suas operações básicas.
Passo 2
Vamos modelar a pilha como uma estrutura que contém um vetor de elementos e um inteiro que indica a posição do topo (número de elementos). Sempre que empilhamos incrementamos esse índice; ao desempilhar, vamos decrementar.
Passo 3
Na função de desempilhar, o primeiro passo é verificar se a pilha está vazia, isto é, se o índice do topo é zero. Se estiver vazia, não há elemento para remover, então podemos sinalizar erro ou tratar adequadamente.
Se a pilha não estiver vazia, vamos decrementar o índice do topo em 1. Dessa forma, removemos logicamente o último elemento inserido.
Se a pilha não estiver vazia, vamos decrementar o índice do topo em 1. Dessa forma, removemos logicamente o último elemento inserido.
Passo 4
Por fim, retornamos o valor que estava nessa posição (inicialmente em topo–1). Esse valor é a resposta da operação de pop.
Resposta
// Definição da pilha
#define MAX 100
#define MAX 100
typedef struct {
int elementos[MAX];
int topo; // número de elementos na pilha
} Pilha;
int elementos[MAX];
int topo; // número de elementos na pilha
} Pilha;
// Função que desempilha e retorna o valor do topo
int desempilhar(Pilha *p) {
if (p->topo == 0) {
// pilha vazia: tratar erro conforme necessidade
printf(“Erro: pilha vazia\n”);
exit(EXIT_FAILURE);
}
p->topo–; // decrementa o topo (remove elemento)
return p->elementos[p->topo]; // retorna o valor removido
}
int desempilhar(Pilha *p) {
if (p->topo == 0) {
// pilha vazia: tratar erro conforme necessidade
printf(“Erro: pilha vazia\n”);
exit(EXIT_FAILURE);
}
p->topo–; // decrementa o topo (remove elemento)
return p->elementos[p->topo]; // retorna o valor removido
}