SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
1.DEFINICIÓN
Una cola es una estructura de datos simple y se define como una colección de elementos
en la que sus componentes se introducen por un extremo (fin) y se eliminan por otro (ini)
[10]. Es decir, los elementos se eliminan en el mismo orden que se introdujeron. Debido
a esta característica las colas también reciben el nombre de estructuras FIFO (FIRST
INPUT FIRST OUTPUT. La Figura 1 muestra ejemplos prácticos de colas.
Figura No.1. a) Cola de personas b) Cola de automóviles
2 REPRESENTACIÓN GRÁFICA DE UNA COLA
2.1 EN VECTORES
Una cola puede representarse utilizando arreglos como muestra la Figura 2. Donde el
primer elemento ocupa la posición 3, el segundo elemento ocupa la posición 4 y así
sucesivamente.
Figura.2 Cola M con 4 elementos
2.2 EN LISTAS ENLAZADAS
Puede aplicarse el concepto de colas en listas enlazadas sin embargo debido a que existen
varios tipos de listas a continuación se proporciona una posible forma de representación
gráfica de colas en listas simplemente enlazadas (ver Figura No. 3). Donde el primer nodo
esta apuntado por p y el último nodo esta apuntado por q.
Figura No. 3 Representación de la cola G en lista enlazada simple
p q
3. OPERACIONES EN UNA COLA
Entre las operaciones básicas de una COLA se tienen:
l u n a
G
e s t u
v ini fin max
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
a) Adicionar un elemento a la cola
Figura No. 4 Adicionando el dato a en la cola normal
Z
b) Eliminar un dato
Figura No. 5 Elimina el dato s de la cola normal
4. ESTADOS ADICIONALES DE UNA COLA Normal
Además de las operaciones básicas de una cola, también se pueden diseñar métodos que
permitan reflejar otros estados adicionales como son: estado inicial (ver Figura No.6),
Estado de cola llena (ver Figura No. 7) y estado de cola vacía (ver Figura No. 8).
a) Estado inicial cola normal
Figura.6 Estado inicial
b) Cola normal llena
Figura No. 7 Cola llena
c) Cola normal vacía
Figura No. 8 Cola vacía
Si se observa la cola de la Figura No. 9 refleja el estado de cola llena. Sin embargo, la
cola tiene espacios disponibles lo que contradice el estado cola llena. A raíz de este tipo
de problemas donde no se aprovecha adecuadamente los espacios de memoria se definen
las estructuras de datos denominadas colas circulares que se describen a continuación.
Figura No. 9 Cola llena
5. COLAS CIRCULARES
Son estructuras que nos permiten utilizar los espacios de memoria de manera más
eficiente que una cola simple normal.
d i a
v ini fin max
t u s
v ini fin max
v ini=0, fin =0 max
e s e s t u d i e n
v ini fin max
v ini=0, fin =0 max
i e n
v ini fin max
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
5.1 REPRESENTACIÓN GRÁFICA DE UNA COLA CIRCULAR
Representaremos las colas circulares en vectores como muestra la Figura No. 9 utilizando
las posiciones de memoria desde 0. En tal sentido, el primer elemento de la cola está
ubicado después del valor que indica el puntero ini. Por ejemplo, en la cola circular de la
Figura No. 9 el primer elemento de la cola está ubicado en la posición 3 es decir ocupa
una posición después del puntero ini.
Figura No.9 Cola Circular K con un elemento
Donde:
 La cola circular de capacidad max sólo podrá contenermax-1 elementos. Ello, debido
a que debe existir un espacio de memoria libre que va permitir distinguir el inicio y
el final de dicha cola.
 Por otro lado, el primer elemento de la cola circular está ubicado una posición después
de su posición real.
 En tanto que los punteros ini, fin se moverán en el sentido de las agujas del reloj, lo
