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.
Deja un comentario