Anda di halaman 1dari 8

ECCI: ESCUELA COLOMBIANA DE CARRERAS INDUSTRIALES

Ing. Gustavo Beltrn Macas gubelma@gmail.com


Asignatura: Estructura de datos

Semestre: III

Gua No. 5. Colas

Fecha: Abril 2011

Justificacin:
La estructuracin de datos permite hacer ms prctico el entendimiento del programa, ya que
se disea por partes o mdulos, conocidos como una funcin o procedimientos y que se utiliza
en cada tarea a desarrollar.
Una estructura de datos lineal con un funcionamiento determinado se conoce como una cola.
Una cola es una coleccin ordenada de elementos a partir de la cual se pueden eliminar
elementos de un extremo (entendido como la cabeza de la cola) y en el cual tambin se
pueden agregar elementos en el otro extremo (llamado parte posterior de la cola), su filosofa
es que el primer elemento que entra es el primero que sale.
Objetivo general:
Desarrollar en el alumno la creatividad para realizar operaciones de aplicaciones de estructura
de datos en colas.
Objetivos especficos:

Construir e inicializar la estructura de una cola.


Realizar operaciones de atencin de objetos en el orden FIFO
Determinar el nmero de objetos atendidos
Determinar el objeto que se encuentra en la ltima posicin en la cola

Marco Terico:
En varias ocasiones de nuestras vidas, hemos tenido que hacer colas para realizar alguna
transaccin comercial, pagar un servicio pblico, etc y debemos esperar que se atiendan uno a
uno en el orden de llegada; es decir, una cola cumple con la ley primero en entrar, primero en
salir. En el idioma ingles, se puede leer first in,first out de donde se genera el famoso FIFO.
En computacin, una cola se puede definir como una estructura que opera de acuerdo a FIFO.
El proceso anterior determina las operaciones que se deben llevar a cabo en cada funcin.
Para el desarrollo de las funciones que manejan la estructura FIFO, vamos a utilizar las
siguientes definiciones globales:
Utilicemos el siguiente codigo para verificar el funcionamiento de una cola:
public class Cola {
private Nodo cabeza;
public void agregar(Informacion info) {
if (cabeza == null) {
cabeza = new Nodo();
cabeza.info = info;
} else {
Nodo rec = cabeza;

while (rec.siguiente != null) {


rec = rec.siguiente;
}
rec.siguiente = new Nodo();
rec.siguiente.info = info;
}
}
public Informacion atender() {
if (cabeza != null) {
Nodo temp = cabeza;
cabeza = cabeza.siguiente;
temp.siguiente = null;
return temp.info;
}
return new Informacion();
}
public void listar(){
Nodo rec=cabeza;
System.out.println("La cola esta conformada por ");
while(rec!=null){
System.out.print(rec.info.dato+ " ");
rec=rec.siguiente;
}
}
}
public class Informacion {
public String dato;
}
public class Nodo {
public Nodo siguiente;
public Informacion info;
}
public class Principal {
public static void main(String[] args) {
Cola cola = new Cola();
int opcion = -1;
while (opcion != 4) {
System.out.println("MENU:");
System.out.println("1. agregar");
System.out.println("2. atender");
System.out.println("3. listar");
System.out.println("4. salir");
opcion = Leer.datoInt();
if (opcion == 1) {
Informacion info = new Informacion();
System.out.println("digite el dato:");
info.dato = Leer.dato();
cola.agregar(info);
} else if (opcion == 2) {
Informacion info = cola.atender();
System.out.println("dato atendido : "+info.dato);
}else if (opcion == 3) {
cola.listar();
}
}
System.out.println("terminado");
}
}
Realice la actividad 1 y 2 (Al Final de la gua)