que significa que tomarán valores como: 0,1,2,3,4,…,max-1,0,1,2,3,4,…, max-
1,0,1,2.3.4.5,… y así sucesivamente según la capacidad del vector. Dichos valores en
sí, se pueden generar aplicando la teoría de la aritmética modular que básicamente
está representada por la función mod que representa el módulo o residuo de una
división entera manifiesta por la siguiente expresión aritmética: x mod y = x-y*(x div
y). Finalmente, considerando el patrón de generación de los valores de los punteros
ini y fin se puede afirmar que es equivalente a representar los símbolos básicos de un
sistema de numeración de base max[12].
En tal sentido, si observamos la cola circular de la Figura No.10 esta cola tiene capacidad
para 8 elementos (max=8) sin embargo considerando que debe existir un espacio libre
(que va a distinguir el inicio y el final de la cola circular) se tiene la posibilidad de
almacenar tan solo 7 elementos.
skw g
0
1
3
4
5
0
6
7
0
max-1
ini
fin
K
b
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
Figura No.10 Cola circular H
5.2 OPERACIONES EN UNA COLA CIRCULAR
 Adicionar un elemento, este proceso se ejecuta por el final haciendo avanzar el
puntero fin y luego agregando el dato especificado.
 Eliminar un elemento, consiste en extraer el primer elemento de la cola, esto se logra
haciendo que el puntero ini avance una posición más de su posición actual de modo
que se alcance al primer elemento de la cola
5.2.3 ESTADOS ADICIONALES DE UNA COLA CIRCULAR
 Estado inicial, lo definiremos haciendo que ini y fin apunten a 0 (ver Figura No.11)
Figura No. 11 Estado inicial de una cola circular
c
0
1
2
3
4
5
0
6
7
0
max-1
ini
fin
0
1
2
3
4
5
0
6
7
0
max-1
ini
fin
H
fin
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
 Cola llena una cola está llena cuando el número de elementos es igual a la
capacidad de la cola menos 1 (max-1) ver Figura No. 12.
Figura No. 12 Cola Circular llena H
 Cola vacía (ver Figura No. 13), se caracteriza porque la cantidad de elementos de la
cola es cero.
Figura No. 13 Cola vacía
Por tanto, se puede identificar la existencia de dos tipos de colas:
 aquellas que no hacen un uso adecuado de los espacios de memoria y a las que
denominaremos colas simples normales.
 y aquellas donde se hace una adecuada utilización del espacio de memoria y a las
