Sei sulla pagina 1di 47

PILAS

ESTRUCTURAS DE DATOS
2006

Prof. Ing. M.Sc. Fulbia Torres


UNIDAD II
ESTRUCTURAS DE DATOS

PILAS

 Definición.
 Operaciones.
 Implementación secuencial.
 Aplicaciones.
 Ejemplos. Ejercicios.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
DEFINICIÓN

Una PILA (o stack) es una estructura ordenada y homogénea, en la


que podemos añadir o quitar elementos solamente en un extremo de

la estructura. El extremo donde se realizan estas operaciones se

denomina habitualmente TOPE.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
DEFINICIÓN

Se dice que es una estructura ordenada, porque sus elementos se


sitúan siguiendo un cierto orden, no que estén ordenados en función
de su valor.

Se dice que se trata de una estructura homogénea, porque todos sus


elementos son del mismo tipo, pueden ser tanto simples (enteros,
reales,…) como compuestos (registros, vectores, ...)

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
DEFINICIÓN

Dada una pila P, formada por los elementos a, b, c, ..., k


(P=(a,b,c,...,k)), se dice que a, que es el elemento más inaccesible de
la pila, está en el fondo de la pila (bottom) y que k, por el contrario, el
más accesible, está en el tope.

Las restricciones definidas para la pila implican que si una serie de


elementos A, B, C, D, E, F se añaden, en este orden, a una pila
entonces el primer elemento que se elimine (borre) de la estructura
deberá ser F. Por tanto, resulta que el último elemento que se inserta
en una pila es el primero que se borra. Por esa razón, se dice que la
pila sigue una politica de tipo LIFO (Last In First Out, el último que
entra es el primero que sale).
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
DEFINICIÓN

Un ejemplo típico de pila lo constituye un montón de platos: Cuando


se quiere introducir un nuevo plato, éste se coloca en la posición más
accesible, encima del último plato. Cuando se agarra un plato, éste
se extrae, igualmente, del punto más accesible, el último que se ha
introducido.

Otro ejemplo sería una caja llena de libros. Sólo podemos ver cuál es
el libro que está más arriba en la caja, y si ponemos o agarramos un
libro, sólo podremos actuar sobre este primer libro. No podemos
siquiera saber el número total de libros guardados en la pila. Sólo
sabremos el número de elementos de la pila de libros si previamente
los sacamos hasta vaciar la caja.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
CARACTERÍSTICAS

 Una PILA es un objeto dinámico que cambia constantemente.

 Son muy utilizadas en programación para evaluar expresiones,


reconocer lenguajes, recorrer árboles y simular procesos recursivos.

 Sobre una pila se pueden realizar operaciones que permiten


acceder y manipular los elementos almacenados en la misma.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
OPERACIONES

Veamos cual es la especificación formal del tipo de datos


abstracto pila:

TAD: pila

Operaciones:

CONSTRUCTORA

Crea una pila vacía.


 CrearPila: Pila
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
OPERACIONES

MODIFICADORAS

Dada una pila p y un valor e, del tipo base, devuelve una nueva pila
formada al apilar en p el nuevo elemento sobre la posición indicada por
el valor del tope.
 AdicPila: Pila x tipo_base Pila

Dada una pila, elimina el elemento indicado por el valor del tope y
devuelve la nueva pila.
 ElimPila: Pila Pila

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
OPERACIONES

ANALIZADORAS
Devuelve el valor del elemento que está apuntado por el tope.
 InfoPila: Pila tipo_base

Devuelve el valor verdadero si la pila está vacía y falso en caso


contrario.
 PilaVacia: Pila lógico

Devuelve el valor verdadero si la pila está llena y falso en caso


contrario.
 PilaLlena: Pila lógico

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
OPERACIONES

DESTRUCTORA

Destruye la pila retornando toda la memoria ocupada.

 DestruirPila: Pila

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
OPERACIONES

Eliminar Adicionar

Tope

PILA

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

DEFINICIÓN

# define MAXELEM número máximo de elementos

struct tipopila {
int tope;
tipo_base elementos [MAXELEM];

}
struct tipopila p;

Ing. M.Sc. Fulbia Torres


