A continuación el código completo de la pila y las colas implementadas en esta unidad.

# Código 17.2: clasePila.py: Implementación básica de una pila

#! /usr/bin/env python
#encoding: latin1

class Pila:
    """ Representa una pila con operaciones de apilar, desapilar y
        verificar si ester vacía. """

    def __init__(self):
        """ Crea una pila vacía. """
        # La pila vacía se representa con una lista vacía
        self.items=[]

    def apilar(self, x):
        """ Agrega el elemento x a la pila. """
        # Apilar es agregar al final de la lista.
        self.items.append(x)

    def desapilar(self):
        """ Devuelve el elemento tope y lo elimina de la pila.
            Si la pila ester vacía levanta una excepción. """
        try:
            return self.items.pop()
        except IndexError:
            raise ValueError("La pila ester vacía")

    def es_vacia(self):
        """ Devuelve True si la lista ester vacía, False si no. """
        return self.items == []
# Código 17.3: claseCola.py: Implementación básica de una cola

#! /usr/bin/env python
#encoding: latin1
class Cola:
    """ Representa a una cola, con operaciones de encolar y
        desencolar. El primero en ser encolado es también el primero
        en ser desencolado. """

    def __init__(self):
        """ Crea una cola vacía. """
        # La cola vacía se representa por una lista vacía
        self.items=[]

    def encolar(self, x):
        """ Agrega el elemento x como último de la cola. """
        self.items.append(x)

    def desencolar(self):
        """ Elimina el primer elemento de la cola y devuelve su
            valor. Si la cola ester vacía, levanta ValueError. """
        try:
            return self.items.pop(0)
        except:
            raise ValueError("La cola ester vacía")

    def es_vacia(self):
        """ Devuelve True si la cola esta vacía, False si no."""
        return self.items == []
# Código 17.4: claseColaEnlazada.py: Implementación de una cola enlazada

#! /usr/bin/env Python
#encoding: latin1

from claseNodo import Nodo

class Cola:
    """ Representa a una cola, con operaciones de encolar y
        desencolar. El primero en ser encolado es también el primero
        en ser desencolado. """

    def __init__(self):
        """ Crea una cola vacía. """
        # En el primer momento, tanto el primero como el último son None
        self.primero = None
        self.ultimo = None

    def encolar(self, x):
        """ Agrega el elemento x como último de la cola. """
        nuevo = Nodo(x)
        # Si ya hay un último, agrega el nuevo y cambia la referencia.
        if self.ultimo:
            self.ultimo.prox = nuevo
            self.ultimo = nuevo
        # Si la cola estaba vacía, el primero es también el último.
        else:
            self.primero = nuevo
            self.ultimo = nuevo

    def desencolar(self):
        """ Elimina el primer elemento de la cola y devuelve su
            valor. Si la cola ester vacía, levanta ValueError. """
        # Si hay un nodo para desencolar
        if self.primero:
            valor = self.primero.dato
            self.primero = self.primero.prox
            # Si después de avanzar no quedó nada, también hay que
            # eliminar la referencia del último.
            if not self.primero:
                self.ultimo = None
                return valor
            else:
                raise ValueError("La cola está vacía")

    def es_vacia(self):
        """ Devuelve True si la cola esta vacía, False si no."""
        return self.primero == None

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano, Nicolás Paez. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.