Vous êtes sur la page 1sur 8

Pilas Las pilas son una estructura de datos que almacenan un conjunto de valores y el que las operaciones de adicin

(agregacin) y eliminacin de elementos se efectan siempre por el mismo extremo de la estructura, que en consecuencia causa que los primeros elementos en ser ingresados son los ltimos en ser eliminados, y por su puesto que los ltimos elementos en ser aadidos sern los primeros en ser eliminados. e!ido a este comportamiento a las pilas tam!i"n se les conoce como listas L#$% (Last #n, $irst %ut) ultimo en entrar primero en salir, o $#L% ($isrt #n, Last %ut) primero en entrar ultimo en salir. &ome en cuenta como ejemplo una pila de li!ros en la que un nuevo li!ro se pone encima de los otros y si usted va a quitar un li!ro de la pila procura retirar el que esta mas arri!a, que corresponde al ultimo que puso en la pila de li!ros. La estructura de datos pila no tiene un medio propio para almacenar los datos o elementos que la componen, por lo que dependen de otras estructuras para guardar sus datos. 'l mecanismo seguido para almacenar la informacin contenida en una pila se conoce como proceso de implantacin de la pila. (ara ello normalmente empleamos arreglos o listas enla)adas simples, con la novedad que la pila le da un tratamiento especial a las operaciones de insercin y eliminacin de datos en el arreglo o la lista segn sea el caso, de manera que dic*as operaciones se efectan por un mismo extremo de la estructura con la que se *a implantado la pila. La caracter+stica principal de una pila se le llama &ope o ,ima y *ace referencia al extremo por el cual se efectan las operaciones de insercin y eliminacin de elementos. 'l valor o elemento del tope adems representa al elemento que se *a de eliminar en la siguiente operacin de eliminacin. La segunda caracter+stica de una pila es el tamao, que determina la cantidad de elementos mximo que la estructura puede contener en un momento dado. e acuerdo a la cantidad actual de elementos contenidos en una pila, esta puede estar vac+a si no contiene elementos, llena si el nmero de elementos almacenados es igual al tamao mximo y claro esta un estado intermedio que no es ni vac+a ni llena y que no es de mayor importancia. 'n cuanto a las operaciones ms comunes que una pila de!e reali)ar tenemos .gregacin de nuevos elementos ('ncima del tope). 'liminacin de elementos ('lemento del tope). ,onsulta del elemento del tope.

'l estado actual de la pila determina la posi!ilidad de efectuar alguna de estas operaciones. .s+ para agregar un nuevo elemento, la pila no de!e estar llena y para eliminar o consultar el valor del tope la pila no puede estar vac+a. /in importar el mecanismo de implantacin de la pila, solo se da acceso al elemento del tope, de modo que por fuera de la estructura no *ay acceso a los dems elementos de la pila. La implementacin de las operaciones de una pila var+an en funcin de la estructura escogida para implantarla (ya sean arreglos o listas), pues el modo de representar el tope y el tamao de la estructura es diferente en am!os casos, siendo distinta tam!i"n la codificacin de las operaciones de agregacin y eliminacin de elementos.

(ara la implantacin con arreglos tenemos que el tope se representa con un nmero entero que indica la posicin en el arreglo del elemento que esta en la parte superior de la pila, siendo esta posicin el extremo por el cual se *acen las operaciones de agregacin y eliminacin de elementos. 'l tipo de datos representado por una pila esta definido por el tipo de datos con el que se declara el arreglo que se usa para implantarla, siendo el tamao de la pila el mismo esta!lecido para el arreglo. (ara una pila se espera que el tamao de la estructura no vari" en tiempo de ejecucin, aun cuando el arreglo sea dinmico y permita cam!iar su tamao. 'l tope para la pila puede ser el extremo i)quierdo o derec*o del arreglo. . continuacin ilustramos de forma grfica las operaciones con una pila considerando que tamao del arreglo es 01 y que el tope estar en el extremo derec*o de la estructura.

&ope

(ara agregar un nuevo elemento a la pila por ejemplo la letra 2$2 se *an de efectuar los siguientes pasos 3erificar que la pila no est" llena (&ope4&amao). .umentar &ope en uno, es decir, *acer &ope 5 &ope 6 0. 7uardar en el arreglo en la posicin de &ope el dato, es decir- .rreglo8&ope9 5 :$2.

,on lo cual el arreglo de la pila queda de la siguiente manera-

&ope

,uando se *ace una eliminacin siempre se suprime el elemento del tope, por lo que !astar con disminuir en uno el valor del tope y los pasos para reali)ar esta operacin sern los siguientes 3erificar que la pila no est" vac+a (&ope;51). isminuir el valor de tope en uno, es decir, *acer &ope 5 &ope < 0.

espu"s de reali)ar estos pasos el arreglo para la pila queda de la siguiente manera-

&ope