Igualmente se pueden crear colas donde manejan nodos con diferente informacion, verifiquen
este codigo:
public class Cola {
private Nodo cabeza;
public void agregar(Informacion info) {
if (cabeza == null) {
cabeza = new Nodo();
cabeza.info = info;
} else {
Nodo rec = cabeza;
while (rec.siguiente != null) {
rec = rec.siguiente;
}
rec.siguiente = new Nodo();
rec.siguiente.info = info;
}
}
public Informacion atender() {
if (cabeza != null) {
Nodo temp = cabeza;
cabeza = cabeza.siguiente;
temp.siguiente = null;
return temp.info;
}
return new Informacion();
}
public void listar(){
Nodo rec=cabeza;
while(rec!=null){
System.out.println("dato 1: "+rec.info.dato1);
System.out.println("dato 2: "+rec.info.dato2);
System.out.println("dato 3: "+rec.info.dato3);
System.out.println("________________________");
rec=rec.siguiente;
}
}
}
public class Informacion {
public String dato1;
public String dato2;
public String dato3;
}
public class Nodo {
public Nodo siguiente;
public Informacion info;
}
public class Principal {
public static void main(String[] args) {
Cola cola = new Cola();
int opcion = -1;
while (opcion != 4) {
System.out.println("MENU:");
System.out.println("1. agregar");
System.out.println("2. atender");
System.out.println("3. listar");
System.out.println("4. salir");
opcion = Leer.datoInt();
if (opcion == 1) {

Informacion info = new Informacion();


System.out.println("digite el primer dato:");
info.dato1 = Leer.dato();
System.out.println("digite el segundo dato:");
info.dato2 = Leer.dato();
System.out.println("digite el tercer dato:");
info.dato3 = Leer.dato();
cola.agregar(info);
} else if (opcion == 2) {
Informacion info = cola.atender();
System.out.println("primer dato: "+info.dato1);
System.out.println("segundo dato: "+info.dato2);
System.out.println("tercer dato: "+info.dato3);
}else if (opcion == 3) {
cola.listar();
}
}
System.out.println("terminado");
}
}
Igualmente se puede implementar colas con informacion de objetos en los respectivos nodos.
public class Cola {
private Nodo cabeza;
public void agregar(Informacion info) {
if (cabeza == null) {
cabeza = new Nodo();
cabeza.info = info;
} else {
Nodo rec = cabeza;
while (rec.siguiente != null) {
rec = rec.siguiente;
}
rec.siguiente = new Nodo();
rec.siguiente.info = info;
}
}
public Informacion atender() {
if (cabeza != null) {
Nodo temp = cabeza;
cabeza = cabeza.siguiente;
temp.siguiente = null;
return temp.info;
}
return new Informacion();
}
public void listar(){
Nodo rec=cabeza;
while(rec!=null){
System.out.println("Nombre "+rec.info.Nombre);

System.out.println("Direccion : "+rec.info.Direccion);
System.out.println("Empresa: "+rec.info.Empresa);
rec=rec.siguiente;
}
}
}
public class Informacion {
public String Nombre;
public String Direccion;
public String Empresa;
}
public class Nodo {
public Nodo siguiente;
public Informacion info;
}
public class Principal {
public static void main(String[] args) {
Cola cola = new Cola();
int opcion = -1;
while (opcion != 4) {
System.out.println("MENU:");
System.out.println("1. agregar");
System.out.println("2. atender");
System.out.println("3. listar");
System.out.println("4. salir");
opcion = Leer.datoInt();
if (opcion == 1) {
Informacion info = new Informacion();
System.out.println("digite el Nombre:");
info.Nombre = Leer.dato();
System.out.println("digite la direccion:");
info.Direccion = Leer.dato();
System.out.println("digite la empresa:");
info.Empresa = Leer.dato();
cola.agregar(info);
} else if (opcion == 2) {
Informacion info = cola.atender();
System.out.println("Nombre: "+info.Nombre);
System.out.println("Direccion: "+info.Empresa);
System.out.println("Empresa: "+info.Empresa);
}else if (opcion == 3) {
cola.listar();
}
}
System.out.println("terminado");
}
}
Realice la actividad 3 (Al Final de la gua)

En le siguiente codigo se observara como manejar la escritura en archivos de textos, para


luego utilizarlo en reportes de colas
Los siguientes pasos nos permitir escribir en un archivo plano
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Cree una carpeta en el disco D llamada PruebaArchivo
Realice el siguiente cdigo:
public class PruebaEscrita {
public static void main(String[] args) {
int a;
int c;
int b;
PrintStream salida = new PrintStream("d:/PruebaArchivo/gustavo.txt");//error
a = 5;
for (b = 1; b <= 10; b++) {
c = a * b;
salida.println(a + "X" + b + "=" + c);
}
salida.close();
}
}
En la lnea donde se muestra error, saldr una ayuda que le permitir:
Importar java.io.PrintStream;
Utilizar Surround Block witch try-catch
El cdigo quedara:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class PruebaEscrita1 {
public static void main(String[] args) {
PrintStream salida = null;
try {
int a;
int c;
int b;
salida = new PrintStream("d:/PruebaArchivo/gustavo.txt");
a = 5;
for (b = 1; b <= 10; b++) {
c = a * b;
salida.println(a + "X" + b + "=" + c);
}
salida.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(PruebaEscrita1.class.getName()).log(Level.SEVERE, null, ex);
} finally {
salida.close();
}
}
}
Verifique que en archivo gustavo.txt se encuentre la informacin