que denominaremos colas simples circulares.
f
s
s
s
m
0
1
2
3
4
5
0
6
7
0
max-1
0
1
2
3
4
5
0
6
7
0
max-1
ini
fin
H
V
b
d
s
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
En tal sentido, se construye la jerarquía de clases (ver Figura No. 14), donde la clase
abstracta COLASIMPLE es la clase base a partir de la cual se generan las clases derivadas
CSNormal y CSCircular que permiten la creación de objetos de dichos tipos.
Figura No. 14 Jerarquía de clases para Objetos Cola.
6. IMPLEMENTACIÓN DEL TDA ColaSimple(abstract)
La implementación del TDA ColaSimple (abstract) se proporciona a continuación, donde
se puede apreciar que las operaciones son definidas como métodos abstractos que
posteriormente serán implementados en las clases derivadas.
package Cola;
public abstract class ColaSimple {
protected int ini,fin,max;
protected Object v[]=new Object[100];
ColaSimple(int ca)
{ini=0;fin=0;max=ca;}
abstract boolean esVacia();
abstract boolean esLlena();
abstract void adicionar(Object ele);
abstract Object eliminar();
abstract void mostrar();
abstract int nElem();
abstract boolean buscar(Object x);
}
6 IMPLEMENTACIÓN DEL TDA CSNORMAL
package Cola;
ColaSimple
(abstract)
int ini,fin,max
Object v[]
ColaSimple(cap)
abstract esVacia()
abstract esLlena()
abstract adicionar(x)
abstract Object eliminar()
abstract void mostrar()
abstract boolean buscar(Object x)
CSNormal
CSNormal(ca)
esVacia()
esLlena()
adicionar(x)
Object eliminar()
mostrar()
buscar(Object x)
CSCircular
CSCircular(ca)
esVacia()
esLlena()
adicionar(x)
Object eliminar()
mostrar()
boolean buscar(Object x)
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
public class CSNormal extends ColaSimple {
CSNormal(int ca)
{super(ca);}
boolean esVacia()
{
if((ini==0)&&(fin==0)) return true;
else return false;
}
boolean esLlena()
{
if(fin==max) return true;
else return false;
}
void adicionar(Object ele)
{
if(!esLlena()){
if(esVacia()) ini=1;
fin=fin+1;
v[fin]=ele;
}
else System.out.println("Cola llena");
}
Object eliminar()
{Object ele=null;
if(!esVacia()){
ele=v[ini];
ini=ini+1;
if(ini>fin) {ini=0;fin=0;}
}
else System.out.println("Cola vacia");
return ele;
}
void mostrar()
{Object ele;
CSNormal aux=new CSNormal(max);
if(!esVacia())
{while(!esVacia())
{ele=eliminar();
System.out.print(ele);
aux.adicionar(ele);
}
while(!aux.esVacia())
adicionar(aux.eliminar());
}
else System.out.println("Cola vacia");
}
int nElem()
{
if(!esVacia()) return (fin-ini+1);
return 0;
}
void vaciar(CSNormal b){
while(!b.esVacia())
adicionar(b.eliminar());
}
boolean buscar(Object x)
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
{
boolean ban=false;
Object ele;
CSNormal aux=new CSNormal(max);
while((!esVacia())&&(ban==false))
{
ele=eliminar();
if(x.equals(ele)) ban=true;
aux.adicionar(ele);
}
while(!esVacia())
aux.adicionar(eliminar());
vaciar(aux);
return ban;
}
}
7 IMPLEMENTACIÓN DEL TDA CSCircular
package Cola;
public class CSCircular extends ColaSimple {
CSCircular(int ca)
{ super(ca); }
boolean esVacia()
{
if (nElem()==0)return true;
else return false;
}
boolean esLlena()
{
if (nElem()==(max-1))return true;
else return false;
}
void adicionar(Object x)
{
if (!esLlena()){
fin=(fin+1)%max;
v[fin]=x;
}
else System.out.println("Cola llena...");
}
Object eliminar()
{ Object x=null;
if(!esVacia()){
ini=(ini+1)%max; x=v[ini];
}
else System.out.println("Cola vacia...");
return x;
}
void mostrar()
{Object x; int n=nElem();
if(!esVacia())
{
while (n>0)
{
x=eliminar();n--;System.out.print("t"+x);adicionar(x);
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
}
}
else System.out.println("Cola vacia...");
}
void vaciar(CSCircular B)
{
while (!B.esVacia())
adicionar(B.eliminar());
}
int nElem()
{
return ((fin-ini+max)%max);
}
boolean buscar(Object x)
{
boolean ban=false;
Object ele;
int n=nElem();
while((n>0)&&(ban==false))
{
ele=eliminar();n--;
if(x.equals(ele)) ban=true;
adicionar(ele);
}
while(n>0)
{adicionar(eliminar());n--;}
return ban;
}
int nveces(Object ele)
{int nv=0,ne,i;Object x;
ne=nElem();
for(i=1;i<=ne;i++)
{x=eliminar();
if(x.equals(ele)) nv++;
adicionar(x);
}
return nv;
}
}
8. COLAS EN JAVA
Java incorpora interfaces y clases para el manejo de colas. Se define a una cola como una
colección de objetos que espera se procese de modo que las inserciones se realizan por el
final en tanto que las eliminaciones se efectúan por el comienzo.
En sí, Java proporciona una lista de clases con la que se puede implementar una cola entre
las que se tienen: AbstractQueue, ArrayBlockingQueue, ArrayDeque,
ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque,
LinkedList, PriorityBlockingQueue, SynchronousQueue.Asimismo proporciona otras
subinterfaces: BlockingDeque<E>, BlockingQueue<E>, etc.
UNIVERSIDAD MAYOR “SAN ANDRÉS”
FACULTAD DE CIENCIAS PURAS Y NATURALES
CARRERA DE INFORMÁTICA
COLAS
Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022
Una de las implementaciones de colas en Java es a través de la clase LinkedList como
se observa en el siguiente ejemplo.
Ejemplo. Utilización de una cola utilizando la clase LinkedList
package cola;
import java.util.LinkedList;
import java.util.Scanner;
public class ColaJava {
public static void main(String[] args) {
LinkedList a=new LinkedList();
int i;
Scanner lee=new Scanner(System.in);
for(i=1;i<=5;i++)
{ System.out.println("Introduzca un nombre");
a.offer(lee.next());
}
while (a.peek()!=null)
System.out.println(a.poll());
}
}
Entre algunos métodos asociados a la clase LinkedList se tienen los descritos brevemente
en la Tabla No.1:
Tabla No. 1 Algunos métodos asociados a LinkedList
Método Descripción
offer(x) Permite insertar x en la cola si es posible, caso contrario devuelve false.
poll() Permite eliminar el primer elemento de la cola. En caso de que la cola este vacía devuelve null
peek() permite examinar el primer elemento de la cola sin eliminarlo
Por otro lado, Java también incorpora la interface Queue que es un subtipo de la interface
java.util.Collection que representa una lista ordenada de objetos similar a una lista pero
que se utiliza de diferente forma es decir las inserciones se efectúan por el final en tanto
que la eliminaciones se efectúan por el comienzo. Debido a que Queue es una interface
y no una clase se precisa utilizar alguna clase ya implementada en tal sentido utilizaremos
la clase LinkedList (ver Problema No. 5.7).
9. APLICACIONES
Entre las aplicaciones de colas se distinguen:
 Simulación de procesos. Ejemplo: simulación de una cola formada frente a un
