Você está na página 1de 11

UNIVERSIDAD AUTNOMA DE ASUNCIN

Facultad de Ciencias y Tecnologas


Departamento de Informtica

CLASE 4
Pilas (Stack)
Introduccin
En esta unidad se presentaran estructuras de datos lineales con restricciones en cuanto a la
posicin en la cual se pueden llevar a cabo las operaciones de insercin y eliminacin de
componentes.

Pilas
Una pila representa una estructura lineal de datos en la que se puede agregar o quitar
elementos nicamente por uno de los extremos. En consecuencia, los elementos de una pila
se eliminan en orden inverso al que se insertaron, es decir el ltimo elemento que se mete
en la pila es el primero que se saca. Tambin conocida como estructura LIFO (Last Input,
First Output) ltimo en entrar, primero en salir.
Las pilas al igual que los arreglos son consideradas estructuras lineales, ya que sus
componentes ocupan lugares sucesivos en la estructura y cada uno de ellos tiene un nico
sucesor y un nico antecesor, con excepcin del ltimo y del primero.
La pila se define formalmente como una coleccin de datos a los cuales se puede acceder
mediante un extremo, que se conoce generalmente como tope.
Algunos de los ejemplos ms comunes sobre el funcionamiento de pilas son: pila de libros,
pila de platos, pila de latas en supermercado, etc.

Representacin de la pilas
Las pilas no son estructuras fundamentales de datos, es decir no estn definida como tales
en los lenguajes de programacin. Para su programacin se requieren el uso de otras
estructuras de datos, como:

Arreglos
Listas

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
1

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Variables de las pilas


En esta unidad trabajaremos con arreglos. En consecuencia, es importante definir el tamao
mximo de la pila (MAX), as como la variable auxiliar TOPE, esta variable se utiliza para
indicar el ltimo elemento que se insert en la pila.
Ejemplo 1: Representacin grfica de pila alojada en un arreglo
1 23
A B C

MAX = 4
TOPE = 3 -> C
1 2 3
C B A
MAX = 4
TOPE = 3 -> A
A
B
C

1
2
3

MAX = 4
TOPE = 3 -> C
C
B
A

1
2
3

MAX = 4
TOPE = 3 -> A

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
2

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Operaciones con pilas


Las operaciones bsicas con pilas, permiten la insercin y eliminacin de elementos en una
pila.

Insertar un elemento ->Push


Eliminar un elemento -> Pop

Tambin existen las operaciones auxliales, que permiten verificar el estado de una pila
antes de su insercin (Llena), o eliminacin (Vaca). El primer arroja un error denominado
Desbordamiento, debido a que la misma est repleta en su capacidad y no se pueden
insertar nuevos elementos. El segundo estado arroja el error denominado
Subdesbordamiento, debido a que la misma est vaca y no hay elementos para eliminar.

Pila_Vaca -> Subdesbordamiento


Pila_Llena -> Desbordamiento

Ejemplo 2: Desarrollo de algoritmos en pseudocdigo para operaciones auxiliares de pilas


Pila_Vacia (Pila, Tope, Bandera)
Si Tope = 0 entonces
Bandera = Verdadero Subdesbordamiento o Pila vaca
Sino
Bandera = Falso
Fin si
Fin Pila_Vacia

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
3

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Pila_Llena (Pila, Tope, Max, Bandera)


Si Tope = Max entonces
Bandera = Verdadero Desbordamiento o Pila llena
Sino
Bandera = Falso
Fin si
Fin Pila_Vacia
Ejemplo 3: Desarrollo de algoritmos en pseudocdigo para operaciones bsicas de pilas
Inserta (Pila, Tope, Numel, Max, Dato)
Si Pila_Llena(Pila, Tope,Max) = Verdadero
Desbordamiento o Pila llena
Sino
Tope =Tope + 1
pPila[Tope] = Dato
Fin si
Fin Inserta
Elimina (Pila, Tope, Numel, Dato)
Si Pila_Vacia (Pila, Tope) = Verdadero
Subdesbordamiento o Pila Vaca
Sino
Dato = Pila[Tope]
Tope = Tope - 1
Fin si

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
4

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Fin Elimina

Aplicaciones de pilas
Las pilas son una estructura de datos muy utilizadas en la solucin de diversos tipos de
problemas, en el rea de computacin. Analizaremos en este apartado algunos de los casos
ms representativos de la aplicacin de las mismas.

Llamadas a subprogramas
Tratamiento de expresiones aritmticas
Recursividad
Ordenacin

Llamadas a subprogramas: cuando se tiene un programa que llama a un subprograma,


tambin conocido como modulo o funcin, internamente se usan pilas para guardar el
estado de las variables del programa, as como las instrucciones pendientes de ejecucin en
el momento que se hace la llamada. Cuando termina la ejecucin del subprograma, los
valores almacenados en la pila se recuperan para continuar con la ejecucin del programa
en el punto en el cual fue interrumpido. Adems de las variables se recupera la direccin del
programa en la que se hizo la llamada, porque a esa posicin de regresa el control del
proceso.
Tratamiento de expresiones aritmticas: otro problema interesante en computacin
consiste en convertir expresiones aritmticas en notacin infija a su equivalente en notacin
prefija o posfija.
Ejemplo 4: Expresin aritmtica notacin infija a posfija
A + B-> Notacin Infija -> Operador (+) entre los operandos
+ AB -> Notacin Prefija-> Operador (+) precede a los operandos
AB +-> Notacin Posfija-> Operado (+) se encuentra despus de los operandos
Recursin: sirve para verificar en qu punto se encuentra un programa cuando tiene
procedimientos que se llaman a s mismos.
Se van cargando en la pila las instrucciones que llaman al procedimiento, y cuando el
procedimiento retorna se va descargando en una secuencia LIFO hasta que vuelva a la
primera llamada y la pila quede vaca. Cada invocacin al procedimiento necesita ser
regresada.
Material elaborado por la Prof. Paola Pea
Estructura de Datos y Archivos Clase N 4
5

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Ordenacin: consiste en un mtodo para cambiar la disposicin de los elementos de una


estructura, segn determinadas caractersticas, dicho mtodo se ver con mayor detalle en
una unidad posterior.
Otras aplicaciones
Correspondencia de parntesis: sirve para verificar si cada parntesis tiene su par, y que
estn anidados correctamente.
Cuando se encuentra un parntesis izquierdo, se lo mete en la pila, y cuando se encuentra
un parntesis derecho, se sacan de la pila ste y al que cierra (par correspondiente).
Si al terminar la cadena, la pila no est vaca, significa que hay un parntesis que no cierra, y
si al encontrar un parntesis derecho la pila est vaca, significa que ste no cierra un
parntesis izquierdo.
El nmero de elementos de la pila, indica la profundidad de anidamiento.
Ejemplo5: Pila para anlisis de correspondencia de parntesis
If ((a=b) and ((a>c) or (d<f))) then.
Paso
Pila

1
(

2
((

3
((=)

4
((

5
(((

6
((=)

7
(((

8
((=)

9
((=)

10
(=)

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
6

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

La clase Pila
La clase pila tiene atributos y mtodos. Los atributos son la coleccin de elementos y el
TOPE. Los mtodos, por otra parte, son todas aquellas operaciones analizadas en la seccin
anterior, Pila_Vacia, Pila_Llena, Inserta_Pila, Elimina_Pila.
Algunos lenguajes de programacin como por ejemplo los OOP, 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 mtodos.
Ejemplo 6: Clase Abstracta Pila
TOPE numrico
Datos = Arreglo[1..Max]
Crea_Pila
Pila_Vacia()
Pila_Llena()
Tope_Pila()
Inserta_Pila()
Elimina_Pila()

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
7

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Ejemplo 7: Definicin y desarrollo en pseudocdigode procedimientos de la Clase Pila.


Declaracin e inicializacin de constante
MAX numrico
MAX = 10
Clase Pila
Tope numrico
Dato arreglo[1..MAX]
Crea_Pila
Pila_Vacia()
Pila_Llena()
Tope_Pila()
Inserta_Pila()
Elimina_Pila()
Fin clase
P = Clase Pila
procedimiento Crea_Pila(P)
P.Tope= 0
fin procedimiento
funcion Pila_Vacia (P)
Si P.Tope = 0
Devolver verdadero
Sino
Devolver Falso
fin si
fin funcion
funcin Pila_Llena (P)
Si P.Tope = P.Max
Devolver Verdadero
Sino
Devolver Falso
fin si
fin funcion

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
8

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

funcionTope_Pila (P)
si P.Pila_Vacia = Verdadero
error de Desbordamientos o - Pila Vaca
Devolver 0
sino
devolver P.Tope
fin si
fin funcion
procedimiento Inserta_Pila(Dato, P)
si P.Pila_Llena = Verdadero
error Desborda miento o Pila llena
sino
P.Tope = P.Tope + 1
P[Tope] = Dato
Fin Procedimiento
Procedimiento Elimina_Pila ( P, Dato )
Si P.Pila_Vacia = Verdadero
error Subdesbordamiento o Pila Vaca
sino
Dato = P[Tope]
P.Tope=P.Tope - 1
fin si
fin procedimiento
Ejemplo 8: Implementacin de clase Pila a base de Vectores con Java
// OPERACIONES PBLICAS
// void apilar(x) ->Inserta x
// voiddesapilar() ->Elimina el ltimo elemento insertado
// Objectcima() ->Devuelve el ltimo elemento insertado
// booleanesVacia() ->Devuelve true si vaca, sino false
// void vaciar() ->Elimina todos los elementos
// ERRORES: cima o desapilar sobre la pila vaca

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
9

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

public interface IPila {


voidapilar(Object x);
voiddesapilar() throws Exception;
Object cima() throws Exception;
booleanesVacia();
void vaciar();
}
importjava.util.*;
public class PilaVec implements IPila {
private Vector p;
privateintcimaDePila;
static final int CAPACIDAD_POR_DEFECTO = 10;
publicPilaVec() {
p = new Vector(CAPACIDAD_POR_DEFECTO);
cimaDePila = -1;
}
publicbooleanesVacia() {
return (cimaDePila == -1);
}
publicvoid vaciar() {
cimaDePila = -1;
}
public void apilar(Object x) {
if (++cimaDePila == p.size()) p.add(x);
elsep.set(cimaDePila, x);
}
public void desapilar() throws Exception {
if (esVacia()) throw new Exception("pilavaca");
cimaDePila--;
}
public Object cima() throws Exception {
if (esVacia()) throw new Exception("pilavaca");
returnp.get(cimaDePila);
}
}
Observacin: Una interface en Java es una coleccin de mtodos abstractos y propiedades. En ellas se
especifica qu se debe hacer pero no su implementacin. Sern las clases que implementen estas interfaces
las que describan la lgica del comportamiento de los mtodos.

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
10

UNIVERSIDAD AUTNOMA DE ASUNCIN


Facultad de Ciencias y Tecnologas
Departamento de Informtica

Fuentes bibliogrfica o webliografia


Cair, Osvaldo/Guardati, Silvia (2006). Estructura de Datos. 3ra Edicin.
McGraw-Hill Interamericana Editores. S.A. de C.V.
Cdigo: 970-10-5908-5
http://quegrande.org/apuntes/EI/2/Alg/teoria/07-08/tema_2.1_-_pilas,_colas_y_listas.pdf

Material elaborado por la Prof. Paola Pea


Estructura de Datos y Archivos Clase N 4
11

Você também pode gostar