6.

5 DEFINICIÓN Y USO DE LA ESTRUCTURA TIPO PILA Definición: Son aquellas que solo tiene 2 operaciones, Push(Inserción) y Pop(Eliminación) la cual solo se puede efectuar por un extremo llamado Top. Sin Embargo se le pueden aplicar todas las operaciónes al igual que a las listas. 1.- Recorrido Definición: Ya que las pilas son LIFO(Last in - FirstOut) el Recorrido se hace sacando el ultimo dato que se inserto hasta que no encuentre ningún otro. Detalle: Apuntador toma el Top, después ve si la condición cumple para efectuar un Ciclo mientras Apuntador sea diferente de Nulo, si cumple lo que hace es que despliega el contenido de la Pila(Pila[Apuntador]), después Apuntador se le resta 1. Este proceso se repite hasta que Apuntador sea igual Nulo(Cuando llega a este punto la Pilaya fue Recorrida). Algoritmo: Recorrido(Pila, Top) Apuntador - Top Repetir mientras Apuntador ≠ Nulo Imprimir Pila[Apuntador] Apuntador Fin del ciclo Salir Diagrama: - Apuntador - 1

Top. de otra forma lo que hace es Incrementar el valor de Top.Corrida: Push Definición: Push es simplemente el método por el cual va agregando un Dato nuevo a la Pila tomando en cuenta la Capacidad Máxima (Max) de almacenar un dato. De esta forma el dato ya esta insertado. y copia el valor de Elemento en Pila[Top]. Algoritmo: Push(Pila. Detalle: Compara en un principio el Top con Max. Max. si la condición no cumple es imposible insertar mas datos a la Pila. Max . Elemento) Si Top &ne.

Top + 1 .Elemento Pila[Top] Imprimir Pila Llena Salir Diagrama: Corrida: Pop Definición: Pop es simplemente el método por el cual va sacando el ultimo Dato de la Pila.Top Si no: . basándose únicamente en el Top. .

Top) Si Top &ne.1 Corrida: .Top . de otra forma lo que hace es Imprimir el valor de Pila[Top] (Que es el dato que esta apunto de Eliminar) y enseguida a Top le resta 1. Nulo Imprimir Pila[Top] Top Si no: Imprimir Pila Vacía Salir Diagrama: . Algoritmo: Pop(Pila. de esta forma el dato ya no existe.Detalle: Compara para determinar si la pila esta vacio.

Si lo encuentra desplegara El Dato fue encontrado de otra manera El Dato no se encontró .Apuntador . Elemento) Si Top &ne. De otra manera hará un Recorrido y comparara con cada uno de los Datos de la Pila hasta encontrar el dato que desea buscar.Búsqueda Definición: Este método usa el recorrido para encontrar Elemento y desplegar un mensaje si la búsqueda es exitosa. Nulo Apuntador . si no simplemente desplegara Lista Vacía y saldrá.Top Repetir mientras Apuntador &ne. Detalle: El algoritmo compara para determinar si la Pila tiene algún dato. Top. Nulo Si Pila[Apuntador] = Elemento Imprimir El Dato fue encontrado y Salir Apuntador Fin del ciclo Imprimir El Dato no se encontró Si no: Imprimir Pila Vacía Salir Diagrama: . Algoritmo: Busqueda(Pila.1 .

mientras hace esto copia cada uno de los datos a un arreglo Temp para cuando encuentre el Dato regresar esos valores a la Pila.Corrida: Eliminacion Definición: Este método busca un Dato dentro de la pilay lo elimina. si no simplemente desplegara Pila Vacía y saldrá. Detalle: El algoritmo compara para determinar si la Pila tiene algún dato. Algoritmo: . De otra manera hará un Recorrido y comparara con cada uno de los Datos de la Pila hasta encontrar el dato que desea eliminar. de otra manera El Dato no encontrado . Si lo encuentra desplegara Eliminado el Dato y le restara 1 a Top.

Top .1 y Salir .Top Repetir mientras Apuntador1 &ne.Apuntador1 .Pila[Apuntador1] .Apuntador2 + 1 . Top. Nulo Apuntador1 .Borrar(Pila. Nulo Si Pila[Apuntador1] = Elemento Imprimir Eliminando el Dato Repetir mientras Apuntador2 &ne. Temp.1 . Nulo Pila[Apuntador1]=Temp[Apuntador2] Fin del ciclo Top Si No: Temp[Apuntador2] Apuntador1 Apuntador2 Fin del ciclo Imprimir Dato no encontrado Si no: Imprimir Pila Vacía Salir Diagrama: . Elemento) Si Top &ne.

Corrida: .

ya que los componentes ocupan lugares sucesivos en la estructura y cada uno de ellos tiene un único sucesor y un único predecesor. se le conoce como estructura LIFO (Last-Input. una pila de latas en un supermercado. respectivamente. los elementos de una pila se eliminan en orden inverso al que se insertaron. es decir. el último elemento que se mete en la pila es el primero que se saca. etcétera.que se conoce generalmente como tope. por ejemplo. First-Output: el ultimo en entrar es el primero en salir).PILAS Una pila representa una estructura lineal de datos en la que se puede agregar o quitar elementos únicamente por uno de los dos extremos. como los arreglos. como: y y Arreglos Listas Se utilizaran arreglos. una pila de libros que se exhiben en una librería. una pila de platos. Las pilas son estructuras de datos lineales. En la siguiente figura se presentan dos alternativas de representación de una pila. En consecuencia. Una pila se define formalmente como una colección de datos a los cuales se puede acceder mediante un extremo. Existen numerosos casos prácticos en los que se utiliza el concepto de pila. con excepción del último y del primero. utilizando arreglos. Para su representación requieren el uso de otras estructuras de datos. . Esta variable se utiliza para indicar el último elemento que se inserto en la pila. Debido a esta característica. así como una variable auxiliar a la que se denomina TOPE. es decir. En consecuencia. Representación de pilas Las pilas no son estructuras fundamentales de datos. no están definidas como tales en los lenguajes de programación. es importante definir el tamaño máximo de la pila.

b) pila con algunos elementos y c) pila vacía.En la figura F31-3 se presentan ejemplos de a) pila llena. .

