You are on page 1of 18

Una pila es una variante de lista con la restricción de que la

inserción y eliminación de datos se hace por un solo extremo de la


lista. Basicamente existen 3 operaciones sobre la pila: apilar(agrega
al inicio de la pila), desapilar (retira el primer elemento de la pila) y
cima (Obtiene el primer elemento de la pila).
El código es sencillo:

import java.io.Serializable;

public class Pila<Tipo> extends Lista implements


Serializable
{

public Pila ()
{
super();
}

public void apilar(Tipo dato)


{
super.addInit(dato);
}

public Tipo desapilar()


{
return (Tipo) super.removeInit();
}

Una cola también es una variante de lista con la restricción de que la


inserción y eliminación de datos se hace por extremo diferentes de
la lista. Basicamente existen 3 operaciones sobre la cola:
acolar(agrega al final de la cola), desacolar (retira el primer elemento
de la cola) y frente (Obtiene el primer elemento de la cola).
El código les muestro a continuación:

import java.io.Serializable;
public class Cola<Tipo> extends Lista implements
Serializable
{

public Cola ()
{
super();
}

public void acolar(Tipo dato)


{
super.addEnd (dato);
}

public Tipo desacolar()


{
return (Tipo) super.removeInit ();
}

public Tipo frente()


{
return (Tipo) getDato(0);
}

}
Colas en Java
with 14 comments
Ya puse unos ejemplos de listas y pilas, pero todavía hace falta el ejemplo de colas (no
de esas, pero no estaría mal poner unos buenos ejemplos…).
Bueno, lo que hace este programa, es mostrar un menú para que el usuario seleccione lo
que desee hacer, si insertar, retirar o mostrar la cola (de Java…).
view source

print?

01 import java.util.*;
02 public class Cola {

03 public static void main( String args[] ){


04 Scanner leer = new Scanner(System.in);

05
06 colagenerica obj = new colagenerica();

07
08 int op;

09 int num;
10

11 do{
12 menu();

13 op = leer.nextInt();
14

15 switch(op){
16 case 1:
17 System.out.println( "Numero a insertar" );
18 num = leer.nextInt();

19 if(obj.inscola(num)){
System.out.println( "fre"+obj.fre+"fin"+obj.
20
fin+"aux"+obj.max );

System.out.println( "El numero "+num+" se


21
inserto en la cola ["+obj.dret+"]" );
22 System.out.println();

23 }
24 else{

25 System.out.println( "Cola llena" );


26 }

27 break;
28 case 2:

29 if(obj.retcola()){
System.out.println( "El dato retirado fue:
30
"+obj.dret );

31 }
32 else{

33 System.out.println( "Cola vacia" );


34 }

35 break;
36 case 3:

37 if(obj.fre==-1 && obj.fin==-1){


38 System.out.println( "Cola vacia" );

39 }
40 else{

41 System.out.println( "Estado de la cola:" );


42 for(int i=obj.fre; i<=obj.fin; i++){

43 System.out.print(obj.c[i]+" \t");
44 }

45 break;
46 }

47 }
48 }

49 while(op != 4);
50 }

51
52 public static void menu(){

53 System.out.println( "\t Menu para colas \n" );


54 System.out.println( "1.- Insertar" );

55 System.out.println( "2.- Retirar" );


56 System.out.println( "3.- Estado" );

57 System.out.println( "4.- Fin" );


58 System.out.println( "\n Selecciona" );

59 }
60 }

El programa usa métodos de la clase colagenerica, que puedes ver haciendo clic en mas
view source

print?

01 class colagenerica
02 {

03 public int max;


04 protected Object dret;

05 public Object c[];


06 public int fre = -1;

07 public int fin = -1;


08

09 public colagenerica()
10 {

11 max=20;
12 c=new Object [max];

13 }
14

15 public colagenerica(int n)
16 { max=n;

17 c=new Object [max];


18 }
19
20 public boolean colallena(int fin,int max)

21 {
22 boolean llena;

23 if (fin==max-1)
24 llena=true;

25 else
26 llena=false;

27 return llena;
28 }

29
30 public boolean colavacia(int fre)

31 {
32 boolean vacia;

33 if (fre==-1)
34 vacia=true;

35 else
36 vacia=false;

37 return vacia;
38 }

39
40 public boolean inscola(Object dato)
41 {
42 if (fin==max-1)

43 return false;
44 fin++;

45 c[fin] = dato;
46 if (fin==0)

47 fre=0;
48 return true;

49 }
50

51 public boolean retcola()


52 {

53 if (fre ==-1)
54 return false;

55 dret=c[fre];
56 if (fre==fin)

57 {
58 fre=-1;

59 fin=-1;
60 }

61 else
62 fre++;
63 return true;
64 }

65 }
Código Fuente:

public class Pila


{
int tope=-1;
int vec[];

Pila(int max)
{
vec=new int [max];
}
public boolean llena()
{
if (tope==vec.length-1)
return true;
else
return false;
}
public boolean vacia()
{
if (tope==-1)
return true;
else
return false;
}
public void push(int dato)
{
if (llena()== true)
System.out.println("Overflow");
else
if (tope==-1)
{
tope=0;
vec[tope]=dato;
}
else
{
tope++;
vec[tope]=dato;
}
}
public int pop()
{
int aux;
if (vacia()==true)
{
System.out.println("La pila esta vacia");
return -1;
}
else
{
aux=vec[tope];
tope--;
}
return aux;
}
public void Imprime_Datos()
{
if(vacia()==true)
{
System.out.println("La pila esta vacia,
ingrese datos primero:");
}
else
for(int
Contador=0;Contador<vec.length;Contador++)
System.out.println("Los valores
de la pila son:"+vec[Contador]);
}
}
Pilas y Colas
1.- Se tienen dos pilas (stacks) que contienen números
enteros; la primera ordenada ascendentemente desde el
tope hacia el fondo, y la segunda ordenada
descendentemente desde el tope hacia el fondo. Si se
cuenta con la clase CPila que contiene las operaciones
básicas definidas para pilas, elabore un programa que
fusione ambas pilas en una tercera ordenada
descendentemente desde el tope hacia el fondo. NOTA: no
debe utilizar pilas auxiliares.

2.- Decimos que una pila P es un sombrero de otra pila Q, si


todos los elementos de P están en Q, en el mismo orden, y
en las posiciones más próximas a la cima. La pila nula se
considera un sombrero de cualquier pila. Por ejemplo, en la
siguiente figura, la pila A es un sombrero de la pila B, pero
no de la pila C.

Escribir una función recursiva que dado dos pilas de


números enteros, verifique si la primera es sombrero de
la segunda.

3.- Simular una pila utilizando dos colas.

4.- Simular una cola usando dos pilas.

5.- Simule dos pilas usando un arreglo. La primera pila se


llena de la posición 0 hacia tamanoMax y la segunda pila
se llena de la posición tamanoMax hacia 0. Donde
tamanoMax es el numero de elementos que puede
contener el arreglo. Usted debe controlar que el arreglo
no se llene es decir que no haya ?overflow?.
6.- Crear el codigo necesario para trabajar las estructuras
de dato Pila y Cola como extensión de un vector en lugar
de una lista simple
7.- Se tiene una lista con los datos de los clientes de una
compañía de telefonía celular, los cuales pueden
aparecer repetidos en la lista, si tienen registrado más de
un número telefónico. La compañía para su próximo
aniversario desea enviar un regalo a sus clientes, sin
repetir regalos a un mismo cliente. Los regalos se
encuentran almacenados en una pila de regalos. Se
desea elaborar un programa en Java que permita generar
una nueva estructura donde los clientes aparezcan sólo
una vez con sus regalos asignados.
8.- Hacer un método que reciba una lista y una pila, el
método deberá modificar la lista original, eliminando las
posiciones indicadas por cada nodo de la pila.
9.- Una matriz de M-columnas puede ser vista como M-
pilas consecutivas, donde la operación push de colocar
un elemento en la pila, debería recibir el elemento a
colocar y la identificación de la pila j donde se desea
introducir el elemento. Elabore la clase Pila en java que
permita implementar la operación push de una sucesión
de M-pilas en un objeto matriz NxM.
10.- Responda las siguientes preguntas:
a. ¿Cuáles operaciones de una lista enlazada
están negadas en una pila y por qué?
b. Cuales son las operaciones básicas de una
cola. Explíquelas.
11.- Escribir un programa que invierta el contenido de
una cola. Usted puede utilizar estructuras de datos
auxiliares para hacerlo.
12.- Se tiene una almacén donde se encuentran las
neveras fabricadas por una planta, las primeras neveras
que fueron fabricadas están de últimas, dentro del
almacén y las últimas neveras fabricadas, aparecen de
primeras dentro del almacén. Los datos de cada nevera
son código y descripción. El almacén dispone de una sola
puerta, por donde entran las neveras a ser almacenadas
y salen las neveras que se van a distribuir a las tiendas.
Adicionalmente, se tiene una cola de solicitudes de
neveras realizadas por las tiendas, donde aparece el
nombre de la tienda y la cantidad solicitada de neveras,
elabore un método que permita asignar a cada tienda las
neveras, generando una nueva estructura que contenga
la tienda y el código de las neveras asignadas.
13.- Responda las siguientes preguntas y
justifique brevemente su respuesta en cada
caso:
a. De las siguientes estructuras cuál
es mas eficiente para almacenar
la información del último censo
de cada estado de Venezuela.
i. Una
pila
ii. Una
cola
iii. Una
lista simple
iv. Un
vector

b. ¿En que casos utilizaría la


estructura de tipo cola, de un
ejemplo?
14.- Una matriz de N-filas puede ser vista como N-colas
consecutivas, donde la operación encolar de introducir un
elemento en la cola, debería recibir el elemento a
introducir y el identificador de la cola i de donde se
desea meter el elemento. Elabore un método que permita
implementar la operación encolar de una sucesión de N-
colas en un objeto matriz NxM.
15. Implementar un método que simule la calculadora HP
para las operaciones matemáticas. Utilizando una pila
(stack)
16. Implemente el objeto Cola en Java de manera que
reciba los datos de personas en una cola de un banco,
esto es, nombre y conjunto de transacciones a realizar.
Se requiere conocer el tiempo estimado de permanencia
de cualquier persona el la cola, si se conocen los tiempos
estimados para cada tipo de transacción:
Retiro 4 min
Depósito 2 min
Consulta 3.5 min
Actualización 5 min
Pagos 2 min
17. Hacer un método que reciba una lista y una pila, el
método deberá modificar la lista original, eliminando
las posiciones indicadas por cada nodo de la pila.
Lista -> 2 ->4 ->6 ->8 ->9 ->3
Pila -> 2 6
Lista nueva-> 2 ->6 ->8 ->9
18. Dada una PILA y una COLA que contienen Letras
almacenadas, las cuales se pueden repetir, elabore un
método en Java, que genere una lista con la información
de ambas, pero sin repetir las letras.
19. Elabore un método en Java que verifique si una pila A
está contenida en una pila B. Una pila A está contenida
en una pila B, si todos los elementos de la pila A están en
la pila B.
20. Los compiladores generalmente usan pilas para
facilitar el proceso de evaluar expresiones y generar
código en lenguaje de maquina. Las expresiones
aritméticas generalmente se escriben en notación infija,
es decir operando operador operando Por ejemplo: 2 + 7
; 16 / 4 ; 2 * 3 etc. Los computadores prefieren la notación
postfija, es decir operando operando… operador
Ejemplo: 2 7 + ; 16 4 / ; 2 3 * etc. Para evaluar una
expresión aritmética el computador deberá primero
convertir la expresión de infija a postfija y luego proceder
a evaluar la expresión. En ambos procesos utilizara una
pila para hacerlo. Escriba un programa en Java que
reciba una expresión como un String, y luego utilizando la
estructura de datos Pila, primero convierta la expresión a
postfija y la muestre por pantalla, y luego proceda a
evaluar la expresión mostrando el resultado final.
Nota: para hacer mas fácil la evaluación, considere solo
los cuatro operadores básicos (+,-,*,/) y solo operandos
de un solo digito. La separación entre ellos será de un
solo espacio en blanco.
Ejemplo # 11 Menú de opciones

Realizar un programa para el celular que sea capaz de mostrar un menú


con las siguientes opciones:

• Área de un círculo.
• Obtener número mayor
• Ecuación cuadrática.
• Salir

El programa deberá ser capaz de realizar la operación seleccionada por el


usuario.

Observaciones:

La opción “Área de un circulo”, pide el radio del circulo y calcula su área. La


opción de “Obtener número mayor” deberá pedir tres números solamente e
indicará cual es el mayor de los tres. Para la opción “Ecuación cuadrática” usar
la formula general y tener cuidado porque puede ser que la solución tenga raíces
imaginarias.

Solución

Paso 1 Creación del menú

Para esta opción simplemente creamos la lista con las opciones mencionadas,
para cada opción se crea un Form y se realizan las conexiones necesarias. La
figura siguiente muestra la creación de la lista y se muestran las conexiones para
dos opciones nada más.
En la figura se remarca que se requieren dos comandos un okCommand
encargado de realizar la operación necesaria y un exitCommand que nos regresa
al menú principal.

Paso #2 Agregar interfaz de usuario para cada opción

En la vista de flujo se da doble clic para que se abra cada Form y así poder
agregar los elementos necesarios para la interfaz, como ya se ha realizado en
otros ejemplos. La figura siguiente muestra la interfaz de usuario para la opción
“Área de un círculo”

En resumen la interfaz de usuario para cada opción es la siguiente:


Opción 1: Un TextField para ingresar el radio y un StringItem para mostrar el
resultado.
Opción 2: Tres TextField para ingresar los tres números y un StringITem para
mostrar el resultado.
Opción 3: Tres TextField para ingresar los tres coeficientes de la ecuación y un
Stringitem para mostrar el resultado.

Paso #3 Agregar el código en cada form

Cada Form tiene un okCommand para ejecutar la acción que se pide, dando clic
derecho se tiene acceso a insertar el código como ya se ha visto en los Ejemplos
#8 y #9. Aquí no voy a entrar en detalle del código, en teoría el lector debe tener
idea de cómo hacer dicho código, mejor en el video que se muestra más adelante
se puede ver el código con exactitud, agrandes rasgos lo que se realiza para cada
opción es lo que sigue:

Opción 1: Leer el valor que se ingreso de radio, se aplica la formula y se muestra


el resultado.
Opción 2: Leer los tres números y luego hacer tres comparaciones para saber
cual es el mayor.
Opción 3: Leer los tres coeficientes, verificar si se puede resolver la ecuación y si
es así aplicar la formula y mostrar los resultados y si no enviar mensaje de que
tiene raíces imaginarias.

Paso #4 Probar

Pues ya finalmente se prueba el ejemplo y se verifica que no se tengan errores si


los hay se corrige el código hasta que quede listo.

You might also like