P. 1
6.5 DEFINICIÓN Y USO DE LA ESTRUCTURA TIPO PILA

6.5 DEFINICIÓN Y USO DE LA ESTRUCTURA TIPO PILA

|Views: 221|Likes:
Publicado porRamy Guzman

More info:

Published by: Ramy Guzman on Jun 14, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

08/01/2014

pdf

text

original

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

y copia el valor de Elemento en Pila[Top]. de otra forma lo que hace es Incrementar el valor de Top. Max . Detalle: Compara en un principio el Top con Max. De esta forma el dato ya esta insertado. Max.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. si la condición no cumple es imposible insertar mas datos a la Pila. Elemento) Si Top &ne. Top. Algoritmo: Push(Pila.

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 + 1 . basándose únicamente en el Top.Top Si no: . .

Top) Si Top &ne.Detalle: Compara para determinar si la pila esta vacio.1 Corrida: .Top . de esta forma el dato ya no existe. Nulo Imprimir Pila[Top] Top Si no: Imprimir Pila Vacía Salir Diagrama: . 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. Algoritmo: Pop(Pila.

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

Detalle: El algoritmo compara para determinar si la Pila tiene algún dato. de otra manera El Dato no encontrado . Si lo encuentra desplegara Eliminado el Dato y le restara 1 a Top. si no simplemente desplegara Pila Vacía y saldrá. De otra manera hará un Recorrido y comparara con cada uno de los Datos de la Pila hasta encontrar el dato que desea eliminar. 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. Algoritmo: .

Pila[Apuntador1] .Borrar(Pila.Apuntador1 .1 y Salir .Apuntador2 + 1 . Nulo Apuntador1 . 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: . Top.Top Repetir mientras Apuntador1 &ne. Nulo Si Pila[Apuntador1] = Elemento Imprimir Eliminando el Dato Repetir mientras Apuntador2 &ne.Top . Temp. Elemento) Si Top &ne.1 .

Corrida: .

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

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

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. 1. Lenguaje C# self-referential public { data. Max Elemn } Pila(int = = = n new n) -1. se producirá un error conocido como desbordamiento overflow . se quisiera insertar un nuevo elemento. SP *nextPtr. Por ejemplo. 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. se . característica propia de los arreglos. si en la pila que se presenta en la figura F31-3 a .Representacion de la pila en lenguajes Lenguaje C structstackNode { /* struct*/ int structstackNode }. donde TOPE = MAX. int[n].

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

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

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

} return (x). } .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->