#nicialmente disearemos una clase que permita agregar y eliminar datos de una pila utili)ando arreglos para su implementacin. ,reamos un nuevo proyecto para implementar el ejercicio y automticamente se crea una unidad con la clase &$orm0. (rocedemos a guardar esta unidad con el nom!re =3entana(ilas, para implementar todo el cdigo que tendr el formulario. . continuacin se crea la unidad en donde se implementara el cdigo de la clase lgica y se guarda con el nom!re = eclarar(ilas. 'n esta clase se declara el atri!uto &ope y un arreglo para guardar los datos. (ara el diseo del formulario (clase &$orm0), en donde se capturan los datos y se muestra la informacin, se utili)aran los siguientes componentes con sus respectivos nom!res

=n &'dit (campo de texto), para capturar los caracteres que se agregaran a la pila, el nom!re que se utili)ara para el &'dit es dato. =n &List>ox de nom!re verdatos para visuali)ar el contenido de la pila, a medida que se agregan o se quitan elementos de la pila. ,uatro &>utton (!otones), para ir agregando y quitando los elementos de la pila, #niciali)ar la pila y salir de la aplicacin. Los nom!res que se utili)aran para los &>utton son- !.gregar, !?uitar, !#niciar y !/alir. &am!i"n se utili)aran varios &La!el para colocar los diferentes comentarios que aparecen en el formulario.

La apariencia del formulario sera lago parecida a la siguiente ventana-

#mplementacin de la clase lgica TPila en la unidad UDeclararPilasunit = eclarar(ilas@ ABmode o!jfpcCABD6C interface uses ,lasses, /ys=tils@ EE efinimos una constante para determinar la maxima cantidad de elementos que puede contener en el EEarreglo, para almacenar los datos de la pila. const num 5 01@ type A &(ila C &(ila 5 class private EE'ntre los atri!utos privados que necesitamos para implementar el ejercicio encontramos el &ope y un EEarreglo para guardar los datos. EE efinimos el atri!uto para determinar la posicin del elemento de la cima (arri!a de la pila). 'l tope es el EEindice o posicin de la cima dentro de la pila. 'ste atri!uto es de solo lectura (sin m"todo set). tope-integer@ EE efinimos el atri!uto datos(ila, este es de solo lectura (sin m"todo set). datos(ila es el arreglo para EEguardar los datos de la pila. (ara efectos del ejemplo lo declaramos de tipo ,*ar, pero puede ser de otro EEtipo dependiendo (nmeros o letras una en cada posicin) el ejercicio planteado. datos(ila-.rray80..num9 of ,*ar@ pu!lic EE eclaracin del m"todo constructor de la clase &(ila. constructor ,reate@ EE eclaracin de los m"todos correspondientes a las diferentes operaciones so!re la pila. EE eclaracin del m"todo que permite #niciali)ar o reinicia la pila, es decir deja la pila vac+a o reinicia su EEcontenido si esta tiene elementos. procedure iniciar@ EE eclaracin del m"todo que retorna la posicin del tope. function get&ope-#nteger@ EE eclaramos dos m"todos para determinar el estado de la pila (pila llena o pila vac+a). (ara esto declaro EEdos funciones de tipo !ooleano. /i la pila esta llena se retorna el valor de true, en caso contrario se EEretorna el valor false. Lo mismo si la pila esta vac+a se retorna el valor de true, en caso contrario se EEretorna el valor false. function pilaLlena-!oolean@ function pila3acia-!oolean@ EE eclaracin del m"todo que permite agregar datos o elementos a la pila, tam!i"n conocida como EEoperacin pus*. procedure agregar (valor-c*ar)@ EE eclaracin del m"todo que permite eliminar el elemento del tope de la pila, tam!i"n conocida como EEoperacin pop. procedure quitar@ EE eclaracin del m"todo que determina cual es el valor del elemento de la cima o tope de la pila. function valor&ope-c*ar@ end@ implementation A &(ila C

