Está en la página 1de 4

Interface List del api java. Clase Stack. Ejemplos resueltos.

APRENDERAPROGRAMAR.COM

LA ESTRUCTURA DE DATOS
PILA EN JAVA. CLASE STACK
DEL API JAVA. EJEMPLO Y
EJERCICIOS RESUELTOS.
(CU00920C)

Seccin: Cursos
Categora: Lenguaje de programacin Java nivel avanzado I
Fecha revisin: 2029
Resumen: Entrega n20 curso Lenguaje de programacin Java Nivel Avanzado I.

aprenderaprogramar.com, 2006-2029

Autor: Manuel Sierra

Interface List del api java. Clase Stack. Ejemplos resueltos.

CLASE STACK
A continuacin vamos a explicar la clase Stack de Java, que implementa la interface List. Stack se
traduce por pila y para recordar su signifcado podemos pensar en una pila de libros. Tambin
veremos las caractersticas ms importantes de esta nueva implementacin y haremos un ejemplo a
modo de ejercicio.

STACK
La clase Stack es una clase de las llamadas de tipo LIFO (Last In - First Out, o ltimo en entrar - primero
en salir). Esta clase hereda de la clase que ya hemos estudiado anteriormente en el curso Vector y con 5
operaciones permite tratar un vector a modo de pila o stack.
Las operaciones bsicas son push (que introduce un elemento en la pila), pop (que saca un elemento de
la pila), peek (consulta el primer elemento de la cima de la pila), empty (que comprueba si la pila est
vaca) y search (que busca un determinado elemento dentro de la pila y devuelve su posicin dentro de
ella).
Esta clase es muy sencilla y al crear un objeto de tipo Stack con el constructor bsico evidentemente no
contendr ningn elemento.
Un conjunto mucho ms completo y consistente para operaciones de stack LIFO son proporcionados en
la interface Deque y sus implementaciones, pero nosotros de momento vamos a limitarnos al estudio
de la clase Stack.

EJEMPLO USO CLASE STACK


Realizaremos un ejemplo a modo de uso de pila. Uno de los casos ms usados en informtica de una
pila es cuando queremos verificar si una determinada sentencia o instruccin est equilibrada en
cuanto a nmero de parntesis, corchetes o llaves de apertura y cierre. Cuando se escribe cdigo de
programacin si no existe equilibrio entre signos de apertura (por ejemplo un parntesis de apertura) y
cierre (por ejemplo un parntesis de cierre) ni siquiera debera procesarse la sentencia ya que no
estara formalmente bien construida. De esto se encargan los analizadores lxicos de los compiladores.
As que vamos a utilizar esta vez tan solo una clase Programa con el mtodo main, donde vamos a ir
analizando una sentencia para verificar si es equilibrada o no en smbolos de parntesis, recorriendo
todos sus caracteres desde el inicio hasta el final.
Iremos construyendo nuestra pila apilando un smbolo (cada vez que detectemos un smbolo de
apertura o desapilando de ella cuando detectemos un smbolo de cierre. Tendremos que ir analizando

aprenderaprogramar.com, 2006-2029

Interface List del api java. Clase Stack. Ejemplos resueltos.

todos los caracteres de una expresin y actuar cuando detectemos un parntesis, operando en funcin
de si el parntesis ledo es de abrir (() o cerrar ()). El equilibrio en la escritura vendr determinado al
terminar el anlisis en funcin de si la pila est vaca (hay equilibrio) o contiene algn elemento (no hay
equilibrio).
Ejemplo: analizamos la expresin Hay varios pases (Mxico, Espaa) que comparten el mismo idioma
(espaol o castellano).
El resultado al finalizar el anlisis de la sentencia sera que la pila est vaca, y esto querr decir que
nuestra sentencia es equilibrada en parntesis y por tanto el resultado es correcto.
Si analizramos la expresin Hay varios pases (Mxico, Espaa) que comparten el mismo idioma
(espaol o castellano.
El resultado al finalizar el anlisis ser que la pila contiene un parntesis, lo que quiere decir que la
expresin no es equilibrada y no tiene el mismo nmero de parntesis abiertos que cerrados.
Tendremos que tener en cuenta casos especiales como una expresin cuyo primer elemento sea un
parntesis de cierre. Por ejemplo: Hay varios pases )Mxico, Espaa( la consideraramos una
expresin incorrecta ya que si la pila est vaca el primer elemento siempre tendr que ser un
parntesis de apertura y no uno de cierre. Tendremos en cuenta por tanto que adems de equilibrio
exista correccin en la forma de construccin (que no puedan existir cierres de parntesis que no se
hayan abierto).
Vamos a escribir ahora el siguiente cdigo con el que vamos a trabajar:

/* Ejemplo Interface List, clase Stack aprenderaprogramar.com */


import java.util.Stack;
public class Programa {
public static void main(String arg[]) {
String cadenano = "(Cadena no equilibrada en parntesis(()()()))))";
String cadenasi = "(Cadena equilibrada en parentesis())";
System.out.println("Verificacin equilibrado en parntesis para cadenano:");
System.out.println(verificaParentesis(cadenano));
System.out.println("Verificacin equilibrado en parntesis para cadenasi:");
System.out.println(verificaParentesis(cadenasi));
}
public static boolean verificaParentesis(String cadena) {
Stack<String> pila = new Stack<String>();
int i = 0;
while (i<cadena.length()) { // Recorremos la expresin carcter a carcter
if(cadena.charAt(i)=='(') {pila.push("(");} // Si el parntesis es de apertura apilamos siempre
else if (cadena.charAt(i)==')') { // Si el parntesis es de cierre actuamos segn el caso
if (!pila.empty()){ pila.pop(); } // Si la pila no est vaca desapilamos
else { pila.push(")"); break; } // La pila no puede empezar con un cierre, apilamos y salimos
}
i++;
}
if(pila.empty()){ return true; } else { return false; }
}
}

aprenderaprogramar.com, 2006-2029

Interface List del api java. Clase Stack. Ejemplos


E
resuelltos.

En este ejjemplo hemos creado laa funcin verrificaParente


esis que nos devuelve un
n boolean indicando si
dada una cadena, esta est equilibrada y corrrecta en par
ntesis. Paraa ello se hacee uso internaamente en
este mto
odo de una pila
p o stack. As el progrrama principal main tan solo llama a esta funci
n con una
cadena dee ejemplo (caadenano o cadenasi) parra verificar su
u equilibrado
o y correcci
n en parntesis.
El diagram
ma de clases por tanto paara BlueJ es muy sencillo
o y tiene tan solo la clase Programa:

q obtendremos por co
onsola ser similar a esta:
La salida que

CONCLUSSIONES
Hemos vissto un claro ejemplo dell uso de la clase Stack qu
ue aunque muy
m sencilla, es muy til ya que su
implemen
ntacin es muy fcil de aprender con
n tan solo loss 5 mtodos comentadoss anteriorme
ente (push,
pop, peekk, empty, seaarch).

e
CU0
00921C
Prxima entrega:
Acceso al curso comp
pleto en apre
enderaprogrramar.com --- > Cursos, o en la direcciin siguiente
e:
http://apreenderaprograamar.com/index.php?option=com_conte
ent&view=category&id=58&
&Itemid=180

aprenderraprogramar.co
om, 2006-2029

También podría gustarte