Ahora, la informacion que maneja la cola puede ser bajada a un archivo plano en el metodo
BajarArchivo, revise le siguiente codigo:

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Cola {
private Nodo cabeza;
public void agregar(Informacion info) {
if (cabeza == null) {
cabeza = new Nodo();
cabeza.info = info;
} else {
Nodo rec = cabeza;
while (rec.siguiente != null) {
rec = rec.siguiente;
}
rec.siguiente = new Nodo();
rec.siguiente.info = info;
}
}
public Informacion atender() {
if (cabeza != null) {
Nodo temp = cabeza;
cabeza = cabeza.siguiente;
temp.siguiente = null;
return temp.info;
}
return new Informacion();
}
public void BajarArchivo() {
PrintStream salida = null;
try {
salida = new PrintStream("d:/PruebaArchivo/gustavo.txt");
Nodo rec = cabeza;
while (rec != null) {
salida.println("Nombre " + rec.info.Nombre);
salida.println("Direccion : " + rec.info.Direccion);
salida.println("Empresa: " + rec.info.Empresa);
rec = rec.siguiente;
}
salida.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Cola.class.getName()).log(Level.SEVERE, null, ex);
} finally {
salida.close();
}
}
}
public class Informacion {
public String Nombre;
public String Direccion;
public String Empresa;
}
public class Nodo {
public Nodo siguiente;
public Informacion info;
}
public class Principal {
public static void main(String[] args) {

Cola cola = new Cola();


int opcion = -1;
while (opcion != 4) {
System.out.println("MENU:");
System.out.println("1. agregar");
System.out.println("2. atender");
System.out.println("3. guardar ");
System.out.println("4. salir");
opcion = Leer.datoInt();
if (opcion == 1) {
Informacion info = new Informacion();
System.out.println("digite el Nombre:");
info.Nombre = Leer.dato();
System.out.println("digite la direccion:");
info.Direccion = Leer.dato();
System.out.println("digite la empresa:");
info.Empresa = Leer.dato();
cola.agregar(info);
} else if (opcion == 2) {
Informacion info = cola.atender();
System.out.println("Nombre: "+info.Nombre);
System.out.println("Direccion: "+info.Empresa);
System.out.println("Empresa: "+info.Empresa);
}else if (opcion == 3) {
cola.BajarArchivo();
System.out.println("La informacion fue guardada en el archivo");
}
}
System.out.println("terminado");
}
}
Realice la actividad 4 (Al Final de la gua)

ACTIVIDADES
1. Realice un programa de colas, donde vayan ingresando automticamente los clientes
numerados del 50 al 60, en el cual ingresan 2 clientes y se atiende 1. Verificar
quienes quedaron en la cola.
2. Implemente un mtodo que devuelva el nmero de clientes de una estructura FIFO.
3. Realice un programa utilizando colas, donde permita ingresar los datos de los alumnos:
nombre y tres notas y muestre todos los datos con el promedio de las notas de cada
alumno y los vaya atendiendo en el orden de llegada.
4. Realice un programa con colas que permita capturar la informacin de 5 clientes
(nombre y documento), se muestre el reporte de los que estn en la fila inicial.
Posteriormente se atienda tres personas y se muestre el reporte de quienes fueron los
que se atendieron y quienes quedaron en la cola.
BIBLIOGRAFIA

YOURDON, E. Object-Oriented Systems Design an integrated approach. Prentice-Hall,


New Jersey, 1994
COAD, Peter. Object-oriented analysis / Peter Coad and Edward Yourdon. 2nd ed
MARTIN, James Thomas. Anlisis y diseo orientado a objetos
PALMAS Velasco , Alfredo.Mxico; Prentice-Hall Hispanoamericana 1994
DEITEL, Harvey M. Cmo programar en Java -- 5 ed. Mxico. Pearson Educacin,
2004
WU, C. Thomas. Introduccin a la programacin orientada a objetos con Java. Madrid.
McGraw Hill, 2001

Anda mungkin juga menyukai