Está en la página 1de 8

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

También podría gustarte