Cajero automático, simulación de colas de atención y espera de clientes, etc. Otra
aplicación importante de las colas de prioridad es la simulación por eventos [7].
 Colas de impresión. Cuando existe una sola impresora para atender a varios
usuarios quienes al mismo tiempo pueden requerir la impresión de trabajos razón
por la que se forma una cola de requerimientos para ser impresas y los cuales se
atenderán en el orden que se solicitó el servicio.
 Sistemas de tiempo compartido. Donde varios usuarios comparten ciertos
recursos los cuales se asignan a los procesos que están en la cola de espera
suponiendo que todos tienen la misma prioridad.

Más contenido relacionado

Similar a colasDef_1_2022.pdf

9 Colas
9 Colas9 Colas
9 Colas
UVM
 
10 Pilas
10 Pilas10 Pilas
10 Pilas
UVM
 

Similar a colasDef_1_2022.pdf (20)

Colas
ColasColas
Colas
 
Listas pilas colas
Listas pilas colasListas pilas colas
Listas pilas colas
 
Curso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacionCurso-PROPE-PyED-5-Pilas-Colas-programacion
Curso-PROPE-PyED-5-Pilas-Colas-programacion
 
Datos
DatosDatos
Datos
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
Estructura de datos.vrb
Estructura de datos.vrbEstructura de datos.vrb
Estructura de datos.vrb
 
IN01203C.pdf
IN01203C.pdfIN01203C.pdf
IN01203C.pdf
 
9 Colas
9 Colas9 Colas
9 Colas
 
Informe estructuras lineales
Informe estructuras linealesInforme estructuras lineales
Informe estructuras lineales
 
ResultSet
ResultSetResultSet
ResultSet
 
Operaciones Morfologicas
Operaciones MorfologicasOperaciones Morfologicas
Operaciones Morfologicas
 
MODELO CUADRATICO DE LA TRAYECTORIA DE UN VOLEO.pdf
MODELO CUADRATICO DE LA TRAYECTORIA DE UN VOLEO.pdfMODELO CUADRATICO DE LA TRAYECTORIA DE UN VOLEO.pdf
MODELO CUADRATICO DE LA TRAYECTORIA DE UN VOLEO.pdf
 
Informe estructuras lineales
Informe estructuras linealesInforme estructuras lineales
Informe estructuras lineales
 
Manual de c
Manual de cManual de c
Manual de c
 
Tema6
Tema6Tema6
Tema6
 
10 Pilas
10 Pilas10 Pilas
10 Pilas
 
06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
EjeciciosColasINF131Jhessel_Merlo_Flores.pdf
EjeciciosColasINF131Jhessel_Merlo_Flores.pdfEjeciciosColasINF131Jhessel_Merlo_Flores.pdf
EjeciciosColasINF131Jhessel_Merlo_Flores.pdf
 

