TEMA 3.
COLAS
Programacin II
1 Grao EI
ndice
1. 2. 3. 4. 5. Descripcin del TAD Cola Especificacin del TAD Cola Simulacin Ejemplos de uso Implementaciones del TAD Cola
1. 2. 3. 4. 5. Implementacin Implementacin Implementacin Implementacin Comparacin de basada en el TAD Lista con vectores lineales con vectores circulares con simple enlace (punteros) las implementaciones
6. Modalidades de colas
1. Bicolas 2. Colas de prioridad
Programacin II
1 Grao EI
1. Descripcin del TAD Cola Ejemplos en la vida real:
La cola en la caja de un supermercado para pagar nuestra compra La cola cuando vamos a cualquier espectculo, cine, teatro, concierto, etc. y nos colocamos ante la taquilla para adquirir la entrada Cualquier otra situacin en que nos colocamos formando una cola o fila donde el primero que llega es el primero en obtener el servicio y sale de la misma.
Ejemplos en informtica:
Los Sistema Operativos las utilizan en la gestin de recursos que pueden ser compartidos por varios procesos (gestin de memoria, tiempo de procesador, gestin de trabajos de impresin, etc.)
Programacin II 1 Grao EI 3
1. Descripcin del TAD Cola Qu ocurre si alguien intenta colarse o saltarse el turno establecido o si desiste y abandona la cola antes de que le toque el turno?
Consideraremos que la estructura dejar de ser una cola.
Las colas se conocen tambin como:
Estructuras FIFO (first-in first-out) Estructuras primero en entrar, primero en salir
Programacin II
1 Grao EI
1. Descripcin del TAD Cola Definicin:
Una cola es un conjunto ordenado de elementos homogneos en el que los elementos se eliminan por uno de sus extremos, denominado PRINCIPIO, FRENTE o CABEZA, y se aaden por el otro extremo, denominado FINAL. Su funcionamiento sigue una poltica FIFO, es decir, el primer elemento en entrar a la estructura es el primer elemento en salir de ella.
Ordenado orden de incorporacin a la estructura, no orden en relacin al valor de los datos. Esto quiere decir que todos los elementos, excepto el primero y el ltimo, tienen un anterior y un siguiente. Homogneos todos los elementos son del mismo tipo de datos.
Programacin II 1 Grao EI 5
1. Descripcin del TAD Cola Operaciones:
ColaVacia: Crea una cola vaca esColaVacia: Devuelve TRUE si cola vaca, y FALSE en otro caso. primeroCola: Devuelve el primer elemento de la cola. aadirCola: aade un elemento por el extremo final de la cola. eliminarCola: suprime el primer elemento de la cola. No se definen operaciones de posicionamiento:
Todas las operaciones se hacen en el frente y en el final.
Programacin II
1 Grao EI
1. Descripcin del TAD Cola
Forma grfica de representar una cola:
FINAL E3 E2 E1 FRENTE
Operaciones: aadir y quitar elementos.
AadirCola: FINAL E4 E3 E2 E1 FRENTE
AadirCola : FINAL
E5
E4
E3
E2
E1
FRENTE
EliminarCola:
FINAL
E5
E4
E3
E2
FRENTE
EliminarCola:
FINAL
E5
E4
E3
FRENTE
AadirCola : FINAL
E6
E5
E4
E3
FRENTE
Programacin II
1 Grao EI
2. Especificacin del TAD Cola
Especificacin informal
TCOLA=TAD con operaciones ColaVacia, esColaVacia, primeroCola, AadirCola, EliminarCola DESCRIPCIN: Los valores del TAD son colas de elementos del tipo TIPOELEM. Las colas son mutables: AadirCola y EliminarCola aaden y eliminan elementos en la cola respectivamente. OPERACIONES: ColaVacia() devuelve (TCOLA)
efecto: Crea y devuelve la cola vaca
esColaVacia(C:TCOLA) devuelve (booleano) efecto: Devuelve TRUE si C es la cola vaca, y FALSE en caso
contrario.
Programacin II
1 Grao EI
2. Especificacin del TAD Cola
primeroCola(C:TCOLA) devuelve (TIPOELEM)
requerimientos: La cola C es no vaca efecto: Devuelve el primer elemento de la cola C
aadirCola(C:TCOLA; E:TIPOELEM)
modifica: C efecto: Aade el elemento E por el extremo final de la cola C.
eliminarCola(C:TCOLA)
requerimientos: La cola C es no vaca modifica: C efecto: Suprime el primer elemento de la cola C.
Programacin II
1 Grao EI
2. Especificacin del TAD Cola
Especificacin formal
Constructores: ColaVacia, AadirCola Tipo: TCOLA(TIPOELEM) Sintaxis: *ColaVaciaTCOLA esColaVacia(TCOLA)booleano primeroCola(TCOLA)TIPOELEM *aadirCola(TCOLA,TIPOELEM)TCOLA eliminarCola(TCOLA)TCOLA Semntica: C TCOLA, E TIPOELEM: esColaVacia(ColaVacia) TRUE esColaVacia(aadirCola(C,E)) FALSE primeroCola(ColaVacia) ERROR primeroCola(aadirCola(C,E)) SI esColaVacia(C) E | primeroCola(C) eliminarCola(ColaVacia) error eliminarCola(aadirCola(C,E)) SI esColaVacia(C) ColaVacia | aadirCola(eliminarCola(C),E)
Programacin II 1 Grao EI 10
2. Especificacin del TAD Cola Mdulo de definicin (.h) del TAD Cola sin incluir tratamiento de errores:
typedef ... TELEMENTO; typedef void * TCOLA; void ColaVacia (TCOLA *q); void AnadirCola (TCOLA *q, TELEMENTO e); int EsColaVacia (TCOLA q); void EliminarCola (TCOLA *q); void PrimeroCola (TCOLA q , TELEMENTO *e);
Programacin II
1 Grao EI
11
3. Simulacin Simulacin de una cola:
[Link] al/[Link]
Programacin II
1 Grao EI
12
4. Ejemplos de uso Ejemplos de operaciones simples sobre colas:
Creacin de una cola de un nmero determinado de elementos. Impresin de los elementos de una cola. Duplicacin de una cola (Ejercicio) Concatenacin de dos colas para constituir una nueva (Ejercicio)
Programacin II
1 Grao EI
13
4. Ejemplos de uso
Creacin de una cola de un nmero determinado de elementos.
void leer(TCOLA * C, short N) { TIPOELEM E; short i; ColaVacia(C); for (i=1;i<=n;i++) { printf(Dime un numero:); sscanf(%d,&E); aadirCola(C,E); } }
Programacin II 1 Grao EI 14
4. Ejemplos de uso
Impresin de los elementos de una cola.
void imprimir (TCOLA *C) { TIPOELEM C; TCOLA aux; ColaVacia(&aux); while ( esColaVacia(*C) == 0 ) { primeroCola(*C,&E); eliminarCola(C); printf(%d\n,E); anadirCola(&aux, E); } while ( esColaVacia(aux) == 0 ) { primeroCola(aux,&E); eliminarCola(&aux); anadirCola(C, E); } }
Programacin II 1 Grao EI
15
5. Implementaciones del TAD Cola
1. Implementaciones del TAD Cola
1. 2. 3. 4. Implementacin basada en el TAD Lista Implementacin con arrays lineales Implementacin con arrays circulares Representacin con simple enlace (punteros)
Programacin II
1 Grao EI
16
5.2. Implementacin con arrays lineales
Operaciones:
aadirCola: incrementa FINAL y escribe el elemento en esa posicin. eliminarCola: Decrementa FRENTE
ARRAYS Se accede a cualquiera de sus elementos Estructura con una dimensin fija COLAS Slo se puede acceder a los elementos FRENTE y FINAL de la cola. Estructura sin lmite de elementos
FRENTE 0 E1 1 E2
FINAL 2 E3 ... max_long - 1
Programacin II
1 Grao EI
17
5.2. Implementacin con arrays lineales
Registro con TRES campos:
Array de elementos ndice del array donde se encuentra el frente ndice del array donde se encuentra el final
Mdulo de implementacin (.c) #define MAX 100
/* nmero mximo de elementos
que podr almacenar la cola */
typedef int TELEMENTO; typedef struct { TELEMENTO arrayelementos[MAX]; int principio, final; } STCOLA; typedef STCOLA * TCOLA;
Programacin II 1 Grao EI 18
5.2. Implementacin con arrays lineales
void ColaVacia (TCOLA *q) { *q = (TCOLA) malloc (sizeof(STCOLA)) (*q)->final = -1; (*q)->principio = -1; } ;
void AnadirCola (TCOLA *q, TELEMENTO e) { int respuesta; respuesta = EsColaLlena (*q); if (respuesta == 1) printf("ERROR, la cola esta llena"); else { (*q)->final++ ; (*q)->arrayelementos [(*q)->final] = e; } } int EsColaVacia (TCOLA q) { int respuesta = (q->final == q->principio); return respuesta; }
Programacin II
1 Grao EI
19
5.2. Implementacin con arrays lineales
int EsColaLlena (TCOLA q) { if (q->final == MAX-1) return 1; else return 0; } void EliminarCola (TCOLA *q) { int respuesta; respuesta = EsColaVacia(*q); if (respuesta == 1) printf("ERROR, la cola no tiene elementos"); else (*q)->principio++; }
Programacin II
1 Grao EI
20
5.2. Implementacin con arrays lineales
void PrimeroCola (TCOLA q , TELEMENTO *e) { int respuesta; respuesta = EsColaVacia(q); if (respuesta == 1) printf("ERROR, la cola no tiene elementos"); else *e = q->arrayelementos [q->principio + 1]; }
Programacin II
1 Grao EI
21
5.2. Implementacin con arrays lineales
colaVacia(&C)
C->principio: -1
C->final: -1
anadirCola(&C,E1) E1 anadirCola(&C,E2) E1 anadirCola(&C,E3) E1 primeroCola(C,&E) eliminarCola(&C) E1 primero(C,&E) eliminarCola(&C) E1 eliminarCola(&C) E1 anadirCola(&C,E4) E1
C->principio: -1
C->final: 0
C->principio: -1
E2
C->principio: -1
C->final: 1
E2
E3
C->final: 2
Resultado: E1, que viene dado por C->arrayelementos[C->principio + 1]
C->principio: 0
C->final: 2 E3
E2
Resultado: E2, que viene dado por C->arrayelementos[C->principio + 1]
C->principio: 1
E2
C->principio: 2
E3
C->final: 2
E2
C->principio: 2
E3
C->final: 2
E2
E3
C->final: 3 E4
Programacin II
1 Grao EI
22
5.2. Implementacin con arrays lineales
anadirCola(&C,E5) E1
C->principio: 2
C->final: 4 E3 E4 E5
E2
eliminarCola(&C) E1 anadirCola(&C,E6) E1 primeroCola(C,&E) anadirCola(&C,E7) E1 primeroCola(C,&E) eliminarCola(&C) E1 primeroCola(C,&E)
C->principio: 3
E2
C->principio: 3
E3 E3
C->final: 4 E4 C->final: 5 E4
E5 E5 E6
E2
Resultado: E5, que viene dado por C->arrayelementos[C->principio+1]
C->principio: 3
E2
E3
C->final: 6 E4
E5
E6
E7
Resultado: E5, que viene dado por C->arrayelementos[C->principio+1]
C->principio: 4
E2
E3
C->final: 6 E4
E5
E6
E7
Resultado: E6, que viene dado por C->arrayelementos[C->principio+1]
La cola est llena?
Programacin II 1 Grao EI 23
5.2. Implementacin con arrays lineales
C->principio: 4
C->final: 6
E1
E2
E3
E4
E5
E6
E7
La cola est llena?
Principio: Contiene el ndice de una posicin ANTERIOR a la correspondiente al elemento ms antiguo de la cola (esto es, el primero de la cola) Final: contiene el ndice de la posicin correspondiente al elemento aadido ms recientemente (ltimo de la cola) La condicin de cola vaca es: principio==final La condicin de cola llena es: final==MAXSIZE-1 Existen huecos libres al principio del array, dejados por los elementos eliminados. No estamos optimizando el uso del array.
Programacin II
1 Grao EI
24
5.2. Implementacin con arrays lineales
Posibles soluciones:
Cada vez que se elimina un elemento, desplazamiento de todos los dems hacia la zona liberada, dejando siempre vacantes las posiciones del final para admitir nuevos elementos.
No muy eficiente: n elevado de movimientos principio=1 SIEMPRE
Array circular
La posicin siguiente a la ltima del array es la primera
[1]
[2]
[3]
[4]
[5]
[6]
Programacin II
1 Grao EI
25
5.3. Implementacin con arrays circulares Representacin para un mximo MAXSIZE de elementos: array de MAXSIZE elementos:
AadirCola: mueve Final 1 posicin en sentido de agujas del reloj. EliminarCola: mueve Principio 1 posicin en sentido de agujas del reloj.
Final
an
a1
Principio
a2
an-1
1 Grao EI 26
Programacin II
5.3. Implementacin con arrays circulares Siguiente:
int Siguiente ( int pos ) { if (pos < MAX - 1) return (pos+1); else return 0; }
Final
an a1
Principio
a2
an-1
1 Grao EI 27
Programacin II
5.3. Implementacin con arrays circulares
Al crear la cola se ponen principio y final a MAX-1 La condicin de cola vaca es que principio==final El primero de la cola es el siguiente a principio Pero tenemos un problema. Vemoslo con un ejemplo...
ColaVacia (&q)
q->final q->principio
4
q->arraylementos
AadirCola (&q, E1)
q->final q->principio
4
q->arrayelementos
E1
Programacin II
1 Grao EI
28
5.3. Implementacin con arrays circulares
AadirCola (&q, E2)
q->final q->principio
4
q->arrayelementos
E1
E2
AadirCola (&q, E3)
q->final q->principio
4
q->arrayelementos
E1
E2
E3
PrimeroCola (q): Ser el elemento que ocupa la posicin Siguiente([Link]), es decir: E1 AadirCola (&q, E4)
q->final q->principio
4
q->arrayelementos
E1
E2
E3
E4
EliminarCola (&q)
q->final q->principio
0
q->arraylementos
E1
E2
E3
E4
Programacin II
1 Grao EI
29
5.3. Implementacin con arrays circulares
EliminarCola (&q)
q->final q->principio
1
q->arrayelementos
E1
E2
E3
E4
PrimeroCola (q): Ser el elemento que ocupa la posicin Siguiente([Link]), es decir: E3 AadirCola (&q, E5)
q->final q->principio
1
q->arrayelementos
E1
E2
E3
E4
E5
EliminarCola (&q)
q->final q->principio
2
q->arrayelementos
E1 AadirCola (&q, E6)
q->final
E2
E3
E4
E5
q->principio
2
q->arrayelementos
E6
E2
E3
E4
E5
Programacin II
1 Grao EI
30
5.3. Implementacin con arrays circulares
AadirCola (&q, E7)
q->final q->principio
2
q->arrayelementos
E6
E7
E3
E4
E5
AadirCola (&q, E8)
q->final q->principio
2
q->arrayelementos
E6
E7
E8
E4
E5
PROBLEMA: La cola est llena pero se cumple la condicin de cola vaca (final==principio).
Programacin II
1 Grao EI
31
5.3. Implementacin con arrays circulares
Solucin 1 Aadir un nuevo campo numrico a la estructura del TAD Cola, que indique el nmero de elementos que contiene la cola. Por tanto, cuando la cola est vaca este campo valdr 0 y cuando est llena su valor ser MAX (dimensin del vector). El adoptar esta solucin implica tener que modificar la declaracin del TAD, as como sus operaciones.
Programacin II
1 Grao EI
32
5.3. Implementacin con arrays circulares
Solucin 2: sacrificar un elemento del array
La posicin sacrificada es la ltima que se rellenara (esto es, la referenciada por principio). Recordad que el primer elemento de la cola est en la posicin Siguiente(principio). Al igual que antes Final referencia a la posicin ocupada por el ltimo elemento aadido. Si el array tiene MAX posiciones, no se debe dejar que la cola crezca ms que MAX-1 Cola llena: principio==Siguiente(final) Cola vaca: principio == final
Programacin II
1 Grao EI
33
5.3. Implementacin con arrays circulares
Solucin 2: sacrificar un elemento del array
Para el ejemplo anterior...Tras aadir E7
AadirCola (&q, E7)
q->final q->principio
2
q->arrayelementos
E6
E7
E3
E4
E5
No se podran aadir ms pues se cumple la condicin de cola llena (principio igual a siguiente de final).
Programacin II
1 Grao EI
34
5.3. Implementacin con arrays circulares Simulacin de una cola circular. [Link] undan/dsal/[Link]
Programacin II
1 Grao EI
35
5.3. Implementacin con arrays circulares
Nueva implementacin #define MAX 100 /* pero solo podemos guardar 99 */
typedef int TELEMENTO; typedef struct { TELEMENTO arrayelementos[MAX]; int principio, final; } STCOLA; typedef STCOLA * TCOLA; int Siguiente ( int pos ) { if (pos < MAX - 1) return (pos+1); else return 0; }
Programacin II
1 Grao EI
36
5.3. Implementacin con arrays circulares
int EsColaLlena ( TCOLA q ) { int pos_sig = Siguiente(q->final) ; if (pos_sig == q->principio) return 1 ; else return 0; } void ColaVacia (TCOLA * q) { *q = (TCOLA) malloc (sizeof (STCOLA) ); (*q)->final = MAX - 1; (*q)->principio = MAX - 1; } int EsColaVacia ( TCOLA q ) { if (q->final == q->principio) return 1; else return 0; }
Programacin II
1 Grao EI
37
5.3. Implementacin con arrays circulares
void PrimeroCola (TCOLA q , TELEMENTO *e) { int respuesta, sig; respuesta = EsColaVacia(q); if (respuesta == 1) printf("ERROR, la cola no tiene elementos"); else { sig = Siguiente (q->principio); *e = q->arrayelementos [sig]; } } void EliminarCola (TCOLA * q) { int respuesta, sig; respuesta = EsColaVacia(*q); if ( respuesta == 1) printf("ERROR, ...."); else { sig = Siguiente ((*q)->principio); (*q)->principio = sig; } }
Programacin II 1 Grao EI 38
5.3. Implementacin con arrays circulares
void AnadirCola ( TCOLA * q , TELEMENTO e) { int resp, pos_sig ; resp = EsColaLlena (*q) ; if (resp == 1) printf("ERROR, la cola esta llena"); else { pos_sig = Siguiente ((*q)->final); (*q)->final = pos_sig; (*q)->arrayelementos [(*q)->final] = e; } }
Programacin II 1 Grao EI 39
5.4. Implementacin con punteros
COLA Se insertan elementos por el final y se eliminan por el principio de la cola. Es una estructura ordenada ESTRUCTURA DINMICA Los punteros accedern a las posiciones de memoria de la estructura dinmica que acten de PRINCIPIO y de FINAL de la cola. La estructura dinmica se formar con elementos de tipo registro (NODOS) con los siguientes campos:
Valor del elemento de la cola Puntero con la direccin de memoria del siguiente nodo de la cola.
COLA
Elemento de la cola Puntero al siguiente nodo Principio E1 E2 Final ... E8
Implementacin mediante variables dinmicas
Programacin II
1 Grao EI
40
5.4. Implementacin con punteros Simulacin de una cola implementada con una secuencia enlazada.
[Link] [Link]
Programacin II
1 Grao EI
41
5.4. Implementacin con punteros
typedef int TELEMENTO; typedef struct nodo { TELEMENTO dato; struct nodo * sig; }
TNodo;
typedef struct {TNodo * principio, * final; } STCOLA; typedef STCOLA * TCOLA; Estructura cola: Puntero frente y a final, pues es donde se realizan las operaciones de insercin/eliminacin.
q Principio final
E1 dato
Implementacin mediante variables dinmicas
E2 dato
. . .
E8 dato
Programacin II
1 Grao EI
42
5.4. Implementacin con punteros
void ColaVacia ( TCOLA * q ) { *q = (TCOLA) malloc (sizeof (STCOLA) ) ; (*q)->final = NULL; (*q)->principio = NULL; } int EsColaVacia ( TCOLA q ) { if ( (q->final == NULL) && (q->principio == NULL) ) return 1; else return 0; } void PrimeroCola ( TCOLA q, TELEMENTO * e) { int respuesta; respuesta = EsColaVacia(q); if ( respuesta == 1) printf("ERROR, la cola no tiene elementos"); else *e = (q->principio)->dato; }
Programacin II
1 Grao EI
43
5.4. Implementacin con punteros
void EliminarCola (TCOLA * q) { int respuesta; TNodo * aux; respuesta = EsColaVacia(*q); if ( respuesta == 1 ) printf("ERROR, "); else { aux = (*q)->principio; (*q)->principio = aux->sig; if ((*q)->principio == NULL) (*q)->final = NULL; free (aux); } }
Programacin II 1 Grao EI 44
5.4. Implementacin con punteros
void AnadirCola (TCOLA * q , TELEMENTO e) { int respuesta; TNodo * aux; aux = (TNodo *) malloc (sizeof (TNodo) ); aux->dato = e; aux->sig = NULL; respuesta = EsColaVacia (*q); if (respuesta == 1) (*q)->principio = aux; else (*q)->final->sig = aux; (*q)->final = aux; }
Programacin II
1 Grao EI
45
5.4. Implementacin con punteros
Al igual que para las pilas, la implementacin con memoria dinmica podra adems incluir una funcin destruye que borrase la cola liberando la memoria de todos los nodos. Ejercicio: completar la implementacin incorporando esta funcin Tiene sentido esta funcin con una implementacin esttica (arrays) ?
Programacin II
1 Grao EI
46
5.5. Comparacin de las implementaciones Longitud estimada de la cola:
Conocida arrays circulares No conocida basada en punteros
Tamao de los elementos de la cola:
Pequeo arrays circulares Grande basada en punteros
Frecuencia de utilizacin de las operaciones:
Crear y destruir colas arrays circulares
Programacin II
1 Grao EI
47
6. Modalidades de colas Mostraremos dos modalidades usuales de colas:
Dicolas o Bicolas Colas de prioridad
Programacin II
1 Grao EI
48
6.1. Dicolas
Conjunto ordinal de elementos
Son colas bidireccionales Eliminaciones/inserciones por ambos extremos Operaciones:
Operaciones de una cola Operaciones nuevas para acceder a ambos extremos:
void ultimo(TCOLA C, TIPOELEM * E); void insertar_frente(TCOLA * C, TIPOELEM E); void suprimir_final(TCOLA *C);
LUZ insertar_frente(&C,SOL) SOL suprimir_final(&C) SOL LUZ LUZ
AGUA
RO
AGUA AGUA
RO RO
Programacin II
1 Grao EI
49
6.1. Dicolas Se pueden imponer restricciones respecto al tipo de entrada o al tipo de salida:
Dicola con restriccin de entrada:
Slo se permiten inserciones por uno de los extremos Se permiten eliminaciones por los dos extremos
Dicola con restriccin de salida:
Se permiten inserciones por los dos extremos Slo se permiten eliminaciones por uno de los extremos
Programacin II
1 Grao EI
50
6.1. Dicolas Ejercicios:
Especificacin informal/formal del TAD Dicola Implementacin del TAD Dicola con arrays circulares. Implementacin del TAD Dicola con simple enlace (punteros)
Programacin II
1 Grao EI
51
6.2. Colas de Prioridad Cola a cuyos elementos se les ha asignado una prioridad:
El elemento con mayor prioridad es procesado primero Dos elementos con la misma prioridad son procesados segn el orden en que fueron introducidos en la cola.
Ejemplos:
Sistema de tiempo compartido necesario para mantener un conjunto de procesos que esperan servicio para trabajar: TIEMPO CPU, IMPRESORA, ETC.
Programacin II
1 Grao EI
52
6.2. Colas de Prioridad Mtodos bsicos de representacin mediante estructuras lineales:
a) Tener la cola siempre ordenada
Un elemento se inserta en el lugar correspondiente de acuerdo a su prioridad Se saca el primer elemento de sta, es decir, el de mayor prioridad
b) No tener la cola ordenada
Insertar siempre al final de la cola Cuando se va a sacar un elemento, buscar el que tiene mayor prioridad
El mtodo a), pues requiere menos operaciones que b).
Representacin con simple enlace, pues los elementos se insertarn en cualquier posicin de la cola.
Programacin II 1 Grao EI 53
6.2.1. Implementacin de colas de prioridades Implementaciones:
Implementacin mediante una secuencia enlazada Implementacin mediante una secuencia de n colas
Programacin II
1 Grao EI
54
6.2.1. Implementacin de colas de prioridades Implementacin mediante una secuencia enlazada
Es una lista enlazada donde cada nodo tiene el dato, el puntero al siguiente y un nmero con su prioridad. Se inserta en la posicin de acuerdo a la prioridad
Se inserta en cualquier posicin =>no hay un puntero al FINAL solo hay un puntero al principio Representacin con simple enlace
Programacin II
1 Grao EI
55
6.2.1. Implementacin de colas de prioridades
Implementacin mediante una secuencia de n colas:
Una cola para cada nivel de prioridad Para agrupar todas las colas, se utiliza un array de registros (array porque n niveles prioridad conocido). Cada registro representa un nivel de prioridad, y tiene el frente y el final de la cola correspondiente.
Programacin II
1 Grao EI
56
6.2.1. Implementacin de colas de prioridades
Acciones ms importantes:
Aadir un elemento P que tiene prioridad m:
1. Buscar el ndice en la tabla correspondiente a prioridad m. 2. Si existe y es K, poner el elemento P como final de la cola de ndice K. 3. Si no existe, crear nueva cola y poner el elemento P. 4. Salir
Suprimir el elemento de frente de la cola que tiene mxima prioridad
1. Buscar el ndice de la cola de mayor prioridad no vaca. Cola k. 2. Retirar y procesar el elemento frente de la cola k. 3. Salir.
Programacin II
1 Grao EI
57
6.2. Colas de prioridad
Cul de las dos implementaciones responde mejor a la DEFINICIN genrica de cola?
Programacin II
1 Grao EI
58