Considerando a classe ListaEncadeada, o que o interpretador do Python
exibe após cada uma destas operações serem executadas? Tente prever
a resposta e depois use a janela de interações do Python para verificar se
elas estão corretas.
>>> xs = ListaEncadeada()
>>> xs.insere_inicio(8)
>>> xs.insere_fim(2)
>>> xs
?
>>> xs.insere_inicio(5)
>>> len(xs)
?
>>> xs.remove_inicio()
?
>>> xs
?
>>> xs.remove_inicio()
?
>>> xs.remove_inicio()
?
>>> xs.remove_inicio()
?
>>> xs
?Considere o seguinte método definido na classe ListaEncadeada:
def f(self):
p = self._primeiro
q = None
while p != None:
w = p.prox
p.prox = q
q = p
p = w
self._primeiro = q
self._ultimo = pQual é o resultado da execução deste método se a lista tiver os elementos 4, 6, 8, 1? (Faça a execução no papel, usando um desenho, depois use a janela de interações para conferir a resposta). Complete a definição do método escolhendo nomes mais apropriados, fazendo uma descrição do propósito da função e escrevendo testes. Corrija o código para passar em todos os testes se for necessário.
Defina uma função que copie uma lista (do Python) para uma lista encadeada.
Defina uma função que copie uma lista encadeada para uma lista (do Python).
Supondo que não existisse o campo _ultimo na classe ListaEncadeada qual
seria o tempo de execução necessário para inserir e remover no final da
lista. Explique.
Defina um método soma que some todos os elementos de uma lista
encadeada. Faça a análise do tempo de execução deste método.
Defina um método maximo que encontre o valor máximo de uma lista
encadeada. Faça a análise do tempo de execução deste método.
Defina um método limpa que remove todos os elementos de uma lista
encadeada. Faça a análise do tempo de execução deste método.
Defina um método rotaciona que rotaciona um elemento de uma lista
encadeada do início para o fim. Faça a análise do tempo de execução deste
método.
Defina um método remove_todos que remova todas as ocorrências de um
determinado valor de uma lista encadeada. Faça a análise do tempo de
execução deste método.
Defina um método igual que recebe como parâmetro duas listas encadeadas e
verifique se as duas listas são iguais, isto é, tem o mesmo conteúdo. Faça
a análise do tempo de execução deste método.
Defina um método insere_ordenado que insere um novo elemento em uma lista
encadeada ordenada de forma que a lista continue ordenada. Faça a análise do
tempo de execução deste método.
Usando a definição anterior, defina um método ordenada que a partir de uma
lista encadeada crie uma nova lista encadeada ordenada. Faça a análise do
tempo de execução deste método.
Defina a classe PilhaArranjo que implementa uma pilha usando internamente
uma lista do Python (ao invés de ListaEncadeada).
Defina a classe FilaArranjo que implementa uma fila usando internamente
uma lista do Python (ao invés de ListaEncadeada).