Asignatura:
ING. MSc.Estructuras de Datos
FULBIA TORRES
ASIGNATURA: ESTRUCTURAS
Barquisimeto 2006 DE DATOS
BARQUISIMETO 2005
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Con esta definición de Pila las operaciones asociadas especificadas


en el TAD quedarían del siguiente modo:

Crea una pila vacía.

int CrearPila (struct tipopila *p)


{
return (*p).tope = -1;
}

Ing. M.Sc. Fulbia Torres


Asignatura:
ING. MSc.Estructuras de Datos
FULBIA TORRES
ASIGNATURA: ESTRUCTURAS
Barquisimeto 2006 DE DATOS
BARQUISIMETO 2005
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Dada una pila p y un valor e, del tipo base, devuelve una nueva pila
formada al apilar en p el nuevo elemento sobre la posición indicada
por el valor del tope.

void AdicPila (struct tipopila *p, tipo_base valor)


{
if PilaLlena (p) { cout << "Pila Overflow \n";
exit (1);
}

else (*p).elementos[++ ((*p).tope) ] = valor;


}

Ing. M.Sc. Fulbia Torres


Asignatura:
ING. MSc.Estructuras de Datos
FULBIA TORRES
ASIGNATURA: ESTRUCTURAS
Barquisimeto 2006 DE DATOS
BARQUISIMETO 2005
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Dada una pila, elimina el elemento indicado por el valor del tope y
devuelve la nueva pila.

tipo_base ElimPila (struct tipopila *p)


{
if PilaVacia (p) { cout << "Pila Underflow \n";
exit (1);
}
return ((*p).elementos[((*p).tope)--]);
}

Ing. M.Sc. Fulbia Torres


Asignatura:
ING. MSc.Estructuras de Datos
FULBIA TORRES
ASIGNATURA: ESTRUCTURAS
Barquisimeto 2006 DE DATOS
BARQUISIMETO 2005
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Devuelve el valor del elemento que está apuntado por el tope.

tipo_base InfoPila (struct tipopila *p)


{
if PilaVacia (p) { cout << "Pila Underflow \n";
exit (1);
}
else return ((*p).elementos[(*p).tope]);
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Devuelve el valor verdadero si la pila está vacía y falso en caso


contrario.

int PilaVacia (struct tipopila *p)


{
if ( (*p).tope == -1)
return 1;
else return 0;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Devuelve el valor verdadero si la pila está llena y falso en caso


contrario.

int PilaLlena (struct tipopila *p)


{
if ( (*p).tope == MAXELEM)
return 1;
else return 0;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos)

Destruye la pila retornando toda la memoria ocupada.

void DestruirPila (struct tipopila *p)


{
delete (p);
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Implementar una función que cuente y elimine de la pila todas las
ocurrencias del elemento entero val.

void EliminaOcurren(struct tipopila *p, int elem)


{
int val=0, cuenta=0; //declaración variables
struct tipopila paux; //pila auxiliar

CrearPila(&paux); //crea una pila auxiliar vacía


while (!PilaVacia(p))
{
val=ElimPila(p); //saca el elemento que está en el tope de la pila
//y lo almacena en val
if (elem==val) {cuenta++; //cuenta la ocurrencia y queda eliminado
cout<< "Eliminando";}

else AdicPila(&paux,val); //si no es igual lo agrega a la pila auxiliar


}

while(!PilaVacia(&paux)) //devuelve a la pila original los elementos de la pila auxiliar


{
val=ElimPila(&paux);
AdicPila(p,val);
}

cout<< " PILA "; cout << endl; MosElem(p); cout << "\n"; //muestra los elementos
}
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

DEFINICIÓN
# define MAXELEM número máximo de elementos
typedef tipo tipo_base;
class Pila
{
private:
int tope;
tipo_base elementos[MAXELEM];
public:
Pila( )
{
tope = -1; // condición de pila vacía Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
} Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

CONTINUACIÓN DEFINICIÓN

void Pila :: AdicPila (tipo_base valor); //operación Modificadora


tipo_base Pila :: ElimPila(); //operación Modificadora
tipo_base Pila :: LimpiarPila(); //operación Modificadora
tipo_base Pila :: InfoPila(); //operación Analizadora
bool Pila :: PilaVacia(); //operación Analizadora
bool Pila :: PilaLlena(); //operación Analizadora
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Agrega un elemento a la Pila.

void Pila :: AdicPila( tipo_base valor)


{
if PilaLlena () cout << "Pila Overflow \n”;

else elementos[++ tope ] = valor;


}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Elimina el elemento indicado por el valor del tope.

tipo_base Pila :: ElimPila()


{
if (PilaVacia()) { cout<<"Error: Pila underflow\n"; exit(1); }

else return elementos[tope--];


}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Pone el tope de la pila a su valor inicial.

void Pila :: LimpiarPila()


{
tope = -1;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Devuelve el valor del elemento que está apuntado por el tope.

tipo_base Pila :: InfoPila ()


{
if (PilaVacia()) { cout<<"Error: Pila underflow\n"; exit(1); }

else return elementos[tope];


}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Devuelve el valor verdadero si la pila está vacía.

bool Pila :: PilaVacia ()


{
return tope == -1;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
IMPLEMENTACIÓN ESTÁTICA (Mediante Arreglos) CON CLASES

Devuelve el valor verdadero si la pila está vacía.

bool Pila :: PilaLlena ()


{
return tope == MAXELEM -1;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
#include <iostream.h> //Verifica si una palabra es palindromo
#include <string.h>
#include "pilalineal.h"
typedef char tipo_base;

int main()
{
pilalineal p;
bool espal;
char pal[81];

cout << "Teclea la palabra verificar si es palindromo: " << endl;


cin.getline(pal,sizeof(pal));
for(int i=0; i<strlen(pal); )
{
char c;
c = pal[i++];
p.AdicPila(c);
}
espal = true;
for(int j=0; espal && !p.PilaVacia(); )
{
char c;
c = p.ElimPila();
espal = pal[j++] == c;
}
p.LimpiarPila();
if (espal) cout << "La palabra " << pal << " es un palindromo" << " \n";
else cout << "La palabra " << pal << " no es un palindromo" << " \n";

return 0;
}
PILA
APLICACIONES

 Llamadas a subprogramas.
 Correspondencia de paréntesis.
 Tratamiento de expresiones aritméticas.
 Recursividad.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

CORRESPONDENCIA DE PARÉNTESIS
Pasos:

 Se rastrea la cadena de elementos de izquierda a derecha.

 Cada vez que se encuentre un paréntesis izquierdo se mete en


la pila.

 Cada vez que se encuentre un paréntesis derecho se revisa el


contenido de la pila. Si está vacía entonces habremos
encontrado un paréntesis derecho que no cierra un paréntesis
izquierdo, y hay un error.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

CORRESPONDENCIA DE PARÉNTESIS

 Si la pila no está vacía se ha encontrado el par y solo se saca


de la pila.

 Si la pila no está vacía al terminar la cadena, entonces hay un


paréntesis izquierdo sin cerrar. Hacer Ejercicio

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS


Revisamos algunos conceptos:
 Dada la expresión A + B se dice que está en notación infija y su
nombre se debe a que el operador (+) está entre los operandos
(A y B).

 Dada la expresión AB+ se dice que está en notación postfija y


su nombre se debe a que el operador (+) está después de los
operandos (A y B).

 Dada la expresión + AB se dice que está en notación prefija y y


su nombre se debe a que el operador (+) está antes de los
operandos (A y B). Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Para convertir una expresión en notación polaca (post) o (pre),


deberán establecerse previamente ciertas condiciones:

 Solamente se manejaran los siguientes operadores ordenados de


mayor a menor según su prioridad de ejecución:

$ potencia
* / (multiplicación y división)
+ - (suma, resta)

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Continuación:

 Los operadores de más alta prioridad se ejecutan primero.

 Si hubiera en una expresión dos o más operadores de igual prioridad,


entonces se procesarán de izquierda a derecha, excepto en el caso de
la exponenciación, en donde se supone que el orden es de derecha a
izquierda.

 Las subexpresiones parentizadas tedrán más prioridad que cualquier


otro operador.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Ejemplo:
Convertir de infija a postfija:

A+B*C infija
A + BC* operando único
ABC*+
 (A + B) * C
 (A + b) * (C - D)
 A $ B * C - D + E / F / (G + H)
 (A + B) * (C $ (D - E) + F) - G
 ((A + B) * C - (D - E)) $ (F + G) Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Ejemplo:
Convertir de infija a prefija:

A+B*C infija
A + *BC operando único
+A*BC
 (A + B) * C
 (A + B) * (C - D)
 A $ B * C - D + E / F / (G + H)
 (A + B) * (C $ (D - E) + F) - G
 ((A + B) * C - (D - E)) $ (F + G) Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Reglas utilizando pilas (notación infija a postfija):

 Si el símbolo es un paréntesis que abre “(“ éste se mete en la


pila de operadores.

 Si el símbolo es un paréntesis que cierra “)” se saca de la pila


todo lo que exista hasta llegar al primer paréntesis que abra “(“.
Los operadores van a la salida, a medida que salen de la pila.
El paréntesis que abre “(“ se saca pero no va a la salida.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Continuación:

 Si el símbolo es un operador, entonces, si el operador en el tope de


la pila es de la misma o de mayor precedencia, dicho operador se
saca y va a la salida, continuando de esta manera hasta que el
primer paréntesis izquierdo o un operador de menor precedencia
se encuentre en la pila, Cuando esto ocurre, el operador en turno
se mete a la pila.

 Si el símbolo es un operando, éste se envía directamente a la


salida.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

TRATAMIENTO DE EXPRESIONES ARITMÉTICAS

Ejemplo: Infijo a postfijo.

((A + B) * C / D + E $ F) / G

( ( ( + ( * / / + $ /
( ( ( ( ( ( ( +
( (

Salida: A B + C * D / E F $ + G /

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

EVALUACIÓN DE UNA EXPRESIÓN POSTFIJA


 Cada operador en una cadena postfija hace referencia a los dos
operandos anteriores de la cadena (por supuesto, uno de estos dos
operandos puede ser el resultado de aplicar un operador anterior).

 Cada vez que se lee un operando se agrega a la pila.

 Cuando se encuentra un operador, sus operandos son los dos


elementos superiores en la pila, después se pueden remover estos dos
elementos, ejecutar la operación indicada sobre ellos y agregar el
resultado a la pila para que esté disponible como operando del
operador siguiente.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

EVALUACIÓN DE UNA EXPRESIÓN POSTFIJA

 Ejemplo:
ABC *+

oper1 oper2 pila


A
A,B
A,B,C
B C A,B*C
A B*C A + (B * C)

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
PILA
APLICACIONES

EVALUACIÓN DE UNA EXPRESIÓN POSTFIJA

 Ejemplo: A=6, B=3, C=1


631*+
símbolo oper1 oper2 valor pila
6 6
3 6,3
1 6,3,1
* 3 1 3 6,3*1
+ 6 3*1 9 6, 3
9

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
EVALUACIÓN DE UNA EXPRESIÓN PREFIJA

 Ejemplo: * + ab – cd

símbolo oper1 oper2 pila


* *
+ *,+
a *, +, a
b a b *, +, a, b
*, a + b
- *, a + b, -
c *, a + b, -, c
d *, a + b, -, c, d
d c *, a + b, -, c - d
a+b c-d (a + b) * (c - d)
PILA
EJERCICIOS PROPUESTOS

Capitulo de pilas

 Ejercicios pag. 85 : 2.1.1 todos, 2.1.3


 Ejercicios: pag. 95: 2.2.4, 2.2.8
 De infijo a postfijo pag. 115: 2.3.1 todas, 2.3.2 todas, 2.3.3
todas, 2.3.4
 Ejercicio 2.3.7, hacerlo también para postfija.
 Guia de ejercicios

Ing. M.Sc. Fulbia Torres


Asignatura:
ING. MSc.Estructuras de Datos
FULBIA TORRES
ASIGNATURA: ESTRUCTURAS
Barquisimeto 2006 DE DATOS
BARQUISIMETO 2005
GRACIAS POR SU
ATENCIÓN

HASTA LA PRÓXIMA
CLASE

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006

Potrebbero piacerti anche