Representacion de la pila en lenguajes Lenguaje C structstackNode { /* struct*/ int structstackNode }. donde TOPE = MAX. si en la pila que se presenta en la figura F31-3 a . se . Si la pila estuviera llena y se intentara insertar un nuevo elemento. Al utilizar arreglos para implementar pilas se tiene la limitación de que se debe reservar espacio de memoria con anticipación. SP *nextPtr. Por ejemplo. se quisiera insertar un nuevo elemento. 1. característica propia de los arreglos. Una vez dado un máximo de capacidad a la pila no es posible insertar un número de elementos mayor al máximo establecido. se producirá un error conocido como desbordamiento overflow . Max Elemn } Pila(int = = = n new n) -1. int[n]. Lenguaje C# self-referential public { data.

no se puede expandir ni contraer. Consiste en usar espacios compartidos de memoria para la implementación de pilas. pero esto ultimo resultaría ineficiente y costoso si solo se utilizaran algunos elementos. en lugar de dos arreglos de N elementos cada uno. Pila_vacia (PILA. Otro error que se puede presentar al trabajar con pilas es tratar de eliminar un elemento de una pila vacía. La pila está llena y el espacio de memoria reservado es fijo. asignando a BAND el valor de verdad correspondiente.FALSO { La pila no está vacía} 2. La pila se implementa en un arreglo unidimensional. {Fin del condicional del paso 1} . las operaciones básicas que se pueden. por tanto. siempre existe la posibilidad de cometer un error de desbordamiento si se reserva menos espacio del que efectivamente se usara o bien de hacer uso ineficiente de la memoria si se reserva más espacio del que realmente se necesita . No siempre es viable saber con exactitud cuál es el número de elementos a tratar.VERDADERO {La pila está vacía} si no Hacer BAND <. Operaciones con pilas La definición de una estructura de datos queda completa al incluir las operaciones que se pueden realizar en ella. TOPE es un parámetro de tipo entero. Este tipo de error se conoce como subdesbordamiento -underflow-. Si la pila esta vacía. Existe otra alternativa de solución a este problema. a continuación se presentan los algoritmos correspondientes a las operaciones mencionadas. entonces TOPE es igual a 0. y que el último de ellos se indica con TOPE. Se definirá entonces un solo arreglo unidimensional de2* N elementos. cada una de ellas con un tamaño máximo de N elementos. Si (TOPE = 0) {Verifica si no hay elementos almacenados en la pila} entonces Hacer BAND <. Llevar a cabo son: y y Insertar un elemento Eliminar un elemento Pila_vacía Pila_llena Push Pop en la pila de la pila Y las operaciones auxiliares: y y Considerando que se Viene una pila con capacidad para almacenar un número máximo de elementos MAX . BAND es un parámetro de tipo booleano} 1.producirá un error de este tipo. Una posible solución a este tipo de inconvenientes consiste en definir pilas de gran tamaño.TOPE. Supongamos que se necesitan dos pilas.BAND) {Este algoritmo verifica si una estructura tipo pila PILA esta vacía. Para el caso de las pilas.

{Fin del condicional del paso 1} Ahora como ya sabemos cómo evaluar el estado de la pila. MAX y BAND 2.MAX. TOPE. } Algoritmo en C#.Pila_llena (PILA. y si la misma no está llena. int info) { STACKNODEPTR newPtr. Si (TOPE = MAX) entonces Hacer BAND <. *topPtr = newPtr. Si (BAND = VERDADERO) entonces Escribir Desbordamiento Pila Llena si no Hacer TOPE <.TOPE + 1 y PILA[TOPE] <. TOPE es un parámetro de tipo entero} 1. {Fin del condicional del paso 2} Algoritmo en C. int x) { if (P. . if (newPtr != NULL) { newPtr->data = info. MAX representa el número máximo de elementos que puede alcanzar PILA.FALSO {La pila no está llena 2. newPtr = malloc(sizeof(STACKNODE)). con una estructura estatica publicvoidPush(Pila P.SP++.DATO {Actualiza TOPE e inserta el nuevo elemento en el TOPE de PILA} 3. MAX. Actualiza el valor TOPE. newPtr->nextPtr = *topPtr. BAND) {Este algoritmo verifica si una estructura tipo pila PILA está llena. podremos entonces insertar o quitar elementos en la lista. info). No memoryavailable. Push(PILA. } else printf("%d not inserted. con una estructura dinamica void push(STACKNODEPTR *topPtr. BAND es un parámetro de tipo booleano} 1.\n".SP < Max) { P.VERDADERO {La pila está llena} si no Hacer BAND <.TOPE. TOPE. Llamar a Pila_Llena con PILA.DATO) {Este algoritmo agrega el elemento DATO en una estructura tipo Pila . La pila se implementa en un arreglo unidimensional de MAX elementos. TOPE es un parámetro de tipo entero. asignando a BAND el valor de verdad correspondiente.

