Exemple #1
0
class ListaDE:
    def __init__(self):
        self.__cursor = Cursor()
        self.__limite = 10
        self.__elementos = 0

    def elementos(self):
        return self.__elementos

    def acessarAtual(self):
        return self.__cursor.atual

    def inserirAntesAtual(self, valor):
        novo = Nodo(valor)

        if self.cheia():
            print('Lista Cheia.')
        elif self.vazia():
            self.__cursor.atual = novo
            self.__elementos += 1
        elif self.__cursor.atual.ant is None:
            self.__cursor.atual.ant = novo
            novo.prox = self.__cursor.atual
            self.__elementos += 1
        else:
            self.__cursor.atual.ant.prox = novo
            novo.ant = self.__cursor.atual.ant
            self.__cursor.atual.ant = novo
            novo.prox = self.__cursor.atual
            self.__elementos += 1

    def inserirPosAtual(self, valor):
        novo = Nodo(valor)

        if self.cheia():
            print('Lista Cheia.')
        elif self.vazia():
            self.__cursor.atual = novo
            self.__elementos += 1
        elif self.__cursor.atual.prox is None:
            self.__cursor.atual.prox = novo
            novo.ant = self.__cursor.atual
            self.__elementos += 1
        else:
            self.__cursor.atual.prox.ant = novo
            novo.prox = self.__cursor.atual.prox
            self.__cursor.atual.prox = novo
            novo.ant = self.__cursor.atual
            self.__elementos += 1

    def inserirFim(self, valor):
        if self.vazia():
            novo = Nodo(valor)
            self.__cursor.atual = novo
            self.__elementos += 1
        else:
            self.__cursor.irParaUltimo()
            self.inserirPosAtual(valor)

    def inserirFrente(self, valor):
        if self.vazia():
            novo = Nodo(valor)
            self.__cursor.atual = novo
            self.__elementos += 1
        else:
            self.__cursor.irParaPrimeiro()
            self.inserirAntesAtual(valor)

    def inserirNaPosicao(self, k, valor):
        self.__cursor.irParaPrimeiro()

        if self.cheia():
            print('Lista Cheia.')
        elif k > self.__elementos or k < 0:
            print('Posicao inexistente.')
        else:
            self.__cursor.avancarKPosicoes(k - 1)
            self.inserirAntesAtual(valor)

    def excluirAtual(self):
        if self.vazia():
            print('Lista vazia.')
        elif self.__cursor.atual.ant is None and self.__cursor.atual.prox is None:
            self.__cursor.atual.prox = None
            self.__cursor.atual.ant = None
            self.__cursor.atual = None
            self.__elementos -= 1
        elif self.__cursor.atual.ant is None:
            self.__cursor.atual.prox.ant = None
            self.__cursor.atual = self.__cursor.atual.prox
            self.__elementos -= 1
        elif self.__cursor.atual.prox is None:
            self.__cursor.atual.ant.prox = None
            self.__cursor.atual = self.__cursor.atual.ant
            self.__elementos -= 1
        else:
            self.__cursor.atual.ant.prox = self.__cursor.atual.prox
            self.__cursor.atual.prox.ant = self.__cursor.atual.ant
            self.__cursor.atual = self.__cursor.atual.prox
            self.__elementos -= 1

    def excluirPrim(self):
        self.__cursor.irParaPrimeiro()
        self.excluirAtual()

    def excluirUlt(self):
        self.__cursor.irParaUltimo()
        self.excluirAtual()

    def excluirElem(self, valor):
        self.Buscar(valor)
        self.excluirAtual()
        print(f'Elemento {valor}, excluido')

    def excluirDaPos(self, k):
        self.__cursor.irParaPrimeiro()
        k -= 1
        if self.vazia():
            print('Lista Vazia.')
        elif k > self.__elementos or k < 0:
            print('Posicao inexistente.')
        else:
            self.__cursor.avancarKPosicoes(k)
            self.excluirAtual()

    def vazia(self):
        return self.__elementos == 0

    def cheia(self):
        return self.__elementos == self.__limite

    def contem(self, valor):
        self.Buscar(valor)

    def posicaoDe(self, valor):
        if self.vazia():
            print('Lista Vazia')
        else:
            self.__cursor.irParaPrimeiro()
            x = self.__cursor.atual
            posicao = 1

            while x.valor != valor:
                if self.__cursor.atual.prox is None:
                    print('Elemento Inexistente')
                    return None
                else:
                    self.__cursor.avancarKPosicoes(1)
                    x = self.__cursor.atual
                    posicao += 1
            print(posicao)
            return posicao

    def Buscar(self, valor):
        self.__cursor.irParaPrimeiro()
        x = self.__cursor.atual

        while x.valor != valor:
            if self.__cursor.atual.prox is None:
                print('False, Elemento Inexistente')
                return False
            else:
                self.__cursor.avancarKPosicoes(1)
                x = self.__cursor.atual
        print('True, Elemento existe')
        return True