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