Desenvolva uma função para testar se uma pilha P1 tem mais elementos que uma pilha P2.
Passo 1
Temos duas pilhas P1 e P2 e queremos saber se P1 tem mais elementos que P2. O conteúdo envolve operações básicas de pilha (vazia, desempilhar, empilhar) e precisamos preservar o estado original das pilhas após o teste.
Passo 2
A ideia é usar uma pilha auxiliar Aux para ir desempilhando simultaneamente de P1 e P2. Cada vez que desempilhamos um elemento de P1 e outro de P2, empilhamos ambos em Aux, mantendo a correspondência.
Quando a repetição parar, pelo menos uma das pilhas (P1 ou P2) estará vazia. Se P1 não estiver vazia, significa que ela tinha mais elementos. Se P1 estiver vazia, então P1 não tem mais elementos que P2.
Quando a repetição parar, pelo menos uma das pilhas (P1 ou P2) estará vazia. Se P1 não estiver vazia, significa que ela tinha mais elementos. Se P1 estiver vazia, então P1 não tem mais elementos que P2.
Passo 3
Depois de determinar qual pilha é maior, ainda temos todos os elementos em Aux. Precisamos restaurar P1 e P2 ao estado original. Como empilhamos em Aux na ordem P1, P2 a cada passo, basta desempilhar de Aux e recolocar em P2 e depois em P1, invertendo o processo.
Retornamos true se P1 tiver mais elementos, false caso contrário. Assim garantimos que P1 e P2 fiquem como estavam antes da chamada da função.
Retornamos true se P1 tiver mais elementos, false caso contrário. Assim garantimos que P1 e P2 fiquem como estavam antes da chamada da função.
Resposta
função testaMaior(P1, P2):
// cria pilha auxiliar vazia
Aux ← nova Pilha()
// cria pilha auxiliar vazia
Aux ← nova Pilha()
// desempilha de ambas até uma ficar vazia
enquanto ¬P1.vazia() e ¬P2.vazia() faça
Aux.empilha(P1.desempilha())
Aux.empilha(P2.desempilha())
fim enquanto
// se P1 não estiver vazia, então tinha mais elementos
se ¬P1.vazia() então
resultado ← verdadeiro
senão
resultado ← falso
fim se
// restaura as pilhas ao estado original
enquanto ¬Aux.vazia() faça
P2.empilha(Aux.desempilha())
P1.empilha(Aux.desempilha())
fim enquanto
retorne resultado