UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 PILAS 1 INTRODUCCIÓN El presente capítulo proporciona conceptos fundamentales de pilas la cual es categorizada como estructura de datos lineal con operaciones propias que las distinguen de manera precisa en tal sentido definiremos la respectiva clase. 2 PILA “Una pila es una estructura de datos en la cual el acceso está limitado al elemento más recientemente insertado” [7]. En sí, se puede insertar o eliminar elementos únicamente por un extremo(tope). Esto hace que los elementos de la pila sean eliminados en un orden inverso al que se insertaron. Así también, se afirma que una pila es una estructura del tipo LIFO (Last Input First Output), lo cual significa que el ultimo en ingresar será el primero en salir. Asimismo hay autores quieren afirman que las pilas pertenecen al grupo de estructuras de datos lineales puesto que sus elementos ocupan lugares sucesivos en la estructura” [10]. En la Figura No. 1 se pueden observar algunos ejemplos de pilas. Figura No. 1. Ejemplos de Pilas a) Pila de Archivadores b) Pila de CD’s y c) Pila de Platos a) b) c) 2.1REPRESENTACIÓN GRÁFICA DE UNA PILA Las pilas pueden implementarse mediante el uso de: Arreglos Listas enlazadas 2.1.1 PILA EN UN VECTOR La representación gráfica depilas en vectores se muestra en la Figura No. 2. Donde el primer elemento de la pila ‘H’ ocupa la posición 1, el segundo elemento de la pila ‘O’ ocupa la posición 2 y así sucesivamente. UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 Figura No 2. Representación de la Pila Z con 4 elementos v 6 5 4 3 2 1 max A L O H tope Z Donde: max define la capacidad máxima del vector. tope denota el extremo por donde se opera la pila. v[]vector donde se almacena los elementos de la pila. En sí, la variable tope no solo permite el tratamiento de la pila por un solo extremo, sino también proporciona el número de elementos que dicha pila. 4.2.1.2 PILA EN UNA LISTA ENLAZADA Las pilas pueden implementarse también estructuras dinámicas como listas enlazadas (Capitulo 8). Tal como muestra el ejemplo de la Figura No. 3 Figura No. 3 Pila H en listas enlazadas H p H O L A Donde: p representa el tope por donde se manipula a la pila Es oportuno hacer notar que en el presente libro implementaremos pilas en vectores. 4.2.2OPERACIONES EN UNA PILA Entre las operaciones básicas de una pila se tienen: Adicionar un elemento (push) (ver Figura No. 4) Figura No. 4. Adiciona el elemento S a la Pila Z v S 6 5 4 3 2 1 Z max S A L O H tope UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 Eliminar un elemento (pop) (ver Figura No. 5) Figura No. 5. Elimina el elemento S de la Pila Z v Z 6 5 4 3 max A L 2 O 1 H tope 2.3 ESTADOS ADICIONALES DE UNA PILA Reflejan los distintos momentos de una pila: inicial (ver Figura No. 6), llena (ver Figura No. 7 y vacía (ver Figura No. 8). Estado inicial Figura No. 6. Estado inicial de la Pila Z v Z 6 5 4 3 2 1 tope=0 max Pila llena Figura No.7. Pila Q llena v Q 6 5 4 3 2 1 F N A L O H max Pila vacía Figura No. 8. Pila R vacía v 6 5 4 3 2 1 R max tope=0 2.5 DEFINICION DE LA CLASE PILA Considerando la representación de las pilas en arreglos definimos la clase Pila representada gráficamente por el diagrama de clase que se muestra en la Figura 9. UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 Diagrama de clase que contiene atributos tales como la capacidad de la pila (max), además del puntero (tope) que define a la pila en sí, además se define el arreglo donde se almacena los elementos de la pila (v[]). Con el objeto de construir código que sea independiente del tipo de datos se decide que la clase Pila sea una clase genérica razón por la que los elementos de la pila son definidos de tipo Object lo que posibilita que tales elementos sean de distintos tipos: enteros, reales, caracteres, cadenas, etc. Figura No. 9 Definición de la clase Pila Pila private: int tope,max Object v[100] Pila(int cp) void adicionar(Object ele) Object eliminar() boolean esLLena() boolean esVacia() void mostrar() int nElem() void vaciar(Pila B) … Finalmente, con el propósito de completar la implementación del TAD Pila a continuación se proporciona el código fuente en Java. IMPLEMENTACIÓN DEL TDA Pila package Pila; public class Pila { private int tope,max; Object v[]=new Object[100]; Pila(int cp) {tope=0;max=cp;} boolean esLlena() {if(tope==max) return true; else return false; } boolean esVacia() { if(tope==0) return true; else return false; } void adicionar(Object ele) { if(!esLlena()) {tope++;v[tope]=ele;} else System.out.println("Pila llena"); } Object eliminar() {Object dato; if(!esVacia()) {dato=v[tope];tope=tope-1;} UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 else {System.out.print("Pila vacia");dato=null;} return dato; } void mostrar() { Pila aux=new Pila(max); Object ele; while(!esVacia()) aux.adicionar(eliminar()); while(!aux.esVacia()) { ele=aux.eliminar(); System.out.print(ele); adicionar(ele); } } void mostrarCD() { Pila aux=new Pila(max); CD ele; while(!esVacia()) aux.adicionar(eliminar()); while(!aux.esVacia()) { ele=(CD)aux.eliminar(); ele.mostrar();System.out.println(); adicionar((Object)ele); } } int nElem() {return tope;} void vaciar(Pila B) { while(!B.esVacia()) adicionar(B.eliminar()); } } 2.6 PILAS EN JAVA El presente texto ha proporcionado conceptos fundamentales sobre pilas, construyéndose la clase y métodos respectivos. Sin embargo con el propósito de aplicar la propiedad de reutilización que tiene la programación orientada a objetos a continuación se describe a la clase Stack(Pila) que se incorpora en Java como parte de su paquete de utilidades java.util. En sí, la clase Stack extiende la clase Vector del Java y es una de las posibilidades para implementar la estructura de datos pila y que entre sus métodos importantes se tienen: Método push(). Permite adicionar el elemento ítem en la pila. Formato: push(tipo ítem) Método pop(). Permite sacar el elemento de la pila que está en el tope. Formato: UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 tipo pop() Método peek(). Permite mostrar el elemento del tope de la pila Formato: tipo peek() Método int search(tipo ítem).Permite determinar si ítem está en la pila, en tal caso devuelve la posición del ítem en la pila. El elemento del tope ocupa la posición 1 si el elemento no se encuentra en la pila devuelve -1. Formato: boolean search(tipo ítem) Método empty(). Permite verificar si una pila está vacía. Devuelve true si la pila está vacía y false si no está vacía. Formato: boolean empty() 2.7 APLICACIONES Las pilas son estructuras de datos que se utilizan en diversos tipos de problemas: En los compiladores (parsers: reconocedores sintácticos de los compiladores). Tratamiento de expresiones aritméticas. Previamente es conveniente recordar ciertos conceptos relacionados a la representación de expresiones las cuales pueden representarse de tres modos ver Tabla No.1. Tabla No. 1 Tipos de notaciones de expresiones aritméticas Expresión Tipo Descripción A+B AB+ +AB Infija Posfija Prefija Porque el operador (+) está entre los operandos A y B. Porque el operador (+) esta después de los operandos A y B Porque el operador (+) esta antes de los operandos A y B Muchos autores afirman que la ventaja de utilizar expresiones en notación posfija o prefija radica en que no son necesarios los paréntesis para reflejar el orden de operación pues este queda establecido por la ubicación de los operadores respecto de los operandos. Por otro lado, también menciona que para convertir una expresión en notación infija en su correspondiente expresión en notación posfija o prefija deberán cumplirse algunas condiciones (ver Problema No. 2): Identificar operadores a manejar (según prioridad) Los operadores de más alta prioridad se ejecutan primero. UNIVERSIDAD MAYOR DE “SAN ANDRES” CARRERA DE INFORMATICA ESTRUCTURA DE DATOS Y ALGORITMOS PILAS RESPONSABLE: LIC. VICTORIA HURTADO CERRUTO GESTION:1/2022 Los paréntesis tendrán más prioridad que cualquier operador. Llamadas a subprogramas. En este caso la aplicación de pilas permiten: Guardar la dirección del programa (subprograma) desde donde se hizo la llamada a otros subprogramas para regresar y seguir ejecutándolo. Permiten guardar el estado de las variables en el momento que se hace la llamada, para poder seguir ocupándolas al regresar del subprograma. Recursión, Se refiere a la utilización de pilas en procesos recursivos