Está en la página 1de 17

MULTIPLES COLAS

PILA DE COLAS

ColaS PilaCS
max max
Y v[max+1] ColaS v[max+1]
ini,fin tope
X Y S ColaS() PilaCS()
esvacia() esvacia()
S T esllena() esllena()
nroelem() nroelem()
A G C adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)

ColaC PilaCC
max max
v[max+1] ColaC v[max+1]
ini,fin tope
ColaC() PilaCC()
esvacia() esvacia()
esllena() esllena()
nroelem() nroelem()
adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)

COLA DE COLAS

ColaS ColaCS
… max max
v[max+1] ColaS v[max+1]
ini,fin ini,fin
ColaS() ColaCS()
esvacia() esvacia()
esllena() esllena()
nroelem() nroelem()
adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)
ColaC ColaCC
max max
v[max+1] ColaC v[max+1]
ini,fin ini,fin
ColaC() ColaCC()
esvacia() esvacia()
esllena() esllena()
nroelem() nroelem()
adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)

ColaS ColaCC
max max
v[max+1] ColaS v[max+1]
ini,fin ini,fin
ColaS() ColaCC()
esvacia() esvacia()
esllena() esllena()
nroelem() nroelem()
adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)
ColaC ColaCC
max max
v[max+1] ColaC v[max+1]
ini,fin ini,fin
ColaC() ColaCC()
esvacia() esvacia()
esllena() esllena()
nroelem() nroelem()
adicionar(elem) adicionar(elem)
eliminar() eliminar()
llenar(n) llenar(n)
mostrar() mostrar()
vaciar(Z) vaciar(Z)

EJEMPLO: Sea un conjunto de colas de vehículos(placa,marca,color,modelo)

Ejemplo Cola Simple de Colas Simples de Vehículos


Vehiculo ColaSV ColaSCV
placa max max
marca Vehiculo v[max+1] ColaSV v[max+1]
color ini,fin ini,fin
modelo

PROBLEMAS Modularizando
Contar(ColaSCv a, String x)
Cuantos Vehículos del Color X existe en el {
conjunto de Colas b=new ColaSCV()
Contar(ColaSCV a, String x) c=0
{ b=new ColaSCV() while not a.esvacia()
aux=new ColaSV() {
c=0 ColaSV cx=a.eliminar()
while not a.esvacia() c=c+busca(cx,x)
{ ColaSV cx=a.eliminar() b.adicionar(cx)
While not cx.esvacia() }
{ Vehiculo vx=cx.eliminar() Print(c)
If vx.getColor()=x a.vaciar(b)
c=c+1 }
aux.adicionar(vx) busca(ColaSV cx, String x)
} {
cx.vaciar(aux) Aux=new ColaSV()
b.adicionar(cx) k=0
} while not cx.esvacia()
a.vaciar(b) { Vehiculo vx=cx.eliminar()
print(c) If vx.getColor()=x
} k=k+1
aux.adicionar(vx)
}
cx.vaciar(aux)
return k
}
Llevar a una nueva cola los vehículos de la marca marcaX(ColaCSV a, String x)
X { aux=new ColaCSV()
marcaX(ColaCSV a, String x) nueva, aux2=new ColaSV()
{ aux=new ColaCSV() while not a.esvacia()
nueva, aux2=new ColaSV() { ColaSV cx=a.eliminar()
while not a.esvacia() ColaSV nueX=buscaX(cx,x)
{ ColaSV cx=a.eliminar() nueva.vaciar(nueX)
While not cx.esvacia() aux.adicionar(cx)
{ Vehiculo vx=cx.eliminar() }
If vx.getMarca()=x a.vaciar(aux)
nueva.adicionar(vx) a.adicionar(nueva)
Else }
aux2.adicionar(vx) buscas(ColaSV a, String x)
} { aux,nue=new ColaSV()
cx.vaciar(aux2) While not a.esvacia()
aux.adicionar(cx) { Vehiculo vx=a.eliminar()
} If vx.getMarca()=x
a.vaciar(aux) nue.adicionar(vx)
a.adicionar(nueva) Else
} aux.adicionar(vx)
}
cx.vaciar(aux)
return nue
}

EJEMPLO: Cola Simple de Colas Circulares

Departamentos y Provincias
Departamento CSimpleD
IdDpto max
nombre v[max+1]
capital ini, fin
superficie
población
CCircularP prov
getters CSimpleD()
setters esvacia()
leer() esllena()
mostrar() nroelem()
adicionar(elem)
eliminar()
llenar(n)
mostrar()
vaciar(Z)

Provincia CCircularP
idProv max
nombre v[max+1]
capital ini, fin
superficie
población
.. …

De cada departamento mostrar la i-esima provincia


