Uma rede de lojas de produtos naturais utiliza um sistema automatizado para planejar as rotas de entrega
dos caminhões. Cada parada da rota representa uma loja que deve ser visitada. No sistema antigo, sempre
que uma nova loja era adicionada no meio da rota, era necessário realocar todos os elementos da estrutura,
resultando em lentidão e consumo excessivo de memória. Para resolver esse problema, decidiu-se utilizar
uma estrutura de dados dinâmica, onde cada ponto da rota (loja) pudesse ser facilmente inserido ou
removido sem a necessidade de deslocar os outros elementos da lista. Você foi contratado para ajudar a
equipe de desenvolvimento a implementar essa nova estrutura. Abaixo está o código inicial de uma lista
ligada com algumas funções incompletas. Seu desafio é completar o método inserir_na_posicao para que
ele insira uma nova loja (representada por seu nome) em uma posição específica da rota.
class Loja:
def __init__(self, nome):
self.nome = nome
self.proximo = None
class RotaEntrega:
def __init__(self):
self.inicio = None
def inserir_inicio(self, nome_loja):
nova_loja = Loja(nome_loja)
nova_loja.proximo = self.inicio
self.inicio = nova_loja
def inserir_na_posicao(self, nome_loja, posicao):
# COMPLETE AQUI: implementar a lógica de inserção na posição
pass
def imprimir_rota(self):
atual = self.inicio
while atual:
print(f” {atual.nome}”)
atual = atual.proximo
# TESTE DO CÓDIGO
rota = RotaEntrega()
rota.inserir_inicio(“Loja D”)
rota.inserir_inicio(“Loja B”)
rota.inserir_inicio(“Loja A”)
# Inserir a “Loja C” entre “Loja B” e “Loja D” (posição 2)
rota.inserir_na_posicao(“Loja C”, 2)
print(” Rota final:”)
rota.imprimir_rota()
# Saída esperada:
# Loja A
# Loja B
# Loja C
# Loja D