Questão
ID 67569Disciplina: Tecnologia da Informação
Assuntos: Conceitos Básicos de Algoritmos e Estrutura de Dados, Pilhas
Ano: 2025 Banca: PERFIL - ENADE Órgão: Quarto Simulado Pnd
Um professor de Algoritmos e Estruturas de Dados está ensinando sobre a estrutura de dados 'Pilha' (Stack). Ele quer que seus alunos compreendam a política de acesso LIFO (Last-In, First-Out) da pilha e suas aplicações práticas na computação. Ele usa a analogia de uma 'pilha de pratos': "Você só pode adicionar um novo prato no topo da pilha, e você só pode remover o prato que está no topo. O último prato que você colocou é o primeiro que você tira. As duas operações principais de uma pilha são **push** (adicionar um item ao topo) e **pop** (remover o item do topo)." Para contextualizar a aplicação, ele explica como as pilhas são usadas para gerenciar chamadas de função em quase todas as linguagens de programação. Ele apresenta um trecho de um livro sobre compiladores: "Quando uma função A chama uma função B, o estado atual da função A (suas variáveis locais, o endereço de retorno) é 'empilhado' em uma estrutura de dados chamada 'pilha de chamadas' (call stack). O controle é então transferido para a função B. Se a função B chamar uma função C, o estado de B é empilhado em cima do de A. Quando a função C termina, seu estado é 'desempilhado' (pop) da pilha, e o controle retorna para B. Quando B termina, seu estado é desempilhado, e o controle retorna para A. A estrutura LIFO da pilha garante que as funções retornem na ordem inversa em que foram chamadas."
Ele então apresenta o seguinte cenário de chamadas de função: `main()` chama `funcaoA()`. `funcaoA()` chama `funcaoB()`. `funcaoB()` executa e termina.
Qual é a sequência correta de operações `push` e `pop` na pilha de chamadas para este cenário?