From b0c719ac760174d89f3167a942accf4ac5870f3a Mon Sep 17 00:00:00 2001 From: Jonas Rocha <jonasra4@gmail.com> Date: Wed, 12 Sep 2018 08:17:15 -0300 Subject: [PATCH] Add new file --- lista.py | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 lista.py diff --git a/lista.py b/lista.py new file mode 100644 index 0000000..d9de635 --- /dev/null +++ b/lista.py @@ -0,0 +1,136 @@ +class NodoLista: + """Esta classe representa um nodo de uma lista encadeada.""" + def __init__(self, dado=0, proximo_nodo=None, anterior_nodo = None): + self.dado = dado + self.proximo = proximo_nodo + self.anterior = anterior_nodo + + +class ListaEncadeada(): + """Esta classe representa uma lista encadeada.""" + def __init__(self): + self.cabeca = None + + def __repr__(self): + return "[" + str(self.cabeca) + "]" + + def print_lista(self): + corrente = self.cabeca + print("[ " , end="") + while corrente.proximo != None: + print( str(corrente.dado), "-> <- ", end="") + corrente = corrente.proximo + print(corrente.dado,"]\n") + + + +def insere_no_inicio(lista, novo_dado): + + if lista.cabeca == None: + novo_nodo = NodoLista(novo_dado) + novo_nodo.proximo = None + novo_nodo.anterior = None + lista.cabeca = novo_nodo + else: + novo_nodo = NodoLista(novo_dado) + first = lista.cabeca + novo_nodo.proximo = first + novo_nodo.anterior = None + first.anterior = novo_nodo + lista.cabeca = novo_nodo + + +def swap(lista, valor1, valor2): + a = busca(lista,valor1) + b = busca(lista,valor2) + + if id(a) < id(b): + temp = a + a = b + b = temp + + if a.anterior == None and a.proximo == b: #juntos no comeco + lista.cabeca = b + a.proximo = b.proximo + a.anterior = b + b.anterior = None + b.proximo = a + + elif b.proximo == None: #juntos no final + b.anterior = a.anterior + b.proximo = a + a.anterior.proximo = b + a.anterior = b + a.proximo = None + + + elif a.anterior != None and b.proximo != None and a.proximo == b and b.anterior == a: #juntos no meio + a.anterior.proximo = b + b.proximo.anterior = a + b.anterior = a.anterior + a.proximo = b.proximo + a.anterior = b + b.proximo = a + + + elif a.anterior == None and b.proximo != None and a.proximo == b and b.anterior == a: # cabeca e meio + + lista.cabeca = b + + a.proximo.anterior = b + + aux = a.proximo + + a.proximo = b.proximo + a.anterior = b.anterior + + b.anterior.proximo = a + b.proximo.anterior = a + + b.proximo = aux + b.anterior = None + + elif a == b: + print("Posicoes iguais, ou seja, o mesmo node") + + + + +def busca(lista, valor): + corrente = lista.cabeca + while corrente and corrente.dado != valor: + corrente = corrente.proximo + return corrente + + +items = [10,9,8,7,6,5,4,3,2,1] + + + +lista = ListaEncadeada() + +for i in items: + insere_no_inicio(lista, i) + + +print("Lista Original:") +lista.print_lista() + + +print("juntos no comeco", 1, 2) +swap(lista,2,1) + +lista.print_lista() + +print("juntos no final", 9, 10) +swap(lista,10,9) +lista.print_lista() + +print("juntos no meio", 5, 6) +swap(lista,6,5) +lista.print_lista() + +print("comeco e meio", 2, 5) +swap(lista,2,5) +lista.print_lista() + \ No newline at end of file -- GitLab