07-10-2013
Unidad 2
Pilas o colas LIFO
Estructuras de Datos
Estáticas (STACKS)
Introducción Definición de Pila
Estudio del TAD Pila:
◦ Definición de la estructura de datos e Grupo ordenado de elementos
identificación de su conjunto de operaciones
◦ Aplicaciones
homogéneos al cual se le puede
◦ Tipos de implementaciones agregar o eliminar elementos sólo
por uno extremo.
Característica: Estructura de datos de El grupo es ordenado ya que están
acceso restrictivo a sus elementos en una particular secuencia que
depende de como se agregaron los
elementos
1
07-10-2013
Características Ejemplos en la vida
Los elementos se eliminan en orden
inverso al que se insertaron
El último elementos que se agrega en
la pila es el primero en salir
(LIFO: Last In First Out)
Ejemplos Computacionales Características
Historial de páginas visitadas en un La representación gráfica típica:
navegador web. El elementos superior se
llama TOPE
D
No se pueden extraer los C
Secuencia deshacer un editor u otra elementos C, B y A sin B
aplicación similar antes extraer D A
El uso de las pilas es independiente de
la implementación interna
2
07-10-2013
Ejemplo de Aplicación
Operaciones Elementales
Operaciones Elementales
Insertar o agregar un elemento a la Pila:
PUSH
push push push pop push
◦ NO existe limite o restricción para
agregar elementos: Pila
vacía
crece indefinidamente
Quitar un elemento de la Pila: POP
◦ Sacar o desempilar
Mas Operaciones Tarea 4
Comprobar si la pila está vacía.
◦ Operación necesaria para saber si se Crear especificación informal del TAD
pueden eliminar elementos PILA según las operaciones descritas
◦ NO se puede eliminar de una pila vacía anteriormente
Determinar el elemento en el tope de Idear otra operación que podría
la pila sin removerlo considerarse fundamental
Idear operaciones de más alto nivel
que se basen en las elementales
3
07-10-2013
Tarea 5: Ejercicios con Pilas
Dada las operaciones básicas descritas Implementación en C
en el TAD pila, definir operaciones para:
◦ Contar la cantidad de elementos de una pila
◦ Imprimir los elementos de una pila
Como incorporar pilas a
◦ Eliminar el último elemento de la pila un Lenguaje de programación
◦ Eliminar el n-ésimo elemento de la pila
◦ Invertir una pila
Tipos de Implementaciones Consideraciones básicas en la
implementación
Las pilas son estructuras de datos
fundamentales NO se pueden extraer datos de una pila
No están definidas en los Lenguajes vacía
de Programación como los arreglos ◦ Por tal motivo se necesita una función que
Las pilas se pueden implementar compruebe si una pila está vacía
mediante:
Si la pila se implementa con tamaño fijo,
◦ Arreglos (implementación estática)
se puede llenar
◦ Listas Enlazadas (implementación
dinámica) ◦ Se necesita una función que compruebe si una
pila está llena
◦ A esto se le conoce como desbordamiento de
pila (stack overflow).
4
07-10-2013
Operaciones a implementar Más consideraciones de
implementación
Se deben diseñar funciones de
◦ push : Agrega un elemento a la pila La codificación de una pila requiere
◦ pop : quita un elemento de la pila equilibrio:
◦ pilavacia: Comprobar si la pila está vacía
◦ Si la longitud máxima de la pila es grande
◦ pilallena: Comprobar si la pila está llena puede gastar mucha memoria
◦ vertope: Conocer el valor del elemento
◦ Si la longitud máxima tiene un valor muy
que está en el tope de la pila
pequeño, se producirán desbordamientos
frecuentes
Requisitos
Se necesita un arreglo
Implementación con Se limita el máximo número de
arreglos elementos que la pila puede contener
(tamaño del arreglo)
Se necesita una variable numérica,
TOPE que indique la posición del último
elemento colocado en la pila.
5
07-10-2013
Definición Función push
Usando estructuras en C se puede usar una Para agregar el dato entero d a la pila p
sola variable: void push (pila *p, int d)
#define MAXPILA 100 { p->tope = p->tope+1;
typedef struct p->dato[p->tope] = d;
{ int dato[MAXPILA]
int tope; }
} pila;
Consideración: Si tope es igual a MAXPILA
pila p; no se puede insertar (push), la pila está
llena (overflow)
MAXPILA es el número máximo de elementos
Componente tope: indica posición del elemento en ¿Cuándo se hace esa validación?
el tope
Función pop Tarea 6
Quitar el elemento del tope de la pila
int pop (pila *p) Crear las implementaciones para las
{ int d; funciones faltantes
d=p->dato[p->tope];
Ahora que las operaciones elementales de
p->tope=p->tope-1; pilas existen como funciones. Crear un
return(d); programe en C con funciones en C:
} ◦ Imprimir el tope de una pila Estas funciones
Consideraciones: ◦ Imprimir los elementos de una pila Están basadas
No se puede quitar elementos de una pila vacía En las funciones
◦ Invertir una pila
¿Cómo se sabe si una pila está vacía? elementales
◦ Duplicar una pila p en la pila q.
¿Cuándo comprobar ese estado?
◦ Intercambiar valores entre dos pilas
6
07-10-2013
Componentes anidados
Compiladores: Análisis sintáctico de
Aplicaciones un lenguaje de programación
◦ Componentes que se pueden anidar: for,
if, while
Expresiones correctas con paréntesis
Donde se usan o para que sirven
◦ Ejemplo:
(xx(xx())x)
[](){}
([]{xxx}xx()xxx)
◦ Mal formada: (xx])
Balanceo de paréntesis Expresiones matemáticas
Notaciones polaca: infija, postfija y
Balance correcto de paréntesis: prefija
Ejemplo: ◦ Infija: El operador está entre los
7—((X*((X+Y)/J-3))+Y/(4-2.5)) operandos A+B
◦ Postfija: Operador después de los
Reglas:
operandos AB+
◦ 1. Igual cantidad de paréntesis izquierdos
◦ Prefija: Operador antes de los operandos
y derechos
+AB
◦ 2. Cada paréntesis derecho está precedido
por el correspondiente paréntesis izquierdo
7
07-10-2013
Evaluación de Expresión aritmética Expresión aritmética: ventajas
Evaluación de la expresión A+B*C es como
A+(B*C)
A+(BC*) Ventaja de notación postfija: NO
A(BC*)+ requiere paréntesis
ABC*+ La evaluación de expresiones postfija
Regla importante orden de precedencia de usando una pila:
los operadores ◦ Cada operando encontrado se pone en la
◦ Exponentes ($) pila
◦ Multiplicaciones (*) y Divisiones (/)
◦ Cuando es operador los operandos son los
◦ Sumas (+) y restas (-) dos superiores.
Se desempilan ambos, se realiza la operación y
el resultado se apila
Tarea 7 Más Aplicaciones
Crear programas para:
◦ Balancear paréntesis en una expresión Llamada a subprogramas
◦ Evaluar expresión en notación polaca ◦ En cada llamada se guarda el estado de las variables
postfija del programa en una pila.
◦ Cuando se acaba la ejecución del subprograma, se
recuperan los valores almacenados en la pila y
continuar la ejecución del programa en el punto que
fue interrumpido
Recursividad