Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Lista LDE continuação

continuando......... LDE

Lista Duplamente Encadeada com uso de Sentinelas

class DNodo():
    def __init__(self, dado = None):
        self.dado = dado
        self.anterior = None
        self.proximo = None

    def __str__(self):
        return str(self.dado)

    def __repr__(self):
        return str(self.dado)

class LDE:
    def __init__(self):
        self.header = DNodo()  # Sentinela Cabeça
        self.trailer = DNodo() # Sentinela Cauda
        self.tam = 0 # qtde de itens na lista

    def isEmpty(self):
        if (self.header.proximo is None or
            self.trailer.anterior is None):
            return True
        else:
            return False

    def inserirInicio(self, novo):
        if self.isEmpty():
            self.header.proximo = novo  # header -> novo
            novo.anterior = self.header  # header <- novo
            novo.proximo = self.trailer # novo -> trailer
            self.trailer.anterior = novo # novo <- trailer
        else:
            atual_primeiro = self.header.proximo # para saber quem eh o primeiro
            novo.proximo = atual_primeiro  # novo -> atual
            atual_primeiro.anterior = novo  #  novo <- atual
            self.header.proximo = novo     # header -> novo
            novo.anterior = self.header     # header <- novo       

        self.tam += 1

    def inserirFim(self, novo):
        if self.isEmpty():
            self.trailer.anterior = novo # novo <- trailer
            novo.proximo = self.trailer  # novo -> trailer
            novo.anterior = self.header  #  header <- novo
            self.header.proximo = novo   # header -> novo
        else:
            atual_ultimo = self.trailer.anterior # p/ saber quem eh o ultimo
            novo.anterior = atual_ultimo  # atual <- novo
            atual_ultimo.proximo = novo   # atual -> novo
            self.trailer.anterior = novo  # novo <- trailer
            novo.proximo = self.trailer   # novo -> trailer

        self.tam += 1

    def removerInicio(self):
        if self.isEmpty():
            print('Lista Vazia!')
            return

        ## quando temos apenas 1 item
        if (self.tam == 1):
            self.tam -= 1
            removido = self.header.proximo
            self.header.proximo = None
            self.trailer.anterior = None
        else:
            # lista possui + de 1 item
            self.tam -= 1
            removido = self.header.proximo
            novo_head = removido.proximo
            self.header.proximo = novo_head
            removido.proximo = None

        return removido

    def removerFim(self):
        if self.isEmpty():
            print('Lista Vazia!')
            return

        ## quando temos apenas 1 item
        if (self.tam == 1):
            self.tam -= 1
            removido = self.header.proximo
            self.header.proximo = None
            self.trailer.anterior = None            
        else:
            # lista possui + de 1 item
            self.tam -= 1
            removido = self.trailer.anterior
            novo_tail = removido.anterior
            self.trailer.anterior = novo_tail
            removido.proximo = None

        return removido

    def imprimir(self, reverso=False):
        if self.isEmpty():
            print('Lista Vazia')
            return

        if not reverso: # mesmo que if (reverso == True)
            item = self.header.proximo # devolve o 1o da lista
            while (item.proximo is not None):
                print(item)
                item = item.proximo
        else:
            item = self.trailer.anterior # devolve o ultimo da lista
            while (item.anterior is not None):
                print(item)
                item = item.anterior

    def buscar(self, alvo): # retorna a 1a ocorrencia
        if self.isEmpty():
            print('Lista Vazia')
            return

        item = self.header.proximo # devolve o 1o da lista
        while (item.proximo is not None):
            if (item.dado == alvo):
                # retorna nodo
                return item

            item = item.proximo

    def removerAntes(self, alvo):
        # header <-> [] <-> [] <-> trailer

Gostaria de saber como posso implementar a atividade, ou fazer-la?Obrigado desde já...

2 respostas

Oi Guilherme, você precisa ser mais específico a respeito da dúvida, por onde você começou? O ideal é que você comece a desenvolver ou ter uma lógica e nos enviei suas dúvidas.

solução!

Vou fechar esse tópico. Você pode colocar o resto do código nos comentários.