Llamar a Pila_Vacia con PILA. } Algoritmo en C#. if (J.SP] = x. DATO) {Este algoritmo saca un elemento Dato de una estructura tipo pila PILA . TOPE.Show("La Pila.SP]. J. con una estructruradinamica int pop(STACKNODEPTR *topPtr) { STACKNODEPTR tempPtr.PILA[TOPE] y TOPE <.Error).OK. El elemento que se elimina es que se encuentra en la posición indicada por TOPE} 1. si (BAND = VERDADERO) entonces Escribir Subdesbordamiento Pila vacía si no Hacer DATO<. } } Pop(PILA. intpopValue. si ésta no se encuentra vacía. *topPtr = (*topPtr)->nextPtr.TOPE -1{Actualización de TOPE} 3.Elemn[P. Esta Vacia. Esta Llena.SP--. return popValue. } else { MessageBox. popValue = (*topPtr)->data. .". tempPtr = *topPtr.SP > -1) { x = J. {Fin del condicional del paso 2} Algoritmo en C. free(tempPtr).Show("La Pila. TOPE y BAND 2. } else { MessageBox."Error en Pila.Elemn[J.". con una estructura estatica publicint Pop (Pila J) { int x = 0.P."). MessageBoxIcon.MessageBoxButtons.

} return (x). } .

Sign up to vote on this title
UsefulNot useful