C.6. Colas y colas priorizadas en Python

   1: class Cola :
   2:     def __init__(self) :
   3:         self.longitud = 0
   4:         self.cabeza = None
   5:  
   6:     def vacia(self) :
   7:         return (self.longitud == 0)
   8:  
   9:     def inserta(self, carga) :
  10:         nodo = Nodo(carga)
  11:         nodo.siguiente = None
  12:             if self.cabeza == None :
  13:             # Si la lista esta vac³a nuestro nuevo nodo es el primero
  14:             self.cabeza = nodo
  15:         
  16:             else :
  17:             # Encuentra el ultimo nodo de la lista
  18:             ultimo = self.cabeza
  19:             while ultimo.siguiente : ultimo = ultimo.siguiente
  20:                 # Añada el nuevo nodo
  21:                 ultimo.siguiente = nodo
  22:                 self.longitud = self.longitud + 1
  23:  
  24:     def quita(self) :
  25:         carga = self.cabeza.carga
  26:         self.cabeza = self.cabeza.next
  27:         self.longitud = self.longitud - 1
  28:         return carga
  29: class ColaMejorada :
  30:     def __init__(self) :
  31:     self.longitud = 0
  32:     self.cabeza = None
  33:     self.ultimo = None
  34:  
  35:  
  36:     def vacia(self) :
  37:         return (self.longitud == 0)
  38:  
  39:     def inserta(self, carga) :
  40:         nodo = Nodo(carga)
  41:         nodo.siguiente = None
  42:             if self.longitud == 0 :
  43:             # Si la lista esta vac³a nuestro nuevo nodo es el primero
  44:             self.cabeza = self.ultimo = nodo
  45:             
  46:             else :
  47:                 # Encuentra el ultimo nodo de la lista
  48:                 ultimo = self.ultimo
  49:                 # Añade nuestro nodo nuevo
  50:                 ultimo.siguiente = nodo
  51:                 self.ultimo = nodo
  52:                 self.longitud = self.longitud + 1
  53:     def quita(self) :
  54:         carga = self.cabeza.carga
  55:         self.cabeza = self.cabeza.siguiente
  56:         self.longitud = self.longitud - 1
  57:             if self.longitud == 0 : self.ultimo = None
  58:                 return carga
  59: class ColaPriorizada :
  60:     def __init__(self) :
  61:         self.elementos = []
  62:     def vacia(self) :
  63:         return self.elementos == []
  64:     def inserta(self, elemento) :
  65:         self.elementos.append(elemento)
  66:     def quita(self) :
  67:         maxi = 0
  68:         for i in range(1,len(self.elementos)) :
  69:         if self.elementos[i] > self.elementos[maxi] :
  70:             maxi = i
  71:             elemento = self.elementos[maxi]
  72:             self.elementos[maxi:maxi+1] = []
  73:             return elemento
  74: class Golfista :
  75:     def __init__(self, nombre, puntos) :
  76:         self.nombre = nombre
  77:         self.puntos = puntos
  78:     def __str__(self) :
  79:         return "%-15s: %d" % (self.nombre, self.puntos)
  80:     def __cmp__(self, otro) :
  81:         if self.puntos < otro.puntos : return 1 # menos es mas
  82:         if self.puntos > otro.puntos : return -1
  83:             return 0
0