0% encontró este documento útil (0 votos)
102 vistas25 páginas

Implementación de Pilas en Java

La pila es una estructura de datos que permite insertar y eliminar elementos de forma secuencial. Solo se pueden agregar o eliminar elementos desde un extremo llamado la cima. La pila mantiene un orden LIFO (último en entrar, primero en salir). El documento explica las operaciones básicas de una pila como apilar (push), desapilar (pop) y revisa una posible implementación de una clase pila en Java usando un vector.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPSX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
102 vistas25 páginas

Implementación de Pilas en Java

La pila es una estructura de datos que permite insertar y eliminar elementos de forma secuencial. Solo se pueden agregar o eliminar elementos desde un extremo llamado la cima. La pila mantiene un orden LIFO (último en entrar, primero en salir). El documento explica las operaciones básicas de una pila como apilar (push), desapilar (pop) y revisa una posible implementación de una clase pila en Java usando un vector.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPSX, PDF, TXT o lee en línea desde Scribd

La Pila o Stack

Programación en Java
LA PILA

La pila (stack) es una estructura ordenada de


elementos en la que se pueden insertar o Cima de
remover elementos por un extremo llamado la la pila
cima de la pila (stack top).

El apuntador de pila (stack pointer) señala al


elemento de la cima.

La pila puede carecer por completo de


elementos, en tal caso se le llama pila vacía. Apuntador
En una pila vacía el apuntador de pila señala a de pila
NULL.
Una pila
OPERACIONES BÁSICAS
Las operaciones básicas de la pila son:

Apilar (push(s, i)) - inserta un nuevo elemento a la pila.

Desapilar (pop(s)) - remueve el elemento de la cima de la pila.

E
D D D
C C C C i=D
B B B B
A A A A

Pila antes de Pila después de Pila antes de i Pila después de i


Push(s, E) Push(s, E)  Pop(s)  Pop(s)
EVOLUCIÓN DE UNA PILA

I=POP(S) PUSH(S,E) PUSH(S,F) I=POP(S) I=POP(S) I=POP(S)

F
D E E E
C C C C C C
B B B B B B B
A A A A A A A

sale D entra E entra F sale F sale E sale C


OTRAS OPERACIONES

La función EMPTY(S) es verdadera si la pila está vacía.

La operación STACKTOP(S), que es equivalente a un POP


seguido de un PUSH.

I = POP(S);
PUSH(S,I);

determina el valor del elemento de la cima sin removerlo.


LA CLASE PILA

La clase pila tiene atributos y métodos:


 Los atributos son la colección de elementos y el TOPE.
 Los métodos, por otra parte, son todas aquellas operaciones analizadas en la sección
anterior, Pila_Vacia, Pila_Llena, Inserta_Pila, Elimina_Pila.

Algunos lenguajes de programación como por ejemplo los POO, orientados por objetos tiene
predefinidas determinadas estructuras de datos como la clase pila, donde es necesario
declarar una nueva estructura que haga referencia a la clase predefinida para poder acceder y
utilizar a sus atributos y métodos.

Preparado por: Ms. Blanca Duarte de Báez


Ejemplo: Clase Abstracta Pila
TOPE numérico
Datos = Arreglo[1..Max]
Crea_Pila
Pila_Vacia()
Pila_Llena()
Tope_Pila()
Inserta_Pila()
Elimina_Pila()
 

Preparado por: Ms. Blanca Duarte de Báez


Ejemplo: Definición y desarrollo en
pseudocódigo de procedimientos de la Clase Pila.
‘Declaración e inicialización de constante’
MAX numérico
MAX = 10
 
Clase Pila
Tope numérico
Dato arreglo[1..MAX]
Crea_Pila
Pila_Vacia()
Pila_Llena()
Tope_Pila()
Inserta_Pila()
Elimina_Pila()
Fin clase
Preparado por: Ms. Blanca Duarte de Báez
P = Clase Pila
procedimiento Crea_Pila(P)
  [Link]= 0
fin procedimiento
 
funcion Pila_Vacia (P)
  Si [Link] = 0
Devolver verdadero
Sino
Devolver Falso
fin si
fin funcion
 
función Pila_Llena (P)
  Si [Link] = [Link]
Devolver Verdadero
Sino
Devolver Falso
fin si
fin funcion

Preparado por: Ms. Blanca Duarte de Báez


funcionTope_Pila (P)
 
si P.Pila_Vacia = Verdadero
‘error de Desbordamientos o - Pila Vacía’
Devolver 0
sino
devolver [Link]
fin si
fin funcion
 
procedimiento Inserta_Pila(Dato, P)
 
si P.Pila_Llena = Verdadero
error Desborda miento o Pila llena
sino
[Link] = [Link] + 1
P[Tope] = Dato
 Fin Procedimiento

Preparado por: Ms. Blanca Duarte de Báez


Procedimiento Elimina_Pila ( P, Dato )
 
Si P.Pila_Vacia = Verdadero
  error Subdesbordamiento o Pila Vacía
sino
Dato = P[Tope]
[Link]=[Link] - 1
  fin si
fin procedimiento

Preparado por: Ms. Blanca Duarte de Báez


Implementación de clase Pila a base de Vectores
con Java
// OPERACIONES PÚBLICAS
// void apilar(x) ->Inserta x
// voiddesapilar() ->Elimina el último elemento insertado
// Objectcima() ->Devuelve el último elemento insertado
// booleanesVacia() ->Devuelve true si vacía, sino false
// void vaciar() ->Elimina todos los elementos
// ERRORES: cima o desapilar sobre la pila vacía

public interface IPila {


voidapilar(Object x);
voiddesapilar() throws Exception;
Object cima() throws Exception;
booleanesVacia();
void vaciar();
}
 