colasDef_1_2022.pdf

  • 1. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 1.DEFINICIÓN Una cola es una estructura de datos simple y se define como una colección de elementos en la que sus componentes se introducen por un extremo (fin) y se eliminan por otro (ini) [10]. Es decir, los elementos se eliminan en el mismo orden que se introdujeron. Debido a esta característica las colas también reciben el nombre de estructuras FIFO (FIRST INPUT FIRST OUTPUT. La Figura 1 muestra ejemplos prácticos de colas. Figura No.1. a) Cola de personas b) Cola de automóviles 2 REPRESENTACIÓN GRÁFICA DE UNA COLA 2.1 EN VECTORES Una cola puede representarse utilizando arreglos como muestra la Figura 2. Donde el primer elemento ocupa la posición 3, el segundo elemento ocupa la posición 4 y así sucesivamente. Figura.2 Cola M con 4 elementos 2.2 EN LISTAS ENLAZADAS Puede aplicarse el concepto de colas en listas enlazadas sin embargo debido a que existen varios tipos de listas a continuación se proporciona una posible forma de representación gráfica de colas en listas simplemente enlazadas (ver Figura No. 3). Donde el primer nodo esta apuntado por p y el último nodo esta apuntado por q. Figura No. 3 Representación de la cola G en lista enlazada simple p q 3. OPERACIONES EN UNA COLA Entre las operaciones básicas de una COLA se tienen: l u n a G e s t u v ini fin max
  • 2. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 a) Adicionar un elemento a la cola Figura No. 4 Adicionando el dato a en la cola normal Z b) Eliminar un dato Figura No. 5 Elimina el dato s de la cola normal 4. ESTADOS ADICIONALES DE UNA COLA Normal Además de las operaciones básicas de una cola, también se pueden diseñar métodos que permitan reflejar otros estados adicionales como son: estado inicial (ver Figura No.6), Estado de cola llena (ver Figura No. 7) y estado de cola vacía (ver Figura No. 8). a) Estado inicial cola normal Figura.6 Estado inicial b) Cola normal llena Figura No. 7 Cola llena c) Cola normal vacía Figura No. 8 Cola vacía Si se observa la cola de la Figura No. 9 refleja el estado de cola llena. Sin embargo, la cola tiene espacios disponibles lo que contradice el estado cola llena. A raíz de este tipo de problemas donde no se aprovecha adecuadamente los espacios de memoria se definen las estructuras de datos denominadas colas circulares que se describen a continuación. Figura No. 9 Cola llena 5. COLAS CIRCULARES Son estructuras que nos permiten utilizar los espacios de memoria de manera más eficiente que una cola simple normal. d i a v ini fin max t u s v ini fin max v ini=0, fin =0 max e s e s t u d i e n v ini fin max v ini=0, fin =0 max i e n v ini fin max
  • 3. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 5.1 REPRESENTACIÓN GRÁFICA DE UNA COLA CIRCULAR Representaremos las colas circulares en vectores como muestra la Figura No. 9 utilizando las posiciones de memoria desde 0. En tal sentido, el primer elemento de la cola está ubicado después del valor que indica el puntero ini. Por ejemplo, en la cola circular de la Figura No. 9 el primer elemento de la cola está ubicado en la posición 3 es decir ocupa una posición después del puntero ini. Figura No.9 Cola Circular K con un elemento Donde:  La cola circular de capacidad max sólo podrá contenermax-1 elementos. Ello, debido a que debe existir un espacio de memoria libre que va permitir distinguir el inicio y el final de dicha cola.  Por otro lado, el primer elemento de la cola circular está ubicado una posición después de su posición real.  En tanto que los punteros ini, fin se moverán en el sentido de las agujas del reloj, lo que significa que tomarán valores como: 0,1,2,3,4,…,max-1,0,1,2,3,4,…, max- 1,0,1,2.3.4.5,… y así sucesivamente según la capacidad del vector. Dichos valores en sí, se pueden generar aplicando la teoría de la aritmética modular que básicamente está representada por la función mod que representa el módulo o residuo de una división entera manifiesta por la siguiente expresión aritmética: x mod y = x-y*(x div y). Finalmente, considerando el patrón de generación de los valores de los punteros ini y fin se puede afirmar que es equivalente a representar los símbolos básicos de un sistema de numeración de base max[12]. En tal sentido, si observamos la cola circular de la Figura No.10 esta cola tiene capacidad para 8 elementos (max=8) sin embargo considerando que debe existir un espacio libre (que va a distinguir el inicio y el final de la cola circular) se tiene la posibilidad de almacenar tan solo 7 elementos. skw g 0 1 3 4 5 0 6 7 0 max-1 ini fin K b
  • 4. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 Figura No.10 Cola circular H 5.2 OPERACIONES EN UNA COLA CIRCULAR  Adicionar un elemento, este proceso se ejecuta por el final haciendo avanzar el puntero fin y luego agregando el dato especificado.  Eliminar un elemento, consiste en extraer el primer elemento de la cola, esto se logra haciendo que el puntero ini avance una posición más de su posición actual de modo que se alcance al primer elemento de la cola 5.2.3 ESTADOS ADICIONALES DE UNA COLA CIRCULAR  Estado inicial, lo definiremos haciendo que ini y fin apunten a 0 (ver Figura No.11) Figura No. 11 Estado inicial de una cola circular c 0 1 2 3 4 5 0 6 7 0 max-1 ini fin 0 1 2 3 4 5 0 6 7 0 max-1 ini fin H fin
  • 5. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022  Cola llena una cola está llena cuando el número de elementos es igual a la capacidad de la cola menos 1 (max-1) ver Figura No. 12. Figura No. 12 Cola Circular llena H  Cola vacía (ver Figura No. 13), se caracteriza porque la cantidad de elementos de la cola es cero. Figura No. 13 Cola vacía Por tanto, se puede identificar la existencia de dos tipos de colas:  aquellas que no hacen un uso adecuado de los espacios de memoria y a las que denominaremos colas simples normales.  y aquellas donde se hace una adecuada utilización del espacio de memoria y a las que denominaremos colas simples circulares. f s s s m 0 1 2 3 4 5 0 6 7 0 max-1 0 1 2 3 4 5 0 6 7 0 max-1 ini fin H V b d s
  • 6. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 En tal sentido, se construye la jerarquía de clases (ver Figura No. 14), donde la clase abstracta COLASIMPLE es la clase base a partir de la cual se generan las clases derivadas CSNormal y CSCircular que permiten la creación de objetos de dichos tipos. Figura No. 14 Jerarquía de clases para Objetos Cola. 6. IMPLEMENTACIÓN DEL TDA ColaSimple(abstract) La implementación del TDA ColaSimple (abstract) se proporciona a continuación, donde se puede apreciar que las operaciones son definidas como métodos abstractos que posteriormente serán implementados en las clases derivadas. package Cola; public abstract class ColaSimple { protected int ini,fin,max; protected Object v[]=new Object[100]; ColaSimple(int ca) {ini=0;fin=0;max=ca;} abstract boolean esVacia(); abstract boolean esLlena(); abstract void adicionar(Object ele); abstract Object eliminar(); abstract void mostrar(); abstract int nElem(); abstract boolean buscar(Object x); } 6 IMPLEMENTACIÓN DEL TDA CSNORMAL package Cola; ColaSimple (abstract) int ini,fin,max Object v[] ColaSimple(cap) abstract esVacia() abstract esLlena() abstract adicionar(x) abstract Object eliminar() abstract void mostrar() abstract boolean buscar(Object x) CSNormal CSNormal(ca) esVacia() esLlena() adicionar(x) Object eliminar() mostrar() buscar(Object x) CSCircular CSCircular(ca) esVacia() esLlena() adicionar(x) Object eliminar() mostrar() boolean buscar(Object x)
  • 7. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 public class CSNormal extends ColaSimple { CSNormal(int ca) {super(ca);} boolean esVacia() { if((ini==0)&&(fin==0)) return true; else return false; } boolean esLlena() { if(fin==max) return true; else return false; } void adicionar(Object ele) { if(!esLlena()){ if(esVacia()) ini=1; fin=fin+1; v[fin]=ele; } else System.out.println("Cola llena"); } Object eliminar() {Object ele=null; if(!esVacia()){ ele=v[ini]; ini=ini+1; if(ini>fin) {ini=0;fin=0;} } else System.out.println("Cola vacia"); return ele; } void mostrar() {Object ele; CSNormal aux=new CSNormal(max); if(!esVacia()) {while(!esVacia()) {ele=eliminar(); System.out.print(ele); aux.adicionar(ele); } while(!aux.esVacia()) adicionar(aux.eliminar()); } else System.out.println("Cola vacia"); } int nElem() { if(!esVacia()) return (fin-ini+1); return 0; } void vaciar(CSNormal b){ while(!b.esVacia()) adicionar(b.eliminar()); } boolean buscar(Object x)
  • 8. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 { boolean ban=false; Object ele; CSNormal aux=new CSNormal(max); while((!esVacia())&&(ban==false)) { ele=eliminar(); if(x.equals(ele)) ban=true; aux.adicionar(ele); } while(!esVacia()) aux.adicionar(eliminar()); vaciar(aux); return ban; } } 7 IMPLEMENTACIÓN DEL TDA CSCircular package Cola; public class CSCircular extends ColaSimple { CSCircular(int ca) { super(ca); } boolean esVacia() { if (nElem()==0)return true; else return false; } boolean esLlena() { if (nElem()==(max-1))return true; else return false; } void adicionar(Object x) { if (!esLlena()){ fin=(fin+1)%max; v[fin]=x; } else System.out.println("Cola llena..."); } Object eliminar() { Object x=null; if(!esVacia()){ ini=(ini+1)%max; x=v[ini]; } else System.out.println("Cola vacia..."); return x; } void mostrar() {Object x; int n=nElem(); if(!esVacia()) { while (n>0) { x=eliminar();n--;System.out.print("t"+x);adicionar(x);
  • 9. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 } } else System.out.println("Cola vacia..."); } void vaciar(CSCircular B) { while (!B.esVacia()) adicionar(B.eliminar()); } int nElem() { return ((fin-ini+max)%max); } boolean buscar(Object x) { boolean ban=false; Object ele; int n=nElem(); while((n>0)&&(ban==false)) { ele=eliminar();n--; if(x.equals(ele)) ban=true; adicionar(ele); } while(n>0) {adicionar(eliminar());n--;} return ban; } int nveces(Object ele) {int nv=0,ne,i;Object x; ne=nElem(); for(i=1;i<=ne;i++) {x=eliminar(); if(x.equals(ele)) nv++; adicionar(x); } return nv; } } 8. COLAS EN JAVA Java incorpora interfaces y clases para el manejo de colas. Se define a una cola como una colección de objetos que espera se procese de modo que las inserciones se realizan por el final en tanto que las eliminaciones se efectúan por el comienzo. En sí, Java proporciona una lista de clases con la que se puede implementar una cola entre las que se tienen: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque, LinkedList, PriorityBlockingQueue, SynchronousQueue.Asimismo proporciona otras subinterfaces: BlockingDeque<E>, BlockingQueue<E>, etc.
  • 10. UNIVERSIDAD MAYOR “SAN ANDRÉS” FACULTAD DE CIENCIAS PURAS Y NATURALES CARRERA DE INFORMÁTICA COLAS Responsable: Lic. Victoria Hurtado Cerruto Gestión:1/2022 Una de las implementaciones de colas en Java es a través de la clase LinkedList como se observa en el siguiente ejemplo. Ejemplo. Utilización de una cola utilizando la clase LinkedList package cola; import java.util.LinkedList; import java.util.Scanner; public class ColaJava { public static void main(String[] args) { LinkedList a=new LinkedList(); int i; Scanner lee=new Scanner(System.in); for(i=1;i<=5;i++) { System.out.println("Introduzca un nombre"); a.offer(lee.next()); } while (a.peek()!=null) System.out.println(a.poll()); } } Entre algunos métodos asociados a la clase LinkedList se tienen los descritos brevemente en la Tabla No.1: Tabla No. 1 Algunos métodos asociados a LinkedList Método Descripción offer(x) Permite insertar x en la cola si es posible, caso contrario devuelve false. poll() Permite eliminar el primer elemento de la cola. En caso de que la cola este vacía devuelve null peek() permite examinar el primer elemento de la cola sin eliminarlo Por otro lado, Java también incorpora la interface Queue que es un subtipo de la interface java.util.Collection que representa una lista ordenada de objetos similar a una lista pero que se utiliza de diferente forma es decir las inserciones se efectúan por el final en tanto que la eliminaciones se efectúan por el comienzo. Debido a que Queue es una interface y no una clase se precisa utilizar alguna clase ya implementada en tal sentido utilizaremos la clase LinkedList (ver Problema No. 5.7). 9. APLICACIONES Entre las aplicaciones de colas se distinguen:  Simulación de procesos. Ejemplo: simulación de una cola formada frente a un Cajero automático, simulación de colas de atención y espera de clientes, etc. Otra aplicación importante de las colas de prioridad es la simulación por eventos [7].  Colas de impresión. Cuando existe una sola impresora para atender a varios usuarios quienes al mismo tiempo pueden requerir la impresión de trabajos razón por la que se forma una cola de requerimientos para ser impresas y los cuales se atenderán en el orden que se solicitó el servicio.  Sistemas de tiempo compartido. Donde varios usuarios comparten ciertos recursos los cuales se asignan a los procesos que están en la cola de espera suponiendo que todos tienen la misma prioridad.