DELPHI MANIA
www.delphimania.com.ar
 
 
 
  Delphi Mania  >> Articulos >> Pilas
 
   
   
   
   
 
   
   
   
   
   
     
     
     
     
     
     
     

Pilas


       Una Pila es una estructura de elementos en la que todas las operaciones de inserción y eliminación de elementos se hace por uno de los extremos de la misma, al que se lo denomina tope.

        A las Pilas se las puede considerar un tipo especial de Listas en la que en particular los elementos almacenados en su interior cumplen siempre una regla que se denomina LIFO ( esta sigla proviene del inglés: Last in, First out) que significa que el último elemento que fue almacenado en la pila será el primero en ser eliminado de la pila.

        Este tipo de estructura se las puede encontrar en numerosos ejemplos de nuestra vida real y también se las utiliza para resolver una gran variedad de problemas de la informática. Por ejemplo, Supongamos que tenemos un editor de caracteres, y queremos implementarle la opción DESHACER. Para ello, esta operación debe ir registrando los cambios que se van efectuando guardando los cambios en el sentido en que los fuimos realizando pero cuando querramos deshacer un cambio seguramente vamos a querer deshacer el último que hemos realizado. Nuestro problema se podrá resolver si guardamos los cambios en una pila y cuando queremos volver un paso atrás en nuestros cambio solo debemos recuperar el elemento que está en el tope de la pila y ejecutar la operación que restablece los cambios realizados.

        Cualquier implementación que hagamos de una pila, estas tendrán operaciones en común y son aquellas que nos permiten insertar y eliminar elementos, conocer cual es el elemento que se encuentra al tope de la pila, otra que nos permita saber si una pila contiene algún elemento y una operación de destrucción de la pila (que elimine todos los elementos que pueda tener la pila y nos devuelva una pila vacía).

        Si queremos utilizar una pila en alguno de nuestros proyectos lo que es más recomendable para nuestra seguridad es implementar la pila mediante un TAD.
Cuando estemos desarrollando el TAD Pila, nos encontraremos ante otra disyuntiva, esta es que estructura utilizaremos para almacenar los elementos de tal modo que más se adapte a los requerimientos de nuestro problema.

        Hay dos formas básicas de realizar la estructura que almacenará los elementos de la pila, eston son mediante arreglos o con punteros.

Implementación de una pila con arreglos:

        En esta realización utilizaremos un arreglo para guardar los datos de la pila. También debemos tener en cuenta que debemos registrar información adicional que nos permita conocer cual es la cantidad de elementos en la pila y cual es el número máximo de elementos que vamos a poder almacenar en esta.

        Para poder llevar a cabo este modelo vamos a tener que crear una clase Pila a la cual le definiremos tres variables internas para poder guardar la información necesaria para el funcionamiento de la pila. Por lo tanto la definición en Delphi nos quedará de la siguiente manera:

                Const maxCantidad = ...; //aquí irá el número máximo de elementos que
                                                       //podrá contener la pila
                Type tipo_Dato = integer; //Este será el tipo de los datos de la pila

                          Pila = Class
                            private
                              CantActual : word; //guarda el número de elementos que
                                                           //contiene la pila
                              elementos : array [1 .. MaxCantidad] of Tipo_Dato;
                            public
                             {métodos para el manejo de la pila}
                          end;

        De esta manera lo único que vamos a poder hacer con la pila son aquellas operaciones que nos permitan realizar los métodos que le definamos en la seccion Public de la clase pila.

        Este modelo de implementación nos ofrece una cierta ventaja respecto a otras implementaciones en lo referente al tiempo de acceso. Esta característica puede ser muy notada si tenemos que hacer muchos accesos a pila en poco tiempo. Sin embargo si la cantidad de lugares que reservamos, durante la definición de la clase, para guardar elementos es muy grande y luego almacenamos solamente unos pocos elementos en la pila, estaremos desperdiciando gran cantidad de memoria.

Implementación de una pila con punteros:

        Las representaciones de Listas que se pueden encontrar sirven para las realizaciones de Pilas, pues a las Pilas se las puede considerar un caso especial de Listas con sus operaciones.

        Las implementaciones de Pilas con punteros es sencilla pues las operaciones más usadas, las correspondientes a la inserción y eliminación de elementos, operan solo sobre el primer elemento de la estructura.

        Una realización basada en este modelo tiene una gran ventaja respecto a la implementación con arreglos y es que no hay un límite en el número máximo de elementos que pueden contener la pila.
Un ejemplo de realización coneste modelo sería:

                Type Tipo_elemento = ...;

                         TNodo = ^Nodo;

                         Nodo = TObject
                            Dato      : Tipo_elemento;
                            siguiente : TNodo;

                           // métodos del objeto Nodo

                          end;

                          Pila = Class
                            private
                              elementos : TNodo;
                              nroElementos : integer;
                            public
                             //métodos para el manejo de Pilas
                          end;


        En ambos modelos de realización, con arreglos y punteros, puede verse que existe una gran similitud entre Listas y Pilas, lo que ocurre es que una pila también puede considerarse como un caso especial de Listas donde los únicos cambios que hay que tener en cuenta es que la inserción y eliminación de elementos siempre se hacen por un mismo extremo de la estructura.

 
 
 
   
DELPHI MANIA  
 
Las marcas que aparecen en esta pagina pertenecen a sus respectivas empresas
Todos los derechos reservados - Copyrigth 2001