Sistema de Colas o Pilas

   Hoy voy a explicarles como hacer una cola en Java, o un sistema de pilas. Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción se realiza por un extremo y la operación de extracción por el otro.

   Muchos en la universidad me han dicho para hacerles un programa que trabaje por colas, y yo les pregunto ¿Qué es una cola?.... Bueno, algunos me responden y otros no, lo importante es saber de que estamos hablando y porque lo estamos hablando, no debería pedir cosas de las que no se ni que son....

   A todo esto no entrare en detalles, existen dos tipos de sistemas, el FIFO y el LIFO (para ver que significan esta google), y como me lo han pedido ya varias veces pues, aquí les dejo el código, que no es difícil de aprender y mucho menos de interpretar....

Para Java
import java.util.*;
public class Cola {
public static void main( String args[] ){
Scanner leer = new Scanner(System.in);
colagenerica obj = new colagenerica();

int opcion;
int numero;

do{
menu();
opcion = leer.nextInt();

switch(opcion){
case 1:
System.out.println( "Numero a insertar" );
numero = leer.nextInt();
if(obj.inscola(numero)){
System.out.println( "nEl numero "+numero+" se inserto en la cola" );
System.out.println();
}
else{
System.out.println( "nCola llena" );
}
break;
case 2:
if(obj.retcola()){
System.out.println( "nEl dato retirado fue: "+obj.dret );
}
else{
System.out.println( "nCola vacia" );
}
break;
case 3:
if(obj.fre==-1 && obj.fin==-1){
System.out.println( "nCola vacia" );
}
else{
for(int i=obj.fre; i<=obj.fin; i++){
System.out.print(obj.c[i]+" ");
}
break;
}
}
}
while(opcion != 4);
}

public static void menu(){
System.out.println( "n");
System.out.println( "t Menu para colas n" );
System.out.println( "1.- Insertar" );
System.out.println( "2.- Retirar" );
System.out.println( "3.- Estado" );
System.out.println( "4.- Fin" );
System.out.println( "n Selecciona" );
}
}
   Y aquí esta lo importante, la clase "colagenerica" que almacena los datos que manejamos y hace las operaciones sobre los mismos
class colagenerica
{
public int max;
protected Object dret;
public Object c[];
public int fre = -1;
public int fin = -1;

public colagenerica()
{
max=20;
c=new Object [max];
}

public colagenerica(int n)
{ max=n;
c=new Object [max];
} 

public boolean colallena(int fin,int max)
{
boolean llena;
if (fin==max-1)
llena=true;
else
llena=false;
return llena;
}

public boolean colavacia(int fre)
{
boolean vacia;
if (fre==-1)
vacia=true;
else
vacia=false;
return vacia;
}   

public boolean inscola(Object dato)
{
if (fin==max-1)
return false;
fin++;
c[fin] = dato;
if (fin==0)
fre=0;
return true;
}

public boolean retcola()
{
if (fre ==-1)
return false;
dret=c[fre];
if (fre==fin)
{
fre=-1;
fin=-1;
}
else
fre++;
return true;
}
}

   Para C++
template <class T>
class Cola{
private:
struct Nodo{
T elemento;
struct Nodo* siguiente;
}* primero;
struct Nodo* ultimo;
unsigned int elementos;
public:
Cola(){
elementos = 0;
}
~Cola(){
while (elementos != 0) pop();
}
void push(const T& elem){
Nodo* aux = new Nodo;
aux->elemento = elem;
if (elementos == 0) primero = aux;
else ultimo->siguiente = aux;
ultimo = aux;
++elementos;
}
void pop(){
Nodo* aux = primero;
primero = primero->siguiente;
delete aux;
--elementos;
}
T consultar() const{
return primero->elemento;
}
bool vacia() const{
return elementos == 0;
}
unsigned int size() const{
return elementos;
}
};
   NOTA: todo esta hecho para que se vea desde la consola y se aprecie mejor la forma en que trabajan las colas, el código de C++ solo lo utilice una vez y nunca me dijeron si funciono o no, suerte...

8 Comentarios

Escribir Comentario
Anónimo
AUTOR
24 de enero de 2011, 1:10 delete

digamos si necesito un programa que utilice pilas, colas y filas cmo se haria?

Responder
avatar
24 de enero de 2011, 7:42 delete

pilas, colas, filas o como quieras llamarle es lo mismo, si necesitas un programa que requiera de esto aquí esta el código, ahora, si quieres un menú de opciones para elegir entre una u otra opción puedes usar un "switch" puedes probar esto: "enlace"...

Saludos!

Responder
avatar
Anónimo
AUTOR
12 de marzo de 2011, 21:52 delete

esta muy bien el programa oyes necesito un programa de pilas para leer archivos txt y que ay se inserte el pop,push para que los jale elprograma segun se hase con el metodo de cadenas pero no le encuentre ayudame porfas......................

Responder
avatar
14 de marzo de 2011, 9:25 delete

Disculpa mi tardanza al responder pero los fines de semana estoy algo corto de tiempo, bueno, lo que necesitas es leer el archivo de texto y unirlo con este ejemplo que publico aquí, almacenas los valores en variables y listo.

Para leer y guardar datos en archivos con java están estas entradas:

Guardar un Area de Texto
Abrir un Area de Texto
Abrir un Archivo

De forma tal que modificas este ejemplo para que no utilice el "scanner" (leer por teclado) y cargue los datos del archivo seleccionado que almacenas en las variables del programa.... Cualquier cosa me comentas... Saludos!

Responder
avatar
Anónimo
AUTOR
15 de marzo de 2011, 23:13 delete

gracias amigo estoy checando lo que pasa esque ya lo tengo como leer pero Ahora no se como jalar el metodo leer al main pero gracias heeee buen aporte

Responder
avatar
16 de marzo de 2011, 9:45 delete

De nada... Simplemente cárgalo, escribe en el método principal el nombre del método, por ejemplo:

public static void main (String [] args){
Metodo_Leer();
}

Esto carga de una el método para la lectura, solo es cuestión de que cargues en el lugar que quieras procesar los datos... Saludos!

Responder
avatar
Anónimo
AUTOR
10 de junio de 2014, 13:04 delete

Estimado:

Como puedo agregar a este programagra colas la opcion de sumar, contar y promediar los elementos??
Saludos!

Responder
avatar
19 de junio de 2014, 14:32 delete

Usa métodos separados y combina con el switch, en el Blog hay entradas al respecto

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon