Вы находитесь на странице: 1из 19

CONCEPTO DE PILA

Una pila (stack) es una coleccin de


elementos a los que solo se puede acceder
por un nico lugar o extremo de la pila.
Los elementos se aaden o quitan de la
pila slo por su parte superior (cima). Este
es el caso de una pila de platos, una pila
de libros, etc.
Las entradas de la pila deben ser
eliminadas en el orden inverso al que se
situaron en la misma. Debido a su
propiedad especifica ultimo en entrar,
primero en salir, se conoce a las pilas
como estructuras de datos LIFO (last in,
first out).

Las operaciones usuales en la pila son


Insertar y Quitar. La operacin Insertar
(push) aade un elemento en la cima
de la pila y la operacin Quitar (pop)
elimina o saca un elemento de la pila.
La figura muestra una secuencia de
operaciones Insertar y Quitar. El ultimo
elemento aadido a la pila es el
primero que se quita de la pila.

La pila se puede implementar mediante


arrays, en cuyo caso su dimensin o
magnitud es fija, y mediante listas
enlazadas, en cuyo caso se utiliza
memoria dinmica y no existe limitacin
en su tamao, excepto la memoria del
ordenador.

Una pila puede estar vaca (no tener


elementos) o llena (en el caso de tener
tamao fijo), si no caben ms elementos
en la pila.

Operaciones en una pila

Las operaciones que sirven para definir


una pila y poder manipular su contenido
son las siguientes (no todas ellas se
implementan al definir una pila):

Insertar (Push)
Quitar (Pop)
Pila vaca
Pila Llena

Insertar un dato en la pila


Sacar un dato de la pila
Comprueba si la pila no tiene elementos
Comprueba si esta llena de elementos

El Tipo Pila Implementado


Con Arrays

La Clase Pila implementada con arrays


incluye una lista (array) y un ndice a la
cima de la pila, adems de una
constante con el mximo nmero de
elementos

Los algoritmos de introducir insertar


(push) y sacar (pop) datos de la pila son:
Insertar (Push)
1.- Verificar si la pila no esta llena.
2.- Incrementar en 1 el puntero de la pila.
3.- Almacenar elemento en la posicin del
puntero de la pila.
Quitar (Pop)
1.- Si la pila no est vaca.
2.- Obtener el elemento de la posicin del
puntero de la pila
3.- Decrementar en 1 el puntero de la pila.

En el caso de que el array que define la pila


tenga TAMPILA elementos, las posiciones
del array, es decir, el ndice o puntero de la
pila, estarn comprendidas en el rango 0 a
TAMPILA-1 y en una pila vaca el puntero de
la pila apunta a -1, ya que 0, ser el ndice
del primer elemento.

Especificaciones Lgicas de la
Clase Pila
1.- Datos de la pila (tipo de dato, o para
generalizar de tipo (Object).
2.- Verifica que la pila no est llena antes
de intentar insertar o poner (push) un
elemento en la pila; verifica que una pila
no est vaca antes de intentar sacar
(pop) un elemento de la pila. Si estas
precondiciones no se cumplen se debe
visualizar un mensaje de error y el
programa debe terminar.

3.- PilaVaca devuelve verdadero si la pila


est vaca y falso en caso contraro.
4.- PilaLlena devuelve verdadero si la pila
est llena y falso en caso contrario.

Implementacin en Lenguaje
Java utilizando memoria
esttica

public class PilaEstatica


{
private static final int TAMPILA=49;
private int cima;
private final int[]pila;
public PilaEstatica ()
{
cima=-1;
pila= new int [TAMPILA];
}

public void insertar (int elemento)


{
if(pilaLlena())
System.out.println("desbordamiento de pila");
else
{
cima ++;
pila[cima]=elemento;
}
}

public int sacar()


{
int aux=-1;
if(pilaVacia())
{
System.out.println("no hay elementos en la pila");
return aux;
}
else
{
aux=pila[cima];
cima--;
return aux;
}
}

public boolean pilaVacia()


{
return cima==-1;
}

public boolean pilaLlena()


{
return cima==TAMPILA-1;
}

public void visualizar()


{
if (cima==-1)
System.out.println("La pila esta vacia");
else

}
}

for (int i=cima;i>=0;i--)


{
if (i==cima)
System.out.println("Cima-> ["+i+"] : "+pila[i]);
else
if (i==0)
System.out.println("Fondo->["+i+"] : "+pila[i]);
else
System.out.println("
["+i+"] : "+pila[i]);
}

Ejercicios de aplicacin
EJERCICIO 1:
Implemente en lenguaje Java una aplicacin que utilice
los mtodos de la clase PILAESTATICA (meter, sacar,
pilallena, pilavaca, visualizar).
La aplicacin insertar 10 valores en la Pila1. stos
sern ingresados por teclado por el usuario.
Una vez completa la Pila1, copiarlos a la Pila2 pero en
orden invertido. El dato que estaba al fondo de la Pila1
ahora estar en la cima de la Pila 2.
Considere que despus de la ejecucin del mtodo,
Pila1 debe quedar como estaba originalmente, es decir
no quedar vaca.
La nica pila que existe con datos es la pila1. Puede
crear las adicionales que sean necesarias para realizar
la operacin. No puede utilizar la variable TAMPILA.

EJERCICIO 2:

Se tiene una pila P en la cual se han almacenado


valores que pueden estar o no repetidos. Elabore
una aplicacin la cual permite que el usuario
ingrese por teclado el valor X para el cual desea
encontrar cuntas veces se encuentra en la Pila P.
Suponga que el nico acceso a la Pila es a travs
de las operaciones implementadas en la Clase
PilaEstatica (meter, sacar, pilallena, pilavacia,
visualizar). No puede usar directamente la variable
TAMPILA.
Al terminar la ejecucin deber desplegar la Pila P
sin modificaciones adems del nmero de veces
que aparece el elemento X en ella.

EJERCICIO 3:
Se tiene una pila P en la cual se han almacenado valores
que pueden estar o no repetidos. Elabore una aplicacin la
cual permite que el usuario ingrese por teclado 2 valores: el
valor VIEJO que desea sustituir en la pila por el valor
NUEVO.
Suponga que el nico acceso a la Pila es a travs de las
operaciones implementadas en la Clase PilaEstatica (meter,
sacar, pilallena, pilavacia, visualizar). No puede usar
directamente la variable TAMPILA.
Al terminar la ejecucin deber desplegar la Pila P en el que
se ha reemplazado el valor VIEJO por el NUEVO tantas
veces como aparezca. Si VIEJO no se encuentra en la pila,
la pila no tendr modificaciones.

Вам также может понравиться