Capítulo 11 Colas, colas de prioridad y montículos EJEMPLO 11.1 Representación gráfica de la colocación y eliminación de elementos en una cola implementada con arrays.
Tras extraer un elemento las posiciones de frente y final son
!i a"ora se a#ade un elemento
Esta implementación tiene como incon$eniente %ue puede ocurrir %ue la $aria&le final llegue al $alor máximo de la ta&la' con lo cual no se puedan seguir a#adiendo elementos elementos a la cola' a(n cuando %ueden posiciones li&res a la i)%uierda de la posición frente .
EJEMPLO 11.* +include ,stdli&."typedef struct nodo Tipo/ato elemento0 struct nodo1 siguiente0 23odo0 typedef struct 3odo1 frente0 3odo1 final0 24ola0
51 prototipos de las operaciones 15 void crear4ola64ola1 cola70 void insertar64ola1 cola' Tipo/ato entrada70 Tipo/ato %uitar64ola1 cola70 void &orrar4ola64ola1 cola70 51 li&era todos los nodos de la cola 15
51 acceso a la cola 15 Tipo/ato frente64ola cola70 1
2
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
51 m8todos de $erificación del estado de la cola 15 int cola9acia64ola cola70 EJEMPLO 11.:
EJEMPLO 11.;
Colas, colas de prioridad y montículos
Problema 11.1
#include #include #define MAXIMO 100 typedef float TipoElemento typedef struct
! TipoElemento A"MAXIMO int frente$ final %&ola int si' (int n)
! return (n * 1) + MAXIMO
% ,acia&(&ola- &) void Anade&(&ola- &$ TipoElemento e) void orra&(&ola- &) void TipoElemento /rimero&(&ola &) int Esacia&(&ola &) int Estallena&(&ola &) void ,acia&(&ola- &)
! &>frente 2 0 &>final 2 M3XIMO 1 % void Anade&(&ola- &$ TipoElemento e)
! if (Estallena&(-&)) ! puts(4&ola completa4) e5it (1) % &>final2 si'(&>final) &>A"&>final 2 e %
3
4
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
int Estallena&(&ola &)
! retur n
&.final 22 si'(si'(&.frente))
% orra&(&ola- &) void ! if (Esacia&(-&))
! puts(4 6e intenta sacar un elemento en & ac7a4) e5it (1) % &>frente 2 si'( &>frente) % int Esacia&(&ola &)
! return &.final 22 si'(&.frente)
% TipoElemento /rimero&(&ola &) ! if (Esacia&(&)) ! puts(4 Error de e8ecuci9n$ & ac7a4) e5it (1) % return &.A"&.frente % Problema 11.2
#include #include typedef int TipoElemento struct nodo&ola ! TipoElemento e struct nodo&ola- si' % :odo&ola typedef struct
! :odo&ola - ;rente$- ;inal %&ola
- prototipos de las operaciones - ,acia&(&ola- &) void ! &>;rente 2 := &>;inal 2 := % int Es,acia&(&ola &)
! return (&.;rente 22 :=)
% Anade&(&ola- &$TipoElemento e) void ! :odo&ola- a a 2 (:odo&ola-)malloc(si?eof(:odo&ola)) a>e 2 e a>si' 2 := if (Es,acia&(-&)) &>;rente 2 a else
&>;inal>si' 2 a &>;inal 2 a % void
!
orrar&(&ola- &)
Colas, colas de prioridad y montículos
:odo&ola -a if (@Es,acia&(-&)) ! a 2 &>;rente &>;rente 2 &>;rente>si' if(&>;rente 22 NULL) &>;inal 2 NULL free(a) % else
! puts(4Error eliminacion exit (1)
de una cola ac7a4)
% % TipoElemento /rimero&(&ola &) ! if (Es,acia&(&)) ! puts(4Error cola ac7a4) e5it(1) % return (&.;rente>e) % Problema 11.3
..... typedef :odo&ola -&ola
...... void ,acia&(&ola- &) ! -& 2 := % int Es,acia&(&ola &)
! return (& 22 :=)
% void Anade&(&ola- &$TipoElemento e)
! :odo&ola- a a 2 (:odo&ola-)malloc(si?eof(:odo&ola)) a>e 2 e if (@ Es,acia&(-&)) ! a>si' 2 (-&)>si' (*C)->sig = a; } else
a>si' 2 (-&) -& 2 a % void orrar&(&ola- &)
! :odo&ola -a if (@Es,acia&(-&)) ! a 2 (-&)>si' if(a 22 -&) (-&) 2 := else
(-&)>si' 2 a>si' free(a)
5
6
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
% else
! puts(4Error eliminacion e5it(1)
de una cola ac7a4)
% % TipoElemento /rimero&(&ola &) ! if (Es,acia&(&)) ! puts(4Error cola ac7a4) e5it(1) % return (&>si'>e) % Problema 11.4
#include #include #include typedef int Telemento struct /untero ! Telemento Info struct /untero -6i'$ -Ant %puntero typedef struct
! puntero -;rente$ -;inal %icola ,aciai(icola- ) void int Esaciai(icola ) Anadei/( icola -$ Telemento e) void Anadei;( icola -$ Telemento e) void /rimero/(icola $Telemento -e) void /rimero;(icola $ Telemento -e) void orrai/(icola -) void orrai;( icola -) void ,aciai(icola- ) void ! (-).;rente 2 := (-).;inal 2 := % int Esaciai(icola )
! return .;rente 22 :=
% void Anadei/( icola -$ Telemento e)
! puntero -au5 au5 2 (puntero-)malloc(si?eof(puntero)) au5>Info 2 e au5>Ant 2 := au5>6i' 2 (-).;rente if ((-).;rente 22 :=) (-).;inal 2 au5 else
(-).;rente>Ant 2 au5 (-).;rente 2 au5 % Anadei;( icola -$ Telemento e) void
Colas, colas de prioridad y montículos
! puntero -au5 au5 2 (puntero-)malloc(si?eof(puntero)) au5>Info 2 e au5>6i' 2 := au5>Ant 2(-).;inal if ((-).;inal 22 :=) (-).;rente 2 au5 else
(-).;inal>6i' 2 au5 (-).;inal 2 au5 % void /rimero/(icola $
Telemento -e)
! if (.;rente @2 :=)
-e 2 .;rente>Info % /rimero;( icola $ Telemento -e) void ! if (.;inal @2 :=)
-e 2 .;inal>Info % void orrai/( icola -)
! puntero -au5 if ((-).;rente @2 :=) ! au5 2 (-).;rente if ((-).;rente 22 (-).;inal) ! (-).;rente 2 := (-).;inal 2 := % else
! (-).;rente 2 au5>6i' (-).;rente>Ant 2 := % au5>6i' 2 := free(au5) % % orrai;( icola -)
void
! puntero -au5 if ((-).;inal @2 :=) ! au5 2 (-).;inal if ((-).;rente 22 (-).;inal) ! (-).;rente 2 := (-).;inal 2 := % else
! (-).;inal 2 au5>Ant (-).;inal>Ant 2 := % au5>Ant 2 := free(au5) % % Problema 11.5
7
8
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
mostrar&ola(&ola- &) void ! muestra los elementos de una cola Bue TipoElemento e while (@Es,acia&(-&)) ! e 2 /rimero&(-&) printf(4+d 4$ e) orrar&(&) %
se le pase como parCmetro.
% void main()
! &ola & int n$ n1$ nD$ n$ i randomi?e() n 2 1 * random(F00) ,acia&(G&) for (i 2 1 i <2 n i**) Anade&(G&$ 1*random(10DH)) n1 2 while (n1 <2 n)) ! printf(4n 6e Buitan elementos a distancia +d 4$n1) nD 2 0 -&ontador de elementos Bue Buedan - for (i 2 1 i <2 n i**) ! n 2 /rimero&(&)orrar&(G&) if (i + n1 22 D) printf(4t +d se Buita.4$ n) else
!
Anade&(G&$ n) nD**
- se uele a meter en la cola -
% % n 2 nD n1** % printf(4n os nJmeros de la suerte 4) mostrar&ola(G&) % Problema 11.6
int 6onI'uales( /ila -/$ &ola &)
! int sK21
TipoLato e$e1 while (@ Es,acia/(/) GG @ Es,acia&(&) GG sK)
! e 2 /rimero/(/) orrar/(G/) e1 2 /rimero&(&) orrar&(G&) sK 2 (e 22 e1) % return (sK GG Es,acia/(/) GG Es,acia&(&))
% int palindroma()
!
/ila -/ &ola & char ch puts(4 frase a comprobar Bue es palindroma4) ,acia/(G/)
Colas, colas de prioridad y montículos
,acia&(G&) for( (ch 2 'etchar()) @2 n ) if (ch @2 ) ! Anade/(G/$ch) Anade&(G&$ch) % return (6onI'uales(/$&))
% Problema 11.7
#include #include #define MAXIMO 100 typedef float TipoElemento typedef struct
! TipoElemento A"MAXIMO int frente$ final %icola int si' ( int n)
! return ( n * 1) + MAXIMO
% int ant ( int n)
! n if ( n < 0) n 2 MAXIMO 1 return n % int Estallenai(icola i)
! return
i.final 22 si'(si'(i.frente))
% int Esaciai(icola i)
! return i.final 22 si'(i.frente)
% ,aciai(icola- i) void ! i>frente 2 0 i>final 2 MAXIMO1 % void Anadei;(icola- i$ TipoElemento e)
! if (Estallenai(-i))
! puts(4i&ola completa4) e5it (1) % i>final 2 si'(i>final) i>A"i>final 2 e % void Anadei/(icola- i$ TipoElemento e)
! if (Estallenai(-i))
! puts(4i&ola completa4) e5it (1) %
9
10
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
i>frente 2 ant(i>frente) i>A"i>frente 2 e % void orrai/(icola- i)
! if (Esaciai(-i))
! puts(4 6e intenta sacar un elemento en i ac7a4) e5it (1) % i>frente 2 si'( i>frente) % orrai;(icola- i) void ! if (Esaciai(-i))
! puts(4 6e intenta sacar un elemento en i ac7a4) e5it (1) % i>final 2 ant( i>final) % TipoElemento /rimeroi/(icola i) ! if (Esaciai(i)) ! puts(4 Error de e8ecuci9n$ i ac7a4) e5it (1) % return i.A"i.frente % TipoElemento /rimeroi;(icola i) ! if (Esaciai(i)) ! puts(4 Error de e8ecuci9n$ i ac7a4) e5it (1) % return i.A"i.final % Problema 11.8
#define Ma5prio 1D typedef struct
! int prioridad char :ombreT"D0
%Traba8o typedef Traba8o TipoElemento
Nesti9n de una cola - #include 4cola.h4..... typedef struct
! int :/
&ola colas"Ma5prio % &ola/rioridad ,acia&p(&ola/rioridad- cp) void Anade&/(&ola/rioridad- cp$ Traba8o t) void Traba8o /rimero&p(&ola/rioridad cp) orrar&p(&ola/rioridad- cp) void int Esacia&p(&ola/rioridad cp)
Colas, colas de prioridad y montículos
void ,acia&p(&ola/rioridad- cp)
! int 8
cp>:/ 2 Ma5prio for (8 2 0 8 < Ma5prio 8**) ,acia&(G(cp>colas"8)) % Anade&p(&ola/rioridad- cp$ Traba8o t) void ! if ((1 < t.prioridad) GG (t.prioridad <2 cp>:/))
Anade&(Gcp>colas"t.prioridad 1$t) else
puts(4Traba8o con prioridad fuera de ran'o4) % Traba8o /rimero&p(&ola/rioridad cp) ! int i 2 0$ Icola 2 1 - bJsBueda de la primera cola no ac7a - do
! if (@Esacia&(cp.colas"i))
! I&ola 2 i i 2 cp.:/
- termina el bucle -
% else
i** % while (i < cp.:/) if (I&ola 22 1) ! puts(4&ola de prioridades ac7a4) e5it(1) % return /rimero&((cp.colas"I&ola)) % orrar&p(&ola/rioridad- cp) void ! int i 2 0$I&ola21
- bJsBueda de la primera cola no ac7a - do
! if (@Esacia&(cp>colas"i))
! I&ola 2 i i 2 cp>:/
- termina el bucle -
% else
i** % while (i < cp>:/) if (I&ola 22 1) ! puts(4&ola de prioridades ac7a4) e5it(1) % orra&(G(cp>colas"I&ola)) % int Es,acia&/(&ola/rioridad cp)
! int i 2 0 while (Esacia&(cp.colas"i) GG i <
i** return Esacia&(cp.colas"i)
% Problema 11.9
cp.:/ 1)
11
12
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
Codificación
#include #include typedef struct
! int prioridad char :ombreT"D0
%Traba8o typedef struct e'istro&/
! Traba8o traba8o struct e'istro&/- si' %:odo&p typedef :odo&p -&ola/rioridad ,acia&p(&ola/rioridad- &p) void ! -&p 2 := % int Esacia&p(&ola/rioridad &p)
! return (&p 22 :=)
% Traba8o /rimero&p(&ola/rioridad &p) ! if(Esacia&p(&p)) ! printf (4 cola de prioridad acia4) e5it(1) % return (&p>traba8o) % orrar&p(&ola/rioridad- &p) void ! :odo&p -ab if(Esacia&p(-&p)) ! printf (4 cola de priroridad acia4) e5it(1) % ab 2 -&p -&p 2 ab>si' free (ab) % void Anade&p(&ola/rioridad- &p$ Traba8o traba8o)
! :odo&p -nueonodo if (-&p 22 :=)
! nueonodo 2 :ueo:odo&p(traba8o) -&p 2 nueonodo % else if (traba8o.prioridad < (-&p)>traba8o.prioridad)
! nueonodo 2 :ueo:odo&p(traba8o) nueonodo>si' 2 -&p -&p 2 nueonodo % else
Anade&p(G((-&p)>si')$traba8o) % Anade&p(&ola/rioridad- &p$ Traba8o traba8o) void ! :odo&p -nueonodo$ -ant$ -p
Colas, colas de prioridad y montículos
nueonodo 2 :ueo:odo&p(traba8o) if (-&p 22 :=) -&p 2 nueonodo else
if (traba8o.prioridad < (-&p)>traba8o.prioridad) ! nueonodo>si' 2 -&p -&p 2 nueonodo % else
! ant 2 p 2 -&p
se sabe Bue no es el primero )
while ((traba8o.prioridad > p>traba8o.prioridad) GG (p>si' @2 :=)
! ant 2 p p 2 p>si' % if (traba8o.prioridad > p>traba8o.prioridad) falta por comprobar el ultimo
ant 2 p nueonodo>si' 2 ant>si' ant>si' 2 nueonodo % %
:odo&p- :ueo:odo&p(Traba8o traba8o) ! :odo&p -nueonodo nueonodo2 (:odo&p-)malloc(si?eof(:odo&p)) nueonodo>si' 2 := nueonodo>traba8o 2 traba8o return nueonodo % Escribir(&ola/rioridad &p) void ! printf(4ntt &ola de prioridad n4) for ( &p &p 2 &p>si') printf(4 +s +d n4$&p>traba8o.:ombreT$ &p>traba8o.prioridad) printf(4nn4) % main() void ! Traba8o traba8o int d &ola/rioridad &p &p 2 := do
! printf(4 Introdu?ca prioridad del traba8o scanf(4+d4$ Gtraba8o.prioridad) if (traba8o.prioridad @2 1) ! puts(4 nombre del traba8o 4) scanf(4+s4$ Gtraba8o.:ombreT) Anade&p(G&p$traba8o) % % while (traba8o.prioridad @2 1) Escribir(&p) do
! printf(4 borrar 1 2 finn4) scanf(4+d4$ Gd) if (d @2 1) orrar&p(G&p) Escribir(&p) % while (d @2 1) %
1 2 finn4)
13
14
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
Problema 11.10
#define MAXIMO 100 typedef int Telemento typedef struct
! Telemento a"MAXIMO*1 int n %Monticulo 6ubir(Monticulo- monticulo$ int pos) void ! Telemento &lae int padre$ EsMonton20 &lae 2 monticulo>a"pos padre 2 posD while ((padre >2 1) GG @EsMonton) if (monticulo>a"padre > &lae) ! monticulo>a"pos 2 monticulo>a"padre pos 2 padre padre2padreD %
-'uarda el dato -
- ba8a al hueco el padre - - sube un niel en el Crbol -
else
EsMonton21 monticulo>a"pos 2 &lae
- sitJa la clae en su posici9n-
% void Insertar (Monticulo- monticulo$ Telemento &lae)
! if (monticulo>n 22 MAXIMO)
puts(4:o es posible insertar nueas claes mont7culo lleno4) else
! (monticulo>n)** monticulo>a"monticulo>n 2 &lae 6ubir(monticulo$ monticulo>n) % % &rearMonticulo(Monticulo- monticulo) void ! monticulo>n 2 0 % int Es,acio (Monticulo monticulo)
! return monticulo.n 22 0
% Telemento uscarMinimo(Monticulo monticulo) ! if (monticulo.n 22 0) puts( 4monticulo acio4) return monticulo.a"1 % &riba ( int a"$ int primero$ int ultimo) void ! - primero indice del nodo rai? - int EsMonticulo 2 0$ Pi8oMenor$ au5 while ((D - primero <2 ultimo) GG @EsMonticulo)
! - primera condici9n e5presa Bue no sea un nodo ho8a - - tiene un Jnico descendiente - Pi8oMenor 2 D - primero else if (a"D - primero < a"D - primero * 1) Pi8oMenor 2 D - primero if (D-primero 22 ultimo)
else
Pi8oMenor 2 D - primero * 1 - compara rai? con el menor de los hi8os -
Colas, colas de prioridad y montículos
if (a"Pi8oMenor < a"primero)
! au52 a"primero a"primero 2 a"Pi8oMenor a"Pi8oMenor 2 au5 primero 2 Pi8oMenor - continua por la ramade claes m7nimas - % else
EsMonticulo 2 1 % % void EliminarMinimo(Monticulo- monticulo)
! if (Es,acio(-monticulo))
! %
puts(4:o es posible elminar clae mont7culo acio4) e5it(1)
else
! monticulo>a"1 2 monticulo>a"monticulo>n monticulo>n 2 monticulo>n 1 &riba(monticulo>a$ 1$ monticulo>n) % % Problema 11.11
#include #include #include #define Ma5D 100 - operaciones del tipo abstracto de dato Mont7culo -.... ellena(Telemento A"Ma5D$ int -n) void ! int i
randomi?e() -n2random(Ma5D) for(i 2 0 i < (-n) i**) A"i 2 random(Ma5D) % Escribe( Telemento A"$ int n) void ! int i for( i 2 0 i < n i**) if ( (i * 1) + 10 22 0)
printf(4+Qdn4$A"i) else
printf(4+Qd4$A"i)
% ) void main (void ! Telemento a"Ma5D int n$i Monticulo monticulo ellena(a$Gn) Escribe(a$n) &rearMonticulo(Gmonticulo) for(i 2 0 i < n i**) insertar (Gmonticulo$ a"i) for(i 2 0 i < n i**) ! a"i 2 uscarMinimo(monticulo) EliminarMinimo(Gmonticulo) % printf(4 datos ordenadosn4)
15
16
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
Escribe(a$n)
% Problema 11.12
typedef struct
! matricula"F1 % &oche typedef &oche TipoElemento
cola R biola como se definen en los e8ercicios 11.1 R 11.Q con 1D elementos como mC5imo - main() void ! &oche coche char ch icola i &ola & int continuar 2 1 ,aciai(Gi) ,acia&(G&) while (continuar) ! puts(4n Entrada de datos "acci9n idIL 4) puts(4n i retirar i?Buierda d retirar derecha 4) puts(4n I omsertar i?Buierda L insertar derecha 4) puts(4 /ara terminar la simulaci9n 54) do ! scanf(4+c+-c4$Gch) % while(ch @2 i GG ch @2 d GG ch @2 I GG ch @2 L GG ch @2 5) if (ch 22 i) ! if (@Esaciai(i)) ! coche 2 /rimeroi/(i) orrai/(Gi) printf(46alida del coche +s por la i?Buierda4$ coche.matricula) if (@Esacia&(&)) ! si haR cohes en cola d espera aSadirlo coche2 /rimero&(&) orra&(G&) Anadei/(Gi$coche) % % % else if (ch 22 d) ! if (@Esaciai(i)) ! coche 2 /rimeroi;(i) orrai;(Gi) printf(46alida del coche +s por la derecha4$ coche.matricula) if (@Esacia&(&)) ! si haR coches en cola de espera aSadirlo coche2 /rimero&(&) orra&(G&) Anadei;(Gi$coche) % % % else if (ch 22 I) ! printf( 4 Introdu?ca matricula 4 ) 'ets(coche.matricula) if (@Estallenai(i))
Colas, colas de prioridad y montículos
Anadei/(Gi$ coche) - :o cabe en la bicola ponerlo en cola de espera- else Anade&(G&$ coche) % else if (ch 22 L)
! printf( 4 Introdu?ca matricula 4 ) 'ets(coche.matricula) if (@Estallenai(i)) Anadei;(Gi$ coche) :o cabe en la bicola ponerlo en cola de espera else Anade&(G&$ coche) % continuar 2 @(ch 22 5) % % 11.13
#include #include typedef struct
! int :umTraba8o$ Porale'ada$ Tiempoesta$ PoraActual % Latos struct :odo ! Latos Info :odo -6i' % typedef struct :odo -ista ista c"D - colas de prioridad - - Tiempos &/= - int t"D int Otro:iel$ :iel$ elo86istema
Insertar:iel (ista -$ Latos r) void ! ista :ueo if (- 22 :=) ! -2 (:odo-)malloc(si?eof(:odo)) (-)>Info 2 r (-)>6i' 2 := % else if ( (-)>Info.PoraActual <2 r.PoraActual) Insertar:iel (G(-)>6i'$ r) else
! :ueo2 (:odo-)malloc(si?eof(:odo)) :ueo>Info 2 r :ueo>6i' 2 - - 2 :ueo % % 6acarLe&ola ( ista -$ Latos -r) void ! ista au5iliar au5iliar 2 - - 2 (-)>6i' -r 2 au5iliar>Info free(au5iliar) % Iniciali?ar ( ista c"D) void ! ;IE -f int niel
17
18
Algoritmos y estructuras de datos. Una perspectiva en C. Libro de Problemas
Latos r if ((f 2 fopen(4datos.dat4$4rt4))22 :=) ! printf(4 error en archio te5to4) e5it(1) % while (@feof(f)) ! fscanf(f$4+d+d+d+dn4$Gr.:umTraba8o$Gr.Porale'ada$Gr.Tiempoesta$Gniel) r.PoraActual 2 r.Porale'ada Insertar:iel (Gc"niel$ r) % fclose(f) % &o'erTraba8o (ista -$ int Tiempo) void ! Latosr 6acarLe&ola ($ Gr) if (r.PoraActual > elo86istema) elo86istema 2 r.PoraActual if (r.Tiempoesta > Tiempo) ! r.Tiempoesta 2 Tiempo elo86istema *2 Tiempo r.PoraActual 2 elo86istema Insertar:iel ($ r) % else
! elo86istema *2 r.Tiempoesta printf(4;inali?a traba8o +d a la hora +dn4$r.:umTraba8o$elo86istema) % % void Ele'ir:iel (int -:iel$ int -Otro:iel$ ista c"D)
! if (c"-:iel 22:=)
-:iel 2 -Otro:iel else if (c"-Otro:iel @2 :=)
! if (c"-Otro:iel>Info.PoraActual <2 elo86istema)
-:iel 2 -Otro:iel -:o ha lle'ado traba8o a esa cola. &omprobamos Bue no haRa lle'ado traba8o a la cola niel$ en cuRo caso se comprueba Bue traba8o lle'arC antes a una de las colas- else - compara - if (c"-:iel>Info.PoraActual > elo86istema) if (c"-:iel>Info.PoraActual >2 c"-Otro:iel>Info.PoraActual)
-:iel 2 -Otro:iel % % main() void ! c"1 2 := c"D 2 := Iniciali?ar (c) printf (4El orden de salida es4) if (c"D 22 :=) :iel 2 1 else if (c"1 22 :=) :iel 2 D else if (c"1>Info.Porale'ada <2 c"D>Info.Porale'ada) :iel 2 1 else
:iel 2 D elo86istema 2 0 t"1 2 D
Colas, colas de prioridad y montículos
t"D 2 1 while ((c"1 @2 :=) UU (c"D @2 :=)) ! &o'erTraba8o (G(c":iel)$ t":iel) Otro:iel 2 :iel -Nenera Ele'ir:iel (G:iel$ GOtro:iel$ c) % %
alores 1$D alternatiamente-
19