martes, 12 de julio de 2011

Arreglos, tablas y listas

Tarea 4

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

4 comentarios:

  1. Cabecera. Excelente trabajo a las 3 a.m. :D 18.

    ResponderEliminar
  2. hola debo pedirte un favor: podrias hacer lo mismo que hiciste pero ahora con una lista doblemente enlazada
    atte gracias mi mail katolisism@gmail.com

    ResponderEliminar
  3. Cecilia me ayudas tengo que hacer algo muy similar pero no me funciona nose por que me tira este error:

    <__main__.conjunto instance at 0x01EEF3C8> ??? nose que signiica

    ResponderEliminar
  4. hola, como puedo crear un método para buscar un elemento dentro de la lista enlazada?

    ResponderEliminar