[Link].*;
Preparado por: Ms. Blanca Duarte de Báez
public class PilaVec implements IPila {
private Vector p;
private int cimaDePila;
static final int CAPACIDAD_POR_DEFECTO = 10;
public PilaVec() {
p = new Vector(CAPACIDAD_POR_DEFECTO);
cimaDePila = -1;
}

Public boolean esVacia() {


return (cimaDePila == -1);
}
Public void vaciar() {
cimaDePila = -1;
}

Preparado por: Ms. Blanca Duarte de Báez


public void apilar(Object x) {
if (++cimaDePila == [Link]()) [Link](x);
[Link](cimaDePila, x);
}
public void desapilar() throws Exception {
if (esVacia()) throw new Exception("pila vacía");
cimaDePila--;
}
public Object cima() throws Exception {
if (esVacia()) throw new Exception("pila vacía");
[Link](cimaDePila);
}

Observación: Una interface en Java es una colección de métodos abstractos y


propiedades. En ellas se especifica qué se debe hacer pero no su
implementación. Serán las clases que implementen estas interfaces las que
describan la lógica del comportamiento de los métodos.

Preparado por: Ms. Blanca Duarte de Báez


ALGORITMO DE CHEQUEO DE
PARÉNTESIS
Algoritmo para checar paréntesis. La expresión se almacena en la cadena S.
1. VALIDO = VERDADERO
2. i = 1
3. CONTADOR = 0
4. MIENTRAS VALIDO AND i <= LONGITUD(S) HACER
5. SI S[i] = '(' ENTONCES
6. CONTADOR = CONTADOR + 1
7. SINO
8. SI S[i] = ')' ENTONCES
9. CONTADOR = CONTADOR - 1
10. SI CONTADOR < 0 ENTONCES
11. VALIDO = FALSO
12. i = i + 1
13. SI CONTADOR <> 0 ENTONCES
14. VALIDO = FALSO
Actividad
Escriba el algoritmo de chequeo de paréntesis en Java.
ALGORITMO DE CHEQUEO DE PARÉNTESIS 2
Algoritmo para checar expresiones con paréntesis bien construidas. Se utiliza una pila P. La cadena se
almacena en una variable S.
1. VALIDO = VERDADERO
2. i = 1
3. MIENTRAS VALIDO AND i <= LONGITUD(S)
4. SI (S[i] = '(') OR (S[i] = '[') OR (S[I] = '{') ENTONCES
5. PUSH(P,S[i])
6. SINO
7. SI (S[i] = ')') OR SI (S[i] = ']') OR SI (S[i] = '}') ENTONCES
8. SI EMPTY(P) ENTONCES
9. VALIDO = FALSO
10. SINO
11. C = POP(P)
12. SI NOT((C='(' AND S[i] = ')')OR(C='[' AND S[i] =']')
OR (C='{' AND S[i]= '}')) ENTONCES
13. VALIDO = FALSO
14. i = i + 1
15. SI NOT EMPTY(P) ENTONCES
16. VALIDO = FALSO
REPRESENTACIÓN
Una pila puede representarse con un registro, uno de los campos es
un entero usado como apuntador de pila y el otro campo es un
arreglo lineal de elementos de la pila.
Apuntador de pila Pila

S: 4 '(' '[' '(' '{'

[Link] = apuntador de pila.


[Link][[Link]] = elemento de la cima de la pila
OPERACIONES EMPTY Y POP
NOTA: Se supone una pila de caracteres

Función EMPTY(S:PILA) regresa BOOLEANO


1. SI [Link] = 0 ENTONCES
2. REGRESA VERDADERO
3. SINO
4. REGRESA FALSO

Función POP(S:PILA) regresa CARÁCTER


1. X ¬ [Link][[Link]]
2. [Link] ¬ [Link] - 1
3. REGRESA X
OTRA VERSIÓN DE POP

Función POP(S:PILA) regresa CARÁCTER


1. SI EMPTY(S) ENTONCES
2. ERROR (‘bajo flujo, pila vacía’)
3. SINO
4. X = [Link][[Link]]
5. [Link] = [Link] - 1
6. REGRESA X
OPERACIÓN POPANDTEST

SUBRUTINA POPANDTEST(S: PILA; BAJOFLUJO:


BOOLEANO; X: CARÁCTER)
1. SI EMPTY(S) ENTONCES
2. BAJOFLUJO = VERDADERO
3. SINO
4. BAJOFLUJO = FALSO
5. X = [Link][[Link]]
6. [Link] = [Link] - 1
7. REGRESA X
OPERACIÓN PUSH

SUBRUTINA PUSH(S:PILA, X:CARACTER)


1. [Link] = [Link] + 1
2. [Link][[Link]] = X

SUBRUTINA PUSH(S:PILA, X:CARACTER)


1. SI [Link] = STACKSIZE ENTONCES
2. ERROR (’sobreflujo en la pila’)
3. SINO
4. [Link] = [Link] + 1
5. [Link][[Link]] ¬ X
OPERACIÓN STACKTOP

FUNCION STACKTOP(S:PILA) regresa CARACTER


1. SI EMPTY(S) ENTONCES
2. ERROR (‘pila vacia’)
3. SINO
4. REGRESA [Link][[Link]]
Implementación de pilas en Java
Primero se incrementa, luego se
hace la asignación
public void push(char i){
if(tope+1 < [Link])
public class PilaChar{ pila[++tope] = i;
private char pila[]; }
private int tope; public char pop(){
public PilaChar(int capacidad) if(isEmpty())
{ return 0;
pila = new char[capacidad]; return pila[tope--];
tope = -1; }
} public String toString(){
public boolean isEmpty(){ return new
return tope == -1; String(pila,0,tope+1);
} }
}
Primero se obtiene el valor de pila y luego se decrementa. Convierte a cadena un arreglo de caracteres.
Referencias Bibliográficas
 
Cairó, Osvaldo/Guardati, Silvia (2006). Estructura de Datos. 3ra
Edición.
McGraw-Hill Interamericana Editores. S.A. de C.V.
ISBN: 970-10-5908-5
 
LOOMIS,Mary. Estructura de Datos y Organización de Archivos, 2da.
Edición. 1991.
México. Editorial Prentice-Hall Hispanoamericana S.A.

[Link]
colas_y_listas.pdf

[Link]

[Link]

También podría gustarte