Pilhas podem ser implementadas em Python por meio de listas ...

Próximas questões
Com base no mesmo assunto
Q2319358 Programação
Pilhas podem ser implementadas em Python por meio de listas em que o último elemento é o topo da pilha, como no exemplo abaixo:

pilha01 = ['a4', 'a3', 'a2', 'a1'] # o elemento 'a1' está                                                      # no topo da pilha

pilha02 = ['b2', 'b1'] # o elemento 'b1' está no topo da pilha

Considere uma função Python, chamada unifica, que recebe duas pilhas como parâmetros e retorna uma terceira, que é o resultado da intercalação dos elementos das duas pilhas recebidas como parâmetros. Um programa Python chamou essa função unifica, passando como parâmetros as duas pilhas do exemplo acima (pilha01 e pilha02). O resultado da intercalação foi a pilha

['a4', 'a3', 'b2', 'a2', 'b1', 'a1']

Qual implementação da função unifica realiza o que foi descrito acima?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D.

Esta questão aborda o conceito de pilhas e como elas podem ser implementadas e manipuladas em Python utilizando listas. Uma pilha é uma estrutura de dados onde o último elemento a ser inserido é o primeiro a ser removido, o que também é conhecido como comportamento LIFO (Last-In, First-Out).

No contexto desta questão, você precisa compreender como os métodos append e pop funcionam em listas do Python. O método append adiciona um elemento ao final da lista, enquanto o método pop remove o último elemento da lista e o retorna.

A função unifica deve intercalar os elementos de duas pilhas, e a alternativa D realiza essa tarefa corretamente. Ela considera que as duas pilhas podem ter tamanhos diferentes, por isso utiliza a condição or no loop while, garantindo que todos os elementos de ambas as pilhas serão intercalados enquanto houver elementos em pelo menos uma das pilhas.

Além disso, o uso de duas verificações de tamanho com if len(p1) != 0 e if len(p2) != 0 antes de chamar o método pop assegura que a tentativa de remover um elemento de uma pilha vazia não ocorra, evitando um erro.

Por fim, a alternativa correta adiciona os elementos intercalados a uma lista temporária p3 e depois os transfere para a lista p4 usando outro loop while com pop. Isso é necessário porque a cada pop na lista p3, o elemento é removido do final, que é o topo da pilha na representação escolhida, invertendo a ordem dos elementos e assegurando que o resultado final esteja na ordem correta da intercalação desejada quando retornados na lista p4.

Essa abordagem é a que condiz com a descrição dada no enunciado da intercalação desejada, resultando na pilha ['a4', 'a3', 'b2', 'a2', 'b1', 'a1'].

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

GABARITO LETRA: D

pilha1 = ['a4', 'a3', 'a2', 'a1']

pilha2 = ['b2', 'b1']

def unifica(p1, p2):     

  p3 = [ ]     

  p4 = [ ]

  while len(p1) > 0 or len(p2) > 0: //Roda enquanto pelo menos uma das pilhas tiverem tamanho maior que 0

    if len(p1) != 0:

      p3.append(p1.pop()) //Adiciona com 'append' no p3 pegando do p1 com 'pop' o último elemento da pilha

    if len(p2) != 0:

      p3.append(p2.pop()) // Em sequência faz a mesma coisa com p2

  while len(p3) > 0:

      p4.append(p3.pop()) //Já aqui a lista é colocada na p4 invertendo ela, caso contrario ela começaria com

  return p4 // a1 já que foi o primeiro elemento a ser adicionado na p3

Letra A: Errado pois os primeiros While fará com que toda a pilha1 seja adicionada e depois toda a pilha2, e a questão mostra no resultado uma lista intercalando as duas.

Letra B: Errada pois a condição And no primeiro While impedirá que o laço execute até o último elemento da lista maior.

Letra C: A mesma coisa da letra B.

Letra E: A mesma coisa da letra A.

Cara, que zona de questão, as alternativas todas desorganizadas

oque fez eu matar a questão foi o OR, o while tem que rodar até que as duas listas estejam vazias

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo