Foros del Web » Programando para Internet » Python »

Implemetar TAD Cola con listas

Estas en el tema de Implemetar TAD Cola con listas en el foro de Python en Foros del Web. Buenas, estoy leyendo un libro de Python y estoy en la parte de TAD´s. El autor va haciendo unos ejemplos de implementaciones de TAD´s como ...
  #1 (permalink)  
Antiguo 09/03/2011, 12:01
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Implemetar TAD Cola con listas

Buenas, estoy leyendo un libro de Python y estoy en la parte de TAD´s. El autor va haciendo unos ejemplos de implementaciones de TAD´s como stacks, colas, etc. y deja como ejercicio al lector hacer la implementación del TAD cola con listas de Python al lector.
Lo que hice hasta ahora es:
class ColaConListas:
def __init__(self):
self.elementos = []
def estaVacia(self):
return (self.elementos == [])
def inserta(self,carga):
self.elementos.append(carga)

Me faltaría definir el método quitar, que quita el primer elemento de la lista, ya que
siempre va a ser el primero que entro, por que voy agregando elementos desde atrás.
Ejemplo:
>>>cola = ColaConListas()
>>>cola.estaVacia()
True
>>>cola.insertar(1)
>>>cola.insertar(2)
>>>cola.estaVacia()
False
Hasta ahora tendría la siguiente lista: [1,2]. Y quiero agregar el método quitar que quitaría el primer elemento de la lista y lo devolvería.
Probe haciendo algo como del(self[0]), self[0:len(self)], etc y da error(Alguien podría explicarme por qué?, supongo que es por intentar hacer len o lista[index] y la lista no estar creada aún(?)).
En fin, quisiera que el método quitar haga lo siguiente:
tengo [1,2]
>>>cola.quitar()
1
Y me deje la lista [2].
Gracias de antemano.
Saludos!.
  #2 (permalink)  
Antiguo 09/03/2011, 13:03
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Implemetar TAD Cola con listas

Buenas, ya resolví el problema cambiando el orden de inserción. Dejo la solución por si alguien entra buscando algo parecido.
class ColaConListas:
---def __init__(self):
------self.elementos = []
---def estaVacia(self):
------return (self.elementos == [])
---def inserta(self,carga):
------listaCarga = [carga]
------self.elementos = listaCarga + self.elementos
---def quita(self):
------return self.elementos.pop()


Cambie el orden de inserción de los elementos. Ahora el método inserta agrega al principio de la lista y quita, elimina el último.
Igual si alguien sabe como hacerlo como había planteado en el primer post lo agradecería.
Saludos!.
PD: agregue (-) en lugar de espacios por que me elimina los sangrados, no se por que.

Última edición por cipos; 09/03/2011 a las 13:16 Razón: olvidé los sangrados.
  #3 (permalink)  
Antiguo 09/03/2011, 14:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Implemetar TAD Cola con listas

Código Python:
Ver original
  1. from collections import deque
  2. Q = deque()
  3. Q.append(1)
  4. Q.append(2)
  5. Q.append(3)
  6. Q.popleft()
  #4 (permalink)  
Antiguo 10/03/2011, 07:50
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Implemetar TAD Cola con listas

Gracias por la respuesta razpeitia, pero sinceramente no entendí lo que escribiste.
En realidad escribi ese código, si lo pongo dentro de mi definición de módulo de quita no me funciona, si lo pruebo en el GUI funciona perfecto el ejemplo.
Yo lo que hago es poner así la definición de quita:
Código Python:
Ver original
  1. def quita(self):
  2.      from collections import deque
  3.      self.popleft()
Esto no me funciona, si podrías decirme qué hago mal y algo más de información sobre la libreria deque te lo agradecería.
De todas maneras muchas gracias nuevamente y cuando tenga más tiempo leeré detenidamente sobre el asunto.
Saludos!.
  #5 (permalink)  
Antiguo 10/03/2011, 14:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Implemetar TAD Cola con listas

Cierto, se me olvido escribir una descripción apropiada.

Bueno, lo que puse es que no necesitas hacer tu propia librería o clase (a menos claro que sea con propósitos educacionales) ya que Python trae por defecto librerías para manejar pilas y colas.

Ejemplo de uso:
Código Python:
Ver original
  1. from collections import deque
  2.  
  3. q = deque() #Aqui creo mi Cola
  4.  
  5. q.append(1) #Añade 1 y queda [1]
  6. q.append(2) #Añade 2 y queda [1, 2]
  7. q.append(3) #Añade 3 y queda [1, 2, 3]
  8.  
  9. q.popleft() #regresa 1 y queda [2, 3]
  10. q.popleft() #regresa 2 y queda [3]
  11. q.popleft() #regresa 3 y queda []
  #6 (permalink)  
Antiguo 11/03/2011, 06:55
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Implemetar TAD Cola con listas

Bien razpeitia, gracias nuevamente por tu respuesta. Ahora me quedo claro lo que pusiste, ya investigaré más esa libreria ya que había echo algunos ejercicios interesantes de cola y pilas en C hace algún tiempo y seguramente me servirá para seguir practicando.
Igualmente mi intención era hacer una implementación yo, ya que estoy aprendiendo Python y quiero practicar lo que voy leyendo.
Saludos!.

Etiquetas: cola, listas, tad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:07.