Realicé una lista enlazada simple en Python, con la cual puedo agregar al inicio, al final, eliminar, y imprimir la lista. En el vídeo primero explico rapidamente lo que son arreglos, tablas y listas y después mi código.
El vídeo originalmente dura 7 minutos pero al convertirlo de ogv a avi algo paso y solo dura 4 minutos.. lo que noto es que todo sucede más rápido así que si no alcanzan a leer pues es poreso que explico pero pueden ir poniendo pause y así.
Vídeo:
Código:
#!/usr/bin/python
#listas simples enlazadas con python
class Nodo: # en clase nodo definio el dato..y el apuntador al siguiente nodo "" sig""
def __init__(self, dato):
self.dato = dato
self.sig = None
def __str__(self):#esta funcion me sirve para poder meter cualquier dato a la lista
return str(self.dato)
class ListaEnlazada:#esta clase me ayuda a manejar la lista enlazada identificando la cabeza y el ultimo elemenyo
def __init__(self):
self.cabeza = None
self.cola = None
def agregarFinal(self, dato): # funcion agregar al final
nodo_nuevo = Nodo(dato)
if self.cabeza == None: # aqui si no hay cabezera el elemento se vuelve la cabezera
self.cabeza = nodo_nuevo
if self.cola != None: # si si hay entonces se va a la cola.sig y esta apuntara a nodo nuevo
self.cola.sig = nodo_nuevo
self.cola = nodo_nuevo
def agregarInicio(self, dato):#aqui agregamos al inicio
nodo_nuevo = Nodo(dato)
if self.cabeza == None: # si no habia cabeza este se vuelve la cabeza
self.cabeza = nodo_nuevo
if self.cola != None: #cuando si habia mas datos entonces el nuevo elemento apuntara ala cabeza
nodo_nuevo.sig = self.cabeza
self.cabeza = nodo_nuevo # y la cabeza es el nuevo elemento(nodo nuevo)
def eliminar(self, d):#para eliminar
nodo = self.cabeza
anterior = nodo#usamos anterior como auxiliar
if self.cabeza.dato == d: #si el dato a eliminar esta en la cabezera se elimina la cabeza y el cabeza.sig se vuelve la cabeza
self.cabeza = self.cabeza.sig
else:#si no se busca en el resto
while nodo != None:
if nodo.dato == d:
anterior.sig = nodo.sig
anterior = nodo
nodo = nodo.sig
def imprimir(self):#aqui la funcion imprimir me ayuda a imprimir mientras haya elementos en la lista
nodo = self.cabeza
while nodo != None:
print nodo.dato
nodo=nodo.sig#aqui se recorre
lista = ListaEnlazada()#creo un objeto nuevo que llamo lista
lista.agregarFinal(1)
lista.agregarFinal(2)
lista.agregarFinal(3)
lista.agregarInicio(7)
lista.agregarFinal(4)
lista.agregarFinal(5)
lista.agregarFinal(6)
lista.agregarInicio(10)
lista.eliminar(10)
lista.eliminar(7)
lista.imprimir()
Ejecución:
Referencias:
Listas en Python
Listas enlazadas
Tablas de dispersión
Cabecera. Excelente trabajo a las 3 a.m. :D 18.
ResponderEliminarhola debo pedirte un favor: podrias hacer lo mismo que hiciste pero ahora con una lista doblemente enlazada
ResponderEliminaratte gracias mi mail katolisism@gmail.com
Cecilia me ayudas tengo que hacer algo muy similar pero no me funciona nose por que me tira este error:
ResponderEliminar<__main__.conjunto instance at 0x01EEF3C8> ??? nose que signiica
hola, como puedo crear un método para buscar un elemento dentro de la lista enlazada?
ResponderEliminar