Está en la página 1de 58

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:


http://www.cosc.canterbury.ac.nz/people/mukundan/ds al/QueueAppl.html

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(q.principio), 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(q.principio), 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. http://www.cosc.canterbury.ac.nz/people/muk undan/dsal/CQueueAppl.html

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.
http://www.cosc.canterbury.ac.nz/people/mukundan/dsal/LinkQueu eAppl.html

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