You are on page 1of 14

Apartado 10.2.

1, clase ColaLineal
package tipoCola;
public class ColaLineal
{
private static final int MAXTAMQ = 39;
protected int frente;
protected int fin;
protected TipoDeDato !listaCola;

public ColaLineal"#
{
frente = $;
fin = %&;
listaCola = ne' TipoDeDato MAXTAMQ!;
(
)) operaciones de *odificaci+n de la cola
public void insertar"TipoDeDato ele*ento# t,ro's -.ception
{
if "/colaLlena"##
{
listaCola00fin! = ele*ento;
(
else
t,ro' ne' -.ception"12verflo' en la cola1#;
(
public TipoDeDato 3uitar"# t,ro's -.ception
{
if "/cola4acia"##
{
return listaColafrente00!;
(
else
t,ro' ne' -.ception"1Cola vacia 1#;
(
public void borrarCola"#
{
frente = $;
fin = %&;
(
)) acceso a la cola
public TipoDeDato frenteCola"#t,ro's -.ception
{
if "/cola4acia"##
{
return listaColafrente!;
(
else
t,ro' ne' -.ception"1Cola vacia 1#;
(
)) *5todos de verificaci+n del estado de la cola
public boolean cola4acia"#
{
return frente 6 fin;
(
public boolean colaLlena"#
{
return fin == MAXTAMQ%&;
(
(
Apartado 10.3.1, clase Cola Circular
package TipoCola;
public class ColaCircular
{
private static final int MAXTAMQ = 99;
protected int frente;
protected int fin;
protected 2b7ect !listaCola ;
private int siguiente"int r#
{
return "r0&# 8 MAXTAMQ;
(
public ColaCircular"#
{
frente = $;
fin = MAXTAMQ%&;
listaCola = ne' 2b7ect MAXTAMQ!;
(
)) operaciones de *odificaci+n de la cola
public void insertar"2b7ect ele*ento# t,ro's -.ception
{
if "/colaLlena"##
{
fin = siguiente"fin#;
listaColafin! = ele*ento;
(
else
t,ro' ne' -.ception"12verflo' en la cola1#;
(
public 2b7ect 3uitar"# t,ro's -.ception
{
if "/cola4acia"##
{
2b7ect t* = listaColafrente!;
frente = siguiente"frente#;
return t*;
(
else
t,ro' ne' -.ception"1Cola vacia 1#;
(
public void borrarCola"#
{
frente = $;
fin = MAXTAMQ%&;
(
)) acceso a la cola
public 2b7ect frenteCola"# t,ro's -.ception
{
if "/cola4acia"##
{
return listaColafrente!;
(
else
t,ro' ne' -.ception"1Cola vacia 1#;
(
)) *5todos de verificaci+n del estado de la cola
public boolean cola4acia"#
{
return frente == siguiente"fin#;
(
public boolean colaLlena"#
{
return frente == siguiente"siguiente"fin##;
(
(
EJEMPLO 10.1
i*port Tipo9ila:9ila4ector;
i*port TipoCola:ColaCircular;
i*port 7ava:io:;;
public class Capicua
{
public static void *ain"<tring ! a#
{
boolean capicua;
=uffered>eader entrada = ne' =uffered>eader"
ne' ?nput<trea*>eader"<@ste*:in##;
<tring nu*ero;
9ila4ector pila = ne' 9ila4ector"#;
ColaCircular 3 = ne' ColaCircular"#;
tr@ {
capicua = false;
',ile "/capicua#
{
do {
<@ste*:out:print"1AnTeclea el nB*eroC 1#;
nu*ero = entrada:readLine"#;
(',ile "/ valido"nu*ero##; )) todos dDgitos
)) pone en la cola @ en la pila cada dDgito
for "int i = $; i E nu*ero:lengt,"#; i00#
{
C,aracter c;
c = ne' C,aracter"nu*ero:c,arAt"i##;
3:insertar"c#;
pila:insertar"c#;
(
)) se retira de la cola @ la pila para co*parar
do {
C,aracter d;
d = "C,aracter# 3:3uitar"#;
capicua = d:e3uals"pila:3uitar"##;))co*para por igualdad
( ',ile "capicua FF /3:cola4acia"##;
if "capicua#
<@ste*:out:println"nu*ero 0 1 es capicBa: 1#;
else
{
<@ste*:out:print"nu*ero 0 1 no es capicBaG 1#;
<@ste*:out:println"1 intente otro: 1#;
)) se vacDa la cola @ la pila
3:borrarCola"#;
pila:li*piar9ila"#;
(
(
(
catc, "-.ception er#
{
<@ste*:err:println"1-rror "e.cepcion# en el procesoC 1 0 er#;
(
(

private static boolean valido"<tring nu*ero#
{
boolean s' = true;
int i = $;
',ile "s' FF "i E nu*ero:lengt,"###
{
c,ar c;
c = nu*ero:c,arAt"i00#;
s' = "c 6= H$H FF c E= H9H#;
(
return s';
(
(
Apartado 10.4.1, clase ColaLista
package TipoCola;
)) declaraci+n de Iodo "s+lo visible en este pa3uete#
class Iodo
{
2b7ect ele*ento;
Iodo siguiente;
public Iodo"2b7ect .#
{
ele*ento = .;
siguiente = null;
(
(
)) declaraci+n de la clase ColaLista
public class ColaLista
{
protected Iodo frente;
protected Iodo fin;
)) constructorC crea cola vacDa
public ColaLista"#
{
frente = fin = null;
(
)) insertarC pone ele*ento por el final
public void insertar"2b7ect ele*ento#
{
Iodo a;
a = ne' Iodo"ele*ento#;
if "cola4acia"##
{
frente = a;
(
else
{
fin:siguiente = a;
(
fin = a;
(
)) 3uitarC sale el ele*ento frente
public 2b7ect 3uitar"#t,ro's -.ception
{
2b7ect au.;
if "/cola4acia"##
{
au. = frente:ele*ento;
frente = frente:siguiente;
(
else
t,ro' ne' -.ception"1-li*inar de una cola vacDa1#;
return au.;
(
)) libera todos los nodos de la cola
public void borrarCola"#
{
for "; frente /= null;#
{
frente = frente:siguiente;
(
<@ste*:gc"#;
(
)) acceso al pri*ero de la cola
public 2b7ect frenteCola"# t,ro's -.ception
{
if "cola4acia"##
{
t,ro' ne' -.ception"1-rrorC cola vacDa1#;
(
return "frente:ele*ento#;
(
)) verificaci+n del estado de la cola
public boolean cola4acia"#
{
return "frente == null#;
(
(
EJERCICIO 10.1
i*port TipoCola:;;
i*port 7ava:io:;;
i*port 7ava:util:>ando*;
public class Iu*eros<uerte
{
public static void *ain"<tring ! a#
{
int nG n&G nJG i;
?nteger nv;
ColaLista 3 = ne' ColaLista"#;
>ando* r = ne' >ando*"#;
tr@
{
)) nB*ero inicial de ele*entos de la lista
n = && 0 r:ne.t?nt"K9#;
)) se generan n nB*eros aleatorios
for "i = &; i E= n; i00#
{
nv = ne' ?nteger"&0r:ne.t?nt"&$&##;
3:insertar"nv#;
(
)) se genera aleatoria*ente el intervalo n&
n& = & 0 r:ne.t?nt"&&#;
)) se retiran de la cola ele*entos a distancia n&
<@ste*:out:print"1An<e 3uita de la listaC 1#;
',ile "n& E= n#
{
2b7ect nt;
nJ = $; )) contador de ele*entos 3ue 3uedan
for "i = &; i E= n; i00#
{
nt = 3:3uitar"#;
if "i 8 n& == &#
{
<@ste*:out:print"nt 0 1 1#;
(
else
{
3:insertar"nt#; )) se vuelve a *eter en la cola
nJ00;
(
(
n = nJ;
n& = & 0 r:ne.t?nt"&&#;
(
<@ste*:out:println"1AnLos nB*eros de la suerteC 1#;
*ostrarCola"3#;
<@ste*:out:println"#;
(
catc, "-.ception t#
{
<@ste*:out:println"1La ocurrido la e.cepci+nC 1 0 t#;
(
(

private static void *ostrarCola"ColaLista 3# t,ro's -.ception
{
',ile "/3:cola4acia"##
{
?nteger v;
v = "?nteger# 3:3uitar"#;
<@ste*:out:print"1 1 0 v:int4alue"##;
(
(
(
Apartado 10..1, clase !icola
package TipoCola;
public class =icola e.tends ColaLista
{
)) inicialiMa frente @ fin a null
public =icola"#
{
super"#;
(
)) inserta por el final de la =icola
public void ponerNinal"2b7ect ele*ento#
{
insertar"ele*ento#; )) *5todo ,eredado de ColaLista
(
)) inserta por el frente; *5todo propio de =icola
public void ponerNrente"2b7ect ele*ento#
{
Iodo a;
a = ne' Iodo"ele*ento#;
if "cola4acia"##
{
fin = a;
(
a:siguiente = frente;
frente = a;
(
)) retira ele*ento frente de la =icola
public 2b7ect 3uitarNrente"#t,ro's -.ception
{
return 3uitar"#; )) *5todo ,eredado de ColaLista
(
)) retira ele*ento final; *5todo propio de =icola:
)) -s necesario recorrer la bicola para situarse en
)) el nodo anterior al finalG para despu5s enlaMar:
public 2b7ect 3uitarNinal"#t,ro's -.ception
{
2b7ect au.;
if "/cola4acia"##
{
if "frente == fin# )) la =icola dispone de un solo nodo
au. = 3uitar"#;
else
{
Iodo a = frente;
',ile "a:siguiente /= fin#
a = a:siguiente;
)) siguiente del nodo anterior se pone a null
a:siguiente = null;
au. = fin:ele*ento;
fin = a;
(
(
else
t,ro' ne' -.ception"1-li*inar de una bicola vacDa1#;
return au.;
(


public 2b7ect frente=icola"#t,ro's -.ception
{
return frenteCola"#; )) *5todo ,eredado de ColaLista
(
public 2b7ect final=icola"#t,ro's -.ception
{
if "cola4acia"##
{
t,ro' ne' -.ception"1-rrorC cola vacDa1#;
(
return "fin:ele*ento#;
(
public boolean bicola4acia"#
{
return cola4acia"#; )) *5todo ,eredado de ColaLista
(
public void borrar=icola"#
{
borrarCola"#; )) *5todo ,eredado de ColaLista
(
public int nu*-le*s=icola"# )) cuenta los ele*entos de la bicola
{
int n = $;
Iodo a = frente;
',ile "a:siguiente /= fin#
{
n00;
a = a:siguiente;
(
return n;
(
(
EJERCICIO 10.2
La salida a pista de las avionetas de un aerdromo est organizada en forma de
fila(lnea), con una capacidad mxima de aparatos en espera de 16 avionetas. Las
avionetas llegan por el extremo izquierdo (final) salen por el extremo derec!o (frente).
"n piloto puede decidir retirarse de la fila por razones t#cnicas, en ese caso todas las
avionetas que la siguen !an de ser quitadas de la fila, retirar el aparato las avionetas
desplazadas colocarlas de nuevo en el mismo orden relativo en que esta$an. La salida de
una avioneta de la fila supone que las dems son movidas !acia adelante, de tal forma
que los espacios li$res del estacionamiento est#n en la parte izquierda (final).
La aplicacin para emular este estacionamiento tiene como entrada un carcter que
indica una accin so$re la avioneta, la matrcula de la avioneta. La accin puede ser
llegada (%), salida (&) de la avioneta que ocupa la primera posicin retirada (') de una
avioneta de la fila. %n la llegada si el estacionamiento est# lleno la avioneta espera !asta
que se quede una plaza li$re.
Clase principal
En el mtodo *ain"# se codifica la simulacin que se plantea en el ejercicio. Se
incorpora el mtodo retirar"# que simula el hecho de que una avioneta, que se
encuentra en cualquier posicin de la bicola, decide salir de la fila; el mtodo retira de la
fila las avionetas por el frente, a la vez que las guarda en una pila (se guardan las avionetas
que, temporalmente, tienen que apartarse para que salga la averiada, hasta que encuentra
la avioneta a retirar. ! continuacin se insertan en la fila, por el frente, las avionetas de la
pila, as" quedan en el mismo orden que estaban anteriormente. El atributo *a.AvtaNila
(#$ guarda el n%mero m&'imo de avionetas que pueden estar en la fila esperando la
salida.
i*port Tipo9ila:9ilaLista;
i*port TipoCola:=icola;
i*port 7ava:io:;;
public class Aerodro*o
{
static int *a.AvtaNila = &O;
public static void *ain"<tring ! a#
{
<tring avta;
c,ar c, = H H;
<tring c;
=icola fila;
boolean estaG validoG *as = true;
=uffered>eader entrada = ne' =uffered>eader"
ne' ?nput<trea*>eader"<@ste*:in##;
fila = ne' =icola"#;
',ile "*as#
{
<@ste*:out:println"19ara ter*inar la si*ulaci+nC X:1#;
tr@ {
do {
<@ste*:out:print"1acci+n"-)<)T#C 1#;
c = entrada:readLine"#;
c, = c:c,arAt"$#;
c, = C,aracter:toPpperCase"c,#;
valido = "c:lengt,"# == &# FF
"c, == H-H QQ c, == H<H QQ c, == HTH QQ c, == HXH#;
( ',ile"/valido#;
if "c, == H<H#
{
if "/fila:bicola4acia"##
{
avta = "<tring#fila:3uitarNrente"#;
<@ste*:out:println"1<alida de la avionetaC 1 0 avta#;
(
(
else if "c, == H-H#
{
if "fila:nu*-le*s=icola"# E *a.AvtaNila#
{
<@ste*:out:print"1*atrDculaC 1#;
avta = entrada:readLine"#;
fila:ponerNinal"avta#;
(
(
else if "c, == HTH#
{
<@ste*:out:print"1*atrDculaC 1#;
avta = entrada:readLine"#;
esta = retirar"filaG avta#;
if "/esta#
<@ste*:out:println"1RR avioneta no encontrada//1#;
(
(
catc, "-.ception er#
{
<@ste*:err:println"1-.cepcion en la si*ulaci+nC 1 0 er#;
(
*as = /"c, == HXH#;
(
(
static boolean retirar"=icola filaG <tring avioneta#
t,ro's -.ception
{
boolean encontrada = false;
9ilaLista pila = ne' 9ilaLista"#;
',ile "/encontrada FF /fila:bicola4acia"##
{
<tring avta;
avta = "<tring#fila:3uitarNrente"#;
if "avioneta:e3uals"avta##
{
encontrada = true;
<@ste*:out:println"1Avioneta 10avta01 retirada1#;
(
else
pila:insertar"avta#;
(
)) ele*entos de la pila se *eten de nuevo en la fila
',ile "/pila:pila4acia"##
{
fila:ponerNrente"pila:3uitar"##;
(
return encontrada; )) operaci+n realiMada
(
(

You might also like