Skip to content
Snippets Groups Projects
Commit b0c719ac authored by Jonas Rocha's avatar Jonas Rocha
Browse files

Add new file

parent 3383ec8d
No related branches found
No related tags found
No related merge requests found
lista.py 0 → 100644
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment