Escolar Documentos
Profissional Documentos
Cultura Documentos
Definicin: Estructura de datos lineal donde los elementos pueden ser aadidos o removidos solo por un extremo. Trabajan con filosofa LIFO (Last In- First Out ). Ejemplos:
Pila de platos Pila de discos Pila de llamadas a funciones Pila de recursion Pila de resultados parciales de formulas aritmticas, etc.
Ejemplo
Insertar Inicio: A: Insertar B: Insertar C: Eliminar elemento
C B B A
Tope
B A
Tope
A
Tope -1
Tope
A
Tope
REPRESENTACIN DE PILAS:
Usando arreglos: Define un arreglo de una dimensin (vector) donde se almacenan los elementos.
TOPE: Apunta hacia el elemento que se encuentra en el extremo de la pila. (inicialmente es 0).
interface IPila { public boolean llena(); public boolean vacia(); public void push (int elem); public int pop(); }
public class Stack { private Vector items; public Stack() { items = new Vector(10); } public Object push(Object item){ items.addElement(item); return item; } public synchronized Object pop(){ int len = items.size(); Object obj = null; if (len == 0) throw new EmptryStackException(); obj = items.elementAt(len-1); items.removeElementAt(len 1); return obj; } public boolean isEmpty() { if (items.size == 0) return true; else return false; } }
Aplicaciones de Pilas
EXPRESIONES ARITMETICAS:
Una expresin aritmtica contiene constantes, variables y operaciones con distintos niveles de precedencia.
OPERACIONES :
^ potencia */ multiplicacin, divisin +,- suma, resta
NOTACIONES:
NOTACION INFIJA: Los operadores aparecen en medio de los operandos. A + B, A 1, E/F, A * C , A ^ B , A + B + C, A+B-C NOTACION PREFIJA: El operador aparece antes de los operandos. + AB, - A1, /EF, *AC, ^AB, ++ABC, +-ABC
NOTACION POSTFIJA: El operador aparece al final de los operandos. AB+, A1-, EF/, AC*, AB^, AB+C+, AB+C-
2.-EVALUAR LA EXPRESION POSTFIJA: usar una pila para mantener los resultados intermedios cuando se evala la expresin en notacin posfijo.
Ejemplos
Convertir las siguientes expresiones infijas a posfijo A +B*C-D ABC*+DA * ((B-C) / 2) ABC-2/* ((X-Z)*(Y+W))/X+Y XZ-YW+*X/Y+
Ejemplo
Insertar Inicio: A:
+
Tope 0
Tope
+
Tope
Tope
Tope 0
Expresin Postfija= A B C * + D -
2. Si es un operador:
1. Obtener dos operandos de la pila de valores (el primero en extraerse es tomado como el segundo operando, y el segundo es como el primero) 2. Aplicar el operador 3. Almacenar el resultado en la pila de valores Nota: Al finalizar el recorrido, el resultado estar en la pila de valores.
Ejemplo
Expresin Postfija= A B C * + D Insertar Inicio: A: Insertar B: Insertar C: Eliminar elemento
C B B A
Tope
A
Tope 0
Tope
A
Tope
A
Tope
Aplicaciones de Pilas
Funciones Recursivas
Las pilas pueden ser usadas para implementar la recursin en programas. Una funcin o procedimiento recursivo es aquel que se llama a si mismo. Ejemplos:
Factorial Nmeros de Fibonacci Torres de Hanoi Algoritmos de Ordenamiento de datos Etc.
Aplicaciones de Pilas
Recursion
// Funcion factorial public static int factorial(int n) { if (n<=1) return 1; else return n*factorial(n-1); }
// Funcion fibonacci public static int fib(int n) { if (n==1) return 0; else if (n==2) return 1; else return fib(n-1)+fib(n-2); }
Aplicaciones de Pilas
Control de secuencia de programas.
Las pilas son requeridas para implementar el control de flujo de ejecucin de un programa con subprogramas (funciones, procedimientos o mtodos).
Subprogramas recursivos o no recursivos Existen llamadas a ejecucin de subprogramas. Un subprograma se ejecuta completamente antes de retornar al punto donde fue llamado.
Aplicaciones de Pilas
Control de secuencia de programas.
// Programa Principal class Principal{ public static void proceso1(){ System.out.println(proceso1); proceso2(); } public static void proceso2(){ System.out.println(proceso2); } public static void main(String[] args){ proceso1(); proceso2(); } }
Method Summary bool empty() ean Tests if this stack is empty. E peek() Looks at the object at the top of this stack without removing it from the stack. E pop() Removes the object at the top of this stack and returns that object as the value of this function. E push(E item) Pushes an item onto the top of this stack. int search(Object o) Returns the 1-based position where an object is on this stack.