Solucion4(CSimpleD A, int i)
{ aa=new CSimpleD()
While not A.esvacia()
{ Departamento d=A.eliminar()
aa.adicionar(d)
if i<=d.getProv().nroelem()
{
CCircularP z=d.getProv()
For ii=1 to i
Provincia x=z.eliminar()
x.mostrar() //print(x.getNombre())
}
}
A.vaciar(aa)
}

De cada departamento llevar su i-esima provincia a principio


Solución 5(CSimpleD A, int i)
{ aa=new CSimpleD()
bb=new CCircularP()
While not A.esvacia()
{
Departamento d=A.eliminar()

CCircularP w=d.getProv()
If i<=w.nroelem()
{
For j=1 to i-1
bb.adicionar(w.eliminar())
Provincia x=w.eliminar()
bb.vaciar(w)
w.adicionar(x)
w.vaciar(bb)
d.setProv(w)
}
aa.adcionar(d)
}
A.vaciar(aa)
}
Ordenar las provincias por superficie del departamento X
Solucion6(CSimpleD A, String x)
{
aux=new CSimpleD()
while not A.esvacia()
{
Departamento d=A.eliminar()
If d.getNombre()=x
{
CCircularP p=d.getProv()
Ordena(p)
d.setProv(p)
}
aux.adicionar(d)
}
A.vaciar(aux)
}
Ordena(CCircularP p)//ascendente
{ aux,R=new CCircularP()
While not p.esvacia(){
men=p.eliminar()
while not p.esvacia()
{ x=p.eliminar()
if x.getSuperficie()<men.getSuperficie()
{ aux.adicionar(men)
men=x
}
Else
aux.adicionar(x)
}
R.adicionar(men)
p.vaciar(aux) }
p.vaciar(R)
}
Cola Simple de Colas Circulares
Sea un diccionario que almacena palabras y de cada palabra almacena sus significados

palabra1 palabra2 Palabra3

CCircularS Palabra CSimpleP


max texto max
v[max+1] CCircularS s v[max+1]
ini,fin ini,fin
….. getters …..
setters
leer
mostrar

De cada palabra mostrar el ultimo significado


ultimaSig(CSimpleP A)
{ aux=new CSimpleP()
While not A.esvacia()
{
Palabra x=A.eliminar()
aux.adicionar(x)
n=x.getS().nroelem()
for i=1 to n-1
x.getS().adicionar( x.getS().eliminar())
String u=x.getS().eliminar()
print(x.getTexto(),u)
x.getS().adicionar(u)
}
A.vaciar(aux)
}
Ejemplo Cola Circular de Colas Simples de Vehículos
Vehiculo ColaSV ColaCCV
placa max max
marca Vehiculo v[max+1] ColaSV v[max+1]
color ini,fin ini,fin
modelo

Ejemplo Cola Simple de Colas Simples de Vehículos


Vehiculo ColaSV ColaSCV
placa max max
marca Vehiculo v[max+1] ColaSV v[max+1]
color ini,fin ini,fin
modelo

ColaCCV
max
ColaSV v[max+1]
ini,fin
MULTIPLE COLA

1 2 3 4 …. N-1 N

1 2 3 4 …. N-1 N

Vehiculo CCircularV MultiCCV


