Dando continuidade ao estudo da estrutura de dados dinâmica do tipo pilha, vamos aprender nesta aula como fazer a operação pop. Como desempilhar um nó na estrutura de dados pilha?
Perceba que desempilhar, remover um elemento da pilha, significa alterar o topo da nossa pilha, ou seja, alterar o conteúdo de uma variável ponteiro que será declarada na função main.
Como vamos retornar o ponteiro para o nó que será removido, não podemos então retornar também o ponteiro para o novo topo. Assim, essa alteração precisa ser feita aqui dentro da nossa função. Para fazer isso, alterar o conteúdo de uma variável declarada em outra função / procedimento, precisamos receber o endereço dessa variável, como vimos no módulo sobre ponteiros. Isso implica em receber como parâmetro um ponteiro pra ponteiro, o endereço da variável declarada na função main que contém o endereço do topo da pilha, assim:
// assinatura da função desempilhar No* desempilhar(No **topo)
Pode ser que a pilha esteja vazia, então o primeiro teste que faremos é este, verificar se o conteúdo da variável topo é diferente de NULL.
// verificando se a pilha não está vazia
if(*topo != NULL){
printf("\nExiste ao menos 1 nó\n");
...
}
else
printf("\nPilha vazia!\n");
Se a pilha não estiver vazia, vamos criar um ponteiro chamado remover que irá receber o endereço do topo da nossa pilha (o conteúdo da variável topo é o endereço do topo da pilha). Em seguida, precisamos alterar o topo (variável declarada na função main). O novo topo agora é o próximo do remover. Por fim, retornamos o ponteiro remover
Código completo em C para a operação pop em nossa estrutura de dados pilha
// função para desempilhar (operação pop) o nó do topo da pilha
No* desempilhar(No **topo){
if(*topo != NULL){
No *remover = *topo;
*topo = remover->proximo;
return remover;
}
else
printf("\nPilha vazia!\n");
return NULL;
}
