Como ejemplo de un objeto con una definición inusual de prioridad, vamos a
implementar una clase llamada Golfista que mantiene los nombres y puntua-
ciones de golfistas. Como es habitual, empezamos por definir __init__ y __str__:

   1: class Golfista:

   2:     def __init__(self, nombre, puntos):

   3:         self.nombre = nombre

   4:         self.puntos = puntos

   5:     def __str__(self):

   6:         return "%-16s: %d" % (self.nombre, self.puntos)

 

__str__ usa el operador de formato para poner los nombres y las puntuaciones
en bonitas columnas.
A continuación definimos una versión de __cmp__ en la que la puntuación mas
baja tiene la prioridad mas alta. Como siempre, __cmp__ devuelve 1 si self es
mayor que” otro, -1 si self es menor que” otro, y 0 si son iguales.

   1: class Golfista:

   2: ...

   3:     def __cmp__(self, otro):

   4:         if self.puntos < otro.puntos: return 1 # menos es mas

   5: if      self.puntos > otro.puntos: return -1

   6:         return 0

 

Ya estamos listos para probar la cola priorizada con la clase Golfista:

   1: >>> tiger = Golfista("Tiger Woods", 61)

   2: >>> cabr = Golfista("Angel Cabrera", 72)

   3: >>> ola = Golfista("J.M. Olazabal", 69)

   4: >>> cp = ColaPriorizada()

   5: >>> cp.inserta(tiger)

   6: >>> cp.inserta(cabr)

   7: >>> cp.inserta(ola)

   8: >>> while not cp.estaVacia(): print cp.quita()

   9: Tiger Woods : 61

  10: J.M. Olazabal : 69

  11: Angel Cabrera : 72

 

Como ejercicio, escriba una implementación del TAD Cola Prio-
rizada usando una lista enlazada. Deber³a usted mantener la lista
ordenada de modo que la eliminación sea una operación de tiempo
constante. Compare el rendimiento de esta implementación con la
implementación con la lista de Python.