CAPITULO 3 DOCUMENTO - COLAS Actualizado
CAPITULO 3 DOCUMENTO - COLAS Actualizado
CAPITULO 3 DOCUMENTO - COLAS Actualizado
CAPÍTULO III
COLAS
1. INTRODUCCIÓN
La estructura de datos "cola" también llamada "Queue", es un tipo de datos abstracto
"TDA". Una cola TDA permite a una lista de cosas ser removidos en el orden en que
fueron almacenados.
Una cola es una lista de elementos en la que éstos se introducen por un extremo y se
eliminan por otro. Los elementos se eliminan en el mismo orden en el que se insertaron.
Por lo tanto, el primer elemento que entra a la cola será el primero en salir. Debido a esta
característica, las colas también reciben el nombre de estructuras FIFO (First In, First
Out: Primero en entrar, primero en salir).
Las colas en computación son muy similares a las colas de la vida real.
Ejemplos.-
a) Cola de clientes esperando pagar en una caja de supermercado
b) Cola de clientes esperando ser atendidos por algún cajero en un banco
c) Cola de procesos esperando ser ejecutados por una CPU
Al igual que la pila, la cola es una estructura de datos dinámica, pero puede ser
representado en forma estática (arreglos).
CARACTERÍSTICAS
Todos los elementos de la cola son del mismo tipo.
- Existe un orden de elementos ya que es una estructura lineal, pero los elementos no
están ordenados por su valor sino por orden de introducción en la cola.
- Existen dos extremos en la estructura lineal cola, el frente y el final de la cola.
- Sólo se puede acceder y eliminar al dato que está en el frente de la cola.
1
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
2
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
Frente: Es la variable que indica la posición del elemento del frente de la cola.
Fin: Es la variable que indica la posición del último elemento de la cola.
Y las operaciones, como se describen a continuación.
OPERACIONES CON COLAS
Análogamente a las pilas, es necesario definir el conjunto de operaciones básicas para
especificar adecuadamente una estructura cola. Estas operaciones serían:
- Insertar(e): Inserta un elemento al final de la cola.
- Eliminar(): Elimina un elemento del frente de la cola.
- Imprimir(): Imprime los elementos desde el frente hasta el final de la cola.
- Vacia(): Verifica si la cola esta vacía, retorna un valor booleano.
- Llena(): Verifica si la cola está llena, retorna un valor booleano.
- FRENTE(): Retorna el valor del frente.
- FINAL(): Retorna el valor del fin.
2. COLAS LINEALES
A continuación, implementamos el código correspondiente al programa de manejo de
colas lineales en java:
3
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
Programa 15 en Java
//Cola lineal de números enteros y sus operaciones
package estructurasEstaticas;
import java.util.Scanner;
public class Cola
{
final int MAX = 20;
private int v[] = new int [MAX];
private int fin;
private int frente;
Scanner sc=new Scanner(System.in);
public Cola ()
{
frente = 0;
fin = 0;
System.out.println ("COLA CREADA....");
}
boolean vacia ()
{
if (frente == 0)
return (true);
else
return (false);
}
boolean llena ()
{
if (fin == MAX)
return (true);
else
return (false);
}
void insertar (int elem)
{
if (!llena ())
{
fin++;
v [fin] = elem;
if (frente == 0)
frente = 1;
}
else
{
System.out.println ("COLA LINEAL LLENA....");
System.exit (0);
}
}
4
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
int eliminar ()
{
int e = 0;
if (!vacia ())
{
e = v [frente];
if (frente == fin)
{
frente = 0;
fin = 0;
}
else
frente = frente + 1;
}
else
{
System.out.println ("LA COLA ESTA VACIA...");
System.exit (0);
}
return (e);
}
void imprimir ()
{
System.out.println ("IMPRIMIENDO LA COLA......");
for (int i = frente ; i <= fin ; i++)
System.out.println (v [i]);
}
int FINAL ()
{
return (fin);
}
int FRENTE ()
{
return (frente);
}
void llenarCola ()
{
int N;
int e;
System.out.println ("Cuantos elementos desea insertar a la cola ??");
N=sc.nextInt();
for (int i = 1 ; i <= N ; i++)
{
System.out.print ("Introduzca un elemento....");
e = sc.nextInt();
insertar (e);
}
}
} //Fin del programa
5
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
6
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
3. COLAS CIRCULARES
Para hacer un uso más eficiente de la memoria disponible se trata a la cola como una
estructura circular. Es decir, el elemento anterior al primero es el último. En la siguiente
figura se muestra la representación de una cola circular.
Ejemplo.-
(a)
(b)
El diseño de la estructura de datos de una cola circular no varia en relación a una
estructura de datos lineal, por tanto a continuación mostramos las operaciones que
sufren cambios en este tipo de colas.
7
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
boolean vacia ()
{
if (frente == 0)
return (true);
else
return (false);
}
boolean llena ()
{
if ((fin == MAX && frente == 1) || (fin + 1 == frente))
return (true);
else
return (false);
}
8
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
}
else
fin++;
v [fin] = elem;
}
else
{
System.out.println ("COLA CIRCULAR LLENA....");
System.exit (1);
}
}
int eliminar ()
{
int e = 0;
if (!vacia ())
{
e = v [frente];
if (frente == fin)
{
frente = 0;
fin = 0;
}
else
if (frente == MAX)
frente = 1;
else
frente = frente + 1;
}
else
{
System.out.println ("LA COLA ESTA VACIA...");
System.exit (0);
}
return (e);
}
void imprimir ()
{
System.out.println ("IMPRIMIENDO LA COLA......");
for (int i = frente ; i <= fin ; i++)
System.out.println (v [i]);
}
int FINAL ()
{
return (fin);
}
int FRENTE ()
{
9
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
return (frente);
}
void llenarCola ()
{
int N;
int e;
System.out.println ("Cuantos elementos desea insertar a la cola ??");
N=sc.nextInt();
for (int i = 1 ; i <= N ; i++)
{
System.out.print ("Introduzca un elemento....");
e = sc.nextInt();
insertar (e);
}
}
}
10
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
4. COLAS DE PRIORIDADES
Una cola de prioridad es una estructura característica, donde se pude retirar e insertar un ítem
teniendo en cuenta la clave más grande o más chica (según la implementación) definida por el
programador. Si los ítems tienen claves iguales, entonces la regla usual utilizada es que el primer
ítem insertado es el que se retirará primero.
Algunas aplicaciones de éste tipo de estructura son: la representación simulada de eventos
dependientes del tiempo, como por ejemplo el funcionamiento de un aeropuerto, controlando
partidas y aterrizajes de aviones. Otro ejemplo puede verse en los sistemas informáticos, el CPU
asigna prioridades a las distintas tareas que debe ejecutar y las inserta en su cola, para de esta
manera realizarlas en el orden correcto (multitareas).
Podemos representar una cola de prioridad como una lista contigua ordenada, en la cual retirar
un ítem es una operación inmediata, pero la inserción tomaría un tiempo proporcional al número
de elementos que se encuentren en la cola, hay que tener en cuenta que dicha operación se
debe realizar en forma tal que la cola quede ordenada. Otra forma de representación es a través
11
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
12
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
Cola()
{
Frente=null;
Fin=null;
}
13
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
14
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
Programa 17 en Java
estructurasDinamicas;
// COLAS LINEALES DINAMICAS
public class EjerColasDinamicas
{
static void IntercambiarFrenteFin(Cola A)
{
int x,y,m,i;
System.out.println("Intercambiando el frente con el final");
x=A.Eliminar();
m=A.Contar();
i=1;
while(i<m)
{
y=A.Eliminar();
A.Insertar(y);
i++;
}
A.Insertar(x);
}
static void EliminarPrimerNeg(Cola Q)
{
int x,m,i;
boolean sw=true;
m=Q.Contar();
i=1;
System.out.println("ELIMINANDO EL PRIMER NEGATIVO");
15
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
16
UNIVERSIDAD MAYOR DE SAN ANDRÉS ESTRUCTURA DE DATOS (INF-131)
CARRERA INFORMATICA – CURSO DE TEMPORADA M. Sc. ZARA YUJRA CAMA
3) Hallar el elemento mínimo y máximo de una cola lineal, luego intercambiar los mismos.
6) Intercambiar el elemento del frente de la cola por el elemento del final de la cola.
17