placa max nc
marca Vehiculo v[max+1] CCircularV v[50]
color ini,fin
modelo
CCircularV () MultiCCV()
esvacia() getNc()/setNc(n)
esllena() esvacia(i)
nroelem() esllena(i)
adicionar(elem) nroelem(i)
eliminar() adicionar(i,Vehiculo elem)
llenar(n) Vehiculo eliminar(i)
mostrar() llenar(i,n)
vaciar(Z) llenar(n)
mostrar(i)
mostrar()
vaciar(i,CCircularV Z)
vaciar(i,j)
Class MultiCCV
{ private
int nc
CCircularV v[50]
public
MultiCCV()
{ for i=1 to 49
v[i]=new CCircularV()
}
getNc(){return nc}
setNc(n){nc=n}
esvacia(int i)
{ return v[i].esvacia() }
esllena(int i)
{ return v[i].esllena() }
nroelem(int i)
{ return v[i].nroelem() }
adicionar(int i,Vehiculo elem)
{ v[i].adicionar(elem) }
Vehiculo eliminar(i)
{ return v[i].eliminar() }
llenar(int i,n)
{ for j=1 to n
{ nue=new Vehiculo()
nue.leer()
adicionar(i,nue) //v[i].adicionar(nue)
}
}
llenar(int n)
{ nc=n
For i=1 to nc
{ read(k)
llenar(i,k)
}
}
mostrar(int i)
{ v[i].mostrar() }
mostrar()
{ for i=1 to nc
mostrar(i)
}
vaciar(int i,CCircularV Z)
{ v[i].vaciar(Z) }
vaciar(int i,j)
{ v[i].vaciar(v[j] }
}
Contar los vehiculos del color X
Contar(MultiCCV a, String x)
{ aux=new CCircularV()
c=0
For i=1 to a.getNc()
{ while not a.esvacia(i)
{ Vehiculo vx=a.eliminar(i)
If vx.getColor()=x
c=c+1
aux.adicionar(vx)
}
a.vaciar(i,aux)
}
Print(c)
}
Contar2(MultiCCV a, String x)
{
c=0
For i=1 to a.getNc()
{ n=a.nroelem(i)
For k=1 to n
{ Vehiculo vx=a.eliminar(i)
If vx.getColor()=x
c=c+1
a.adicionar(vx)
}

}
Print(c)
}

EJERCICIOS:
1. llevar a una nueva cola los vehículos de la marca X
2. Reorganizar las colas, tal que en cada cola estén vehículos de mismo color
3. Eliminar la i-esima cola, distribuyendo sus elementos en el resto de las colas

EJEMPLO: Sea MultiCola de las Practicas de los estudiantes

1 2 3 4 5 …
Cola 1 Cola 2 Cola 3 Cola 4 Cola 5=nc

Practica CSimpleP MultiColaP


ci max nc
nroPractica v[max+1] c[30]
tema ini,fin
nota
Getters CSimpleP() MultiColaP()
Setters esvacia() getNc()
leer esllena() setNc(n)
mostrar nroelem() esvacia(i)
adicionar(elem) esllena(i)
eliminar() nroelem(i)
llenar(n) adicionar(elem,i)
mostrar() eliminar(i)
vaciar(Z) llenar(i,n)
llenar(n)
mostrar(i)
mostrar()
vaciar(i,Z)
vaciar(i,j)

Class CSimpleP Class MultiColaP


{ private { private
int max=500 int nc
Practica v[max+1] CSimpleP c[30]
int ini,fin public
public
CSimpleP() MultiColaP()
{ ini=fin=0} {
Esvacia() For i=1 to 29
{} c[i]=new CSimpleP()
….. }
} getNc(){return nc}
setNc(int n){nc=n}
esvacia(int i)
{
return c[i].esvacia()
}
esllena(int i)
{
return c[i].esllena()
}
nroelem(int i)
{ return c[i].nroelem()}
adicionar(Practica elem, int i)
{
c[i].adicionar(elem)
}
eliminar(int i)
{
return c[i].eliminar()
}
llenar(int i,n)
{
c[i].llenar(n)
}
llenar(int n)
{
nc=n
for i=1 to nc
{ read(k)
llenar(i,k) //c[i].llenar(k)
}
}
mostrar(int i)
{
c[i].mostrar()
}
mostrar()
{
for i=1 to nc
mostrar(i) //c[i].mostrar()
}
vaciar(int i, CSimpleP Z)
{ c[i].vaciar(Z)}
vaciar(int i, j)
{ c[i].vaciar(c[j])
}
}
PROBLEMAS

Begin Determinar la cantidad total de Practicas


A=new MultiColaP() presentadas en el tema X
Read(n) Contar(MultiColaP a, String x)
A.llenar(n) {
A.mostrar() aux=new CSimpleP()
Contar(A,”Pilas”) c=0
… for i=1 to a.getNc()
{
End While not a.esvacia(i)
{ Practica p=a.eliminar(i)
if p.getTema()=x
c=c+1
aux.adicionar(p)
}
a.vaciar(i,aux)
}
Print(c)
}
Verificar si en todas las colas tienen alguna Verifica(MultiColaP a, String x)
prácticas en el tema X { c=0
Verifica(MultiColaP a, String x) Aux=new CSimpleP()
{ sw= true For i=1 to a.getNc()
Aux=new CSimpleP() {
For i=1 to a.getNc() Sw2=false
{ While not a.esvacia(i)
Sw2=false // k=0 { Practica p=a.eliminar(i)
While not a.esvacia(i) If p.getTema()=x
{ Practica p=a.eliminar(i) Sw2=true
If p.getTema()=x Aux.adicionar(p)
Sw2=true //k=k+1 }
Aux.adicionar(p) a.vaciar(i,Aux)
} if sw2
a.vaciar(i,Aux) c=c+1
if not sw2 //k=0 }
sw=false If c=a.getNc()
} Print(“existe en todas”)
If sw Else
Print(“existe en todas”) Print(“en algunas no existe”)
Else
Print(“en algunas no existe”)
}
Determinar la cantidad total de practicas Ordenar las practicas de la siguiente manera,
presentadas por cada estudiante cola 1 del primer estudiante, cola 2 segundo
Totales(CSimpleE a, MultiColaP b) estudiante ……
{ aa=new CSimpleE() Ordena(CSimpleE a, MultiColaP b)
bb=new CSimpleP() {aa=new CSimpleE()
while not a.esvacia() aux2,aux=new CSimpleP()
{ Estudiante e=a.eliminar() for i=1 to b.getNc()
aa.adicionar(e) while not b.esvacia(i)
c=0 aux.adicionar( b.eliminar(i))
for i=1 to b.getNc() k=0
{ while not a.esvacia()
While not b.esvacia(i) { Estudiante e=a.eliminar()
{ Practica p=b.eliminar(i) k=k+1
bb.adicionar(p) aa.adicionar(e)
if p.getCi()=e.getCi() while not aux.esvacia()
c=c+1 { Practica p=aux.eliminar()
} If p.getCi()=e.getCi()
b.vaciar(i,bb) b.adicionar(p,k)
} else
e.mostrar() aux2.adicionar(p)
print(c) }
} aux.vaciar(aux2)
a.vaciar(aa) }
} a.vaciar(aa)
b.setNc(k) //b.setNc(a.nroelem())
}
EJERCICIOS
1. Cuantos estudiantes no presentaron practicas(ninguna)
2. Mostrar a los estudiantes que tienen practica(s) en el tema X
3. Cuál es la máxima nota en las practica del tema X
4. Mostrar a los estudiantes que tienen la máxima nota en el tema X
5. Mostrar a los estudiantes que tienen el mayor número de prácticas presentadas
6. Establecer el diagrama de clases si utilizamos Colas Circulares
7. Resolver 2 de los problemas utilizando Colas Circulares

EJEMPLO: Considerando que se tiene el registro de los vehículos por año en un Conjunto de Colas
1 2 3, 4 ,5, 6…. n-1 N - n+1,
n+2

Cola 1 Cola 2 2002,2003,2004,2005=x Cola n-1 Cola n


2000 2001 2019 2020

0 1 2 3 4 19 20 21=nc 22=nc+1 23=nc+2 …28 29


2000 2001 2002 …. 2018 2019 2020

Vehiculo ColaV ConjuntoCV


placa max nc
marca v[max+1] ve[30]
modelo ini,fin
color
getters ColaV() ConjuntoCV()
setters esvacia() getNc()
leer esllena() setNc(n)
mostrar nroelem() esvacia(i)
adicionar(elem) esllena(i)
eliminar() nroelem(i)
llenar(n) adicionar(elem,i)
mostrar() eliminar(i)
vaciar(Z) llenar(i,n)
llenar(n)
mostrar(i)
mostrar()
vaciar(i,Z)
vaciar(i,j)

Suponiendo que se tiene una ColaV con vehículos. Se pide almacenar los vehículos en ConjuntoCV
a) En la cola del año X
Almacenar(ColaV a, ConjuntoCV b, int x)
{
Pos=x-1999 /// pos=x-2000+1
If pos<=b.getNc() and pos>0
{
b.vaciar(pos,a)
}
}
b) Distribuir la cola al ConjuntoCV
Distribuir(ColaV a, ConjuntoCV b)
{ pos=1
While not a.esvacia()
{ vehi=a.eliminar()
b.adicionar(vehi,pos)
if pos=b.getNc()
pos=1
else
pos=pos+1
}
}
c) En el año X no hay importación, por tanto se pide vaciar al año anterior. Si es el año base
llevar al último año.
Llevar(ConjuntoCV a, int x)
{ pos=x-2000+1
If pos<=a.getNc() and pos>0
{
If pos=1
a.vaciar(a.getNc(),pos)
else
a.vaciar(pos-1,pos)
}

}
d) Ordenar los vehículos de las colas por el modelo, sin usar estructuras auxiliares
Ordenar(ConjuntoCV w)
{
For i=1 to w.getNc()
{
While not w.esvacia(i)
{
men=w.eliminar(i)
while not w.esvacia(i)
{ ve=w.eliminar(i)
If ve.getModelo()<men.getModelo()
{ w.adicionar(men,w.getNc()+1)
men=ve
}
else
w.adicionar(ve,w.getNc()+1)
}
w.adicionar(men,w.getNc()+2)
w.vaciar(i,w.getNc()+1)
}
w.vaciar(i,w.getNc()+2)
}
}
e)
Problemas a resolver
1. Eliminar la i-esima cola, y sus elementos llevar a la j-esima cola (i<>j) 1<=i,j<=nc
2. Reorganizar las colas de tal manera que los vehículos con modelo 2000 estén en la cola 1, con
modelo 2001 estén en la cola 2, con modelo 2002 estén en la cola 3, … con modelo 2019 en la
cola 20, y modelos por debajo del 2000 se almacenen en la cola 21.

También podría gustarte