![]() |
![]() |
|||||
![]() |
Articulos
|
![]() |
||||
![]() |
![]() |
|||||
![]() |
![]() |
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. 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 Pila
= Class 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. Type
Tipo_elemento = ...;
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]() |
|||||
![]() |
![]() |
![]() |
||||
![]() |
![]() |
|||||
Las marcas que aparecen en
esta pagina pertenecen a sus respectivas empresas
|
||||||
Todos los derechos reservados
- Copyrigth 2001
|
![]() |