constructor &(ila.,reate@ !egin EE#niciali)amos la pila como vac+a, para esto llamamos al m"todo iniciar que coloca el tope en cero. iniciar@ end@ procedure &(ila.iniciar@ !egin EE(ara vaciar la pila !asta con poner el tope en 1, pues los datos activos de la pila van de 0 *asta el &ope. tope-51@ end@ EE#mplementacin del m"todo para o!tener el valor del tope de la pila. function &(ila.get&ope- #nteger@ !egin Fesult-5tope@ end@ EE#mplementacin del m"todo para determinar si la pila esta llena. function &(ila.pilaLlena- !oolean@ !egin EELa pila estar llena si el tope alcan)a la posicin maxima del arreglo (num). Fesult-5 tope5num@ end@ EE#mplementacin del m"todo para determinar si la pila esta vac+a. function &(ila.pila3acia- !oolean@ !egin EELa pila esta vac+a si el tope es 1, entonces no *ay elementos en la pila. Fesult-5 tope51@ end@ EE#mplementacin del m"todo que agrega elementos a la pila, para esto se verificar que la pila no esta llena, EEse aumenta el tope en uno y se guarda en el arreglo en la posicin del tope, el dato. procedure &(ila.agregar(valor- c*ar)@ !egin EE/i la pila no esta llena *ay espacio para el nuevo elemento. if not pilaLlena t*en !egin tope-5 get&ope 6 0@ EE/e reserva espacio para un nuevo elemento. datos(ila8get&ope9-5valor@ EE7uardamos el valor del elemento en el tope de la pila. end@ end@ EE#mplementacin del m"todo que permite eliminar el elemento del tope, para esto se verificar que la pila no EEesta vac+a y se disminuye el valor de tope en uno. procedure &(ila.quitar@ !egin if not pila3acia t*en !egin tope-5 get&ope G 0@ end@ end@

EE#mplementacin del m"todo que permite o!tener el valor del dato almacenado en el tope de la pila. function &(ila.valor&ope- c*ar@ !egin Fesult-5datos(ila8get&ope9@ EE%!tenemos el valor actualmente almacenado en la cima de la pila. end@ end.

#mplementacin de la clase grfica TForm1 en la unidad UVentanaPilasunit =3entana(ilas@ ABmode o!jfpcCABD6C interface uses ,lasses, /ys=tils, LFesources, $orms, ,ontrols, 7rap*ics, = eclarar(ilas, ialogs, /td,trls@ type A &$orm0 C &$orm0 5 class(&$orm) !.gregar- &>utton@ !?uitar- &>utton@ !#niciar- &>utton@ !/alir- &>utton@ dato- &'dit@ La!el0- &La!el@ La!elH- &La!el@ La!elI- &La!el@ verdatos- &List>ox@ procedure $orm,lose(/ender- &%!ject@ var ,lose.ction- &,lose.ction)@ procedure $orm,reate(/ender- &%!ject)@ procedure !.gregar,licJ(/ender- &%!ject)@ procedure !#niciar,licJ(/ender- &%!ject)@ procedure !?uitar,licJ(/ender- &%!ject)@ procedure !/alir,licJ(/ender- &%!ject)@ private pila-&(ila@ EE eclaramos una instancia glo!al de la pila. EE eclaracin del m"todo para mostrar el contenido de la pila. procedure mostrar(ila@ pu!lic A pu!lic declarations C end@ var $orm0- &$orm0@ implementation A &$orm0 C EE#mplementacin del evento constructor del formulario. procedure &$orm0.$orm,reate(/ender- &%!ject)@ !egin pila-5&(ila.,reate@ EE#niciali)amos la instancia par el o!jeto pila. end@

EE'ventos para la prue!a individual de los m"todos (operaciones) implementados de la clase &(ila. EE#mplementacin del evento del !otn que agrega datos a la pila. procedure &$orm0.!.gregar,licJ(/ender- &%!ject)@ !egin if not pila.pilaLlena t*en !egin pila.agregar(dato.&ext809)@ mostrar(ila@ dato.,lear@ dato./et$ocus@ end else !egin /*oKLessage(MLa pila esta llena, No puede agregar mas elementosM)@ dato.,lear@ dato./et$ocus@ end@ end@ EE#mplementacin del evento para el !otn iniciar. (ara vaciar la pila !asta con poner el tope en 1. procedure &$orm0.!#niciar,licJ(/ender- &%!ject)@ !egin pila.iniciar@ dato.,lear@ verdatos.,lear@ dato./et$ocus@ end@ EE#mplementacin del evento par !otn quitar. procedure &$orm0.!?uitar,licJ(/ender- &%!ject)@ !egin if not pila.pila3acia t*en !egin pila.quitar@ mostrar(ila@ end else !egin /*oKLessage(MLa pila esta vacia, No puede quitar mas datosM)@ end@ end@ procedure &$orm0.!/alir,licJ(/ender- &%!ject)@ !egin ,lose@ end@ EE#mplementacin del evento para cuando se cierra el formulario. procedure &$orm0.$orm,lose(/ender- &%!ject@ var ,lose.ction- &,lose.ction)@ !egin (ila.$ree@ EE estruimos o li!eramos la instancia de la clase &(ila. end@ EE#mplementacin del m"todo que muestra los datos que se agregan o se quitan de la pila, en el &List>ox. procedure &$orm0.mostrar(ila@ var EE eclaramos un o!jeto de la clase &(ila, para crear una pila temporal en donde almacenar los datos. temp-&(ila@

!egin temp-5&(ila.,reate@ EE#niciali)amos la instancia para la pila temporal. verdatos.,lear@ EELimpiamos el contenido de &List>ox, en el supuesto caso que tenga informacin. K*ile not pila.pila3acia do EELientras la pila no este vac+a. !egin verdatos.#tems..dd(pila.valor&ope)@ EE.gregamos a los items del &List>ox el valor del tope de la pila. temp.agregar(pila.valor&ope)@ EE.grego a una pila temporal el valor del tope de la pila actual. pila.quitar@ EE'liminamos el tope de la pila actual, para pasar al siguiente elemento de dic*a pila. end@ EE(osteriormente copiamos nuevamente la pila temporal *asta la pila original. K*ile not temp.pila3acia do !egin pila.agregar(temp.valor&ope)@ EE.gregamos a la pila original el valor del tope de la pila temporal. temp.quitar@ EE'liminamos el tope de la pila temporal, para pasar al siguiente elemento. end@ end@ initiali)ation AB# uventanapilas.lrsC end.

Vous aimerez peut-être aussi