Sie sind auf Seite 1von 29

PILAS

1498496 Beatriz AnaKaren Torres Rivera 1478451 Adriana Alejandra Esquivel de la Garza 1442048 Pedro Israel Escobar Lucio 1450250 Christopher Resndez Turrubiartes

PILAS
Una pila es una lista de

elementos a la cual se puede insertar o eliminar elementos nicamente por uno de los extremos. En consecuencia, los elementos de una pila sern eliminados en el orden inverso al que se insertaron, es decir, el ultimo elemento que se meta en la fila ser el primero en sacar.

Existen numerosos

casos prcticos en los que se utiliza el concepto de pila: de platos, de latas en un supermercado, etc.

Una estructura de datos tipo pila se define como: Una coleccin de datos que solo puede ser accesada por un extremo, el cual normalmente se conoce como tope.

Debido al orden en el cual se insertan o eliminan elementos de una pila, a esta estructura tambin se le conoce como estructura LIFO (last-in, first-out: ultimo en entrar, primero en salir). Las pilas pertenecen al grupo de estructuras de datos lineales, ya que los componentes ocupan lugares sucesivos en la estructura.

REPRESENTACION DE PILAS
Las pilas no son estructuras fundamentales de datos, es decir, no estn definidas como tales en los lenguajes de programacin ( como lo estn por ejemplo los arreglos). Las pilas pueden representarse mediante el uso de: Arreglos Listas enlazadas

Debido ha que aqu utilizaremos

arreglos deberemos definir el tamao mximo de la pila, y adems una variable auxiliar a la que se le denominara TOPE, que ser un apuntador en el ultimo elemento insertado en la pila

Al utilizar arreglos para implementar pilas se

tienen las limitaciones de espacios de memoria reservada, propia de los arreglos. Una vez dado un mximo de capacidad de pila, no es posible insertar un numero de elementos mayor al mximo fijado. Si la pila estuviera llena y se intentara insertar un nuevo valor, se producira un error con el nombre de desbordamiento (overflow). Una posible solucin para este tipo de errores consiste en definir pilas de gran tamao, pero resultara ineficiente y costoso si solo se utilizaran algunos elementos

Existe otra alternativa


Consiste en usar espacios compartidos de memoria para la implementacin de pilas. Suponga que se necesitan dos pilas, cada una de ellas con un valor mximo de N elementos. Se definir un solo arreglo de 2*N elementos , en lugar de dos arreglos de N elementos cada uno.

Otro error que puede presentarse al trabajar

con pilas es tratar de eliminar un elemento de una pila vaca. Este tipo de error se conoce como subdesbordamiento (underflow)

Operaciones con pilas.


En el caso de las pilas, las operaciones bsicas que pueden llevarse acabo son: a) Poner un elemento b) Quitar un elemento

Y las operaciones auxiliares son: a)Pila-vaca b)Pila-llena

A continuacin, los algoritmos correspondientes a lo anterior, sabiendo que las pilas tienen un nmero mximo de elementos (MAX) y que el ultimo de esto esta dado por TOPE.

PILA_VACIA (PILA, TOPE, BAND)


{Este algoritmo verifica si la PILA esta vaca asignando a BAND el valor de verdad correspondiente} 1. Si TOPE= 0 {verifica si no hay elementos en la Pila} entonces hacer BAND Verdadero si no hacer BAND Falso { la pila no esta vaca} 2. {fin de la condicional del paso 1}

PILA_LLENA )PILA, TOPE, BAND, MAX)


{ Este algoritmo verifica si la PILA esta llena, asignado a BAND el valor de verdad correspondiente. MAX es el nmero mximo de elementos que puede almacenar PILA.} 1. Si TOPE = MAX entonces hacer BAND Verdadero { PILA esta llena} si no hacer BAND Falso

2. { Fin el condicional del paso 1}

PONE (PILA, TOPE, MAX, DATO)


{Este algoritmo pone el elemento DATO en PILA. Actualiza el valor de TOPE. MAX es el nmero mximo de elementos que puede almacenar PILA} 1. Llamar a PILA_LLENA con PILA, TOPE, MAX y BAND 2. Si BAND= Verdadero entonces Escribir desbordamiento si no Hacer TOPE TOPE + 1 (actualiza TOPE) y PILA [TOPE] DATO {Pone el nuevo elemento en el tope de PILA} 3. {Fin del condicional del paso 2}

QUITA (PILA, TOPE, DATO)


{Este algoritmo saca el elemento de PILA que est en la posicin indicada por TOPE} 1. Llamar a la PILA_VACIA con PILA, TOPE Y BAND 2. Si BAND= Verdadero entonces Escribir subdesbordamiento si no Hacer DATO PILA[TOPE] y TOPE - 1 {Actualizacin TOPE} 3. {Fin del condicionante del paso 2}

Aplicaciones de Pilas
Las pilas son una estructura de datos muy usada en

la solucin de diversos tipos de problemas, en el rea de la computacin. Ahora se analizarn algunos de los casos ms representativos de aplicacin de las mismas:
Llamadas a subprogramas Recursividad Tratamiento de expresiones aritmticas Ordenacin

Llamadas a Subprogramas
Cuando se tiene un programa que llama a un subprograma, tambin

conocido co-mdulo o funcin, internamente se usan pilas para guardar el estado de las variable del programa, as como las instrucciones pendientes de ejecucin en el momento que hace la llamada. Termina la ejecucin del subprograma, los valores almacenados en la pila se recuperan para continuar con la ejecucin del programa en el punto en el cual fue interrumpido. Adems de las variables se recupera la direccin del programa la que se hizo la llamada, porque a esa posicin se regresa el control del proceso.

Por ejemplo, que se tiene un programa principal (PP) que llama los

subprogramas UNO y. DOS. A su vez, el subprograma DOS llama al TRES. Cada vez que la ejecucin de uno de los subprogramas concluye, se regresa el control al nivel inmediato superior. Cuando el programa PP llama a UNO, se guarda en una pila la posicin en la que se hizo la llamada . Al terminar UNO, el control se regresa a PP recuperan previamente la direccin de la pila. Al llamar a DOS, nuevamente se guarda en la direccin de PP en la pila . Cuando DOS llama a TRES, se pone en la pila la direccin de DOS. Despus de procesar TRES, se recupera la posicin DOS para continuar con su ejecucin. Al terminar DOS se regresa el con a PP, obteniendo previamente la direccin guardada en la pila.

Finalmente podemos concluir que las pilas son necesarias en este

tipo de aplicaciones por lo siguiente: Permiten guardar la direccin del programa, o subprograma, desde donde se hizo la llamada a otros subprogramas, para regresar posteriormente y seguir ejecutndolo a partir de la instruccin inmediata a la llamada. Permiten guardar el estado de las variables en el momento en que se hace la llamada, para seguir ocupndolas al regresar del subprograma

Tratamiento de expresiones algebraicas


En este tema, explicaremos la manera de como

convertir las expresiones de notacin infija a su equivalente de notacin prefija o posfija que es utilizado en el mundo del lenguaje computacional. Primero hablaremos de que tratan estos trminos para despus realizar su transformacin.

Cuando una expresin matemtica se encuentra

de la forma A + B se dice que es notacin infija, ya que el operador (+) se encuentra entre los dos operandos ( A, B). Cuando una expresin matemtica se encuentra de la forma +AB se dice que es notacin prefija, ya que el operador (+) se encuentra antes de los dos operandos ( A, B).

Cuando una expresin matemtica se encuentra

de la forma AB+ se dice que es notacin posfija, ya que el operador (+) se encuentra despus de los dos operandos ( A, B).

La ventaja de usar este tipo de notaciones

(prefija y posfija) es que no son necesarios los parntesis para el orden en que se efectuarn las operaciones correspondientes, ya que estos estn establecidos por el orden de los operadores con respecto a los operandos.

Solamente se podrn utilizar los siguientes

operadores en este tipo de expresiones (acomodados de arriba hacia abajo por su prioridad de ejecucin

Los operadores de mas alta prioridad se ejecutarn

primero. En caso de que existan dos operadores iguales en la misma operacin, se procesarn de izquierda a derecha. Las subexpresiones que se encuentran entre parntesis tendrn ms prioridad que cualquier operador.

Ejemplo
Expresin infija: X + Z * W Expresin posfija: XZW*+ El primer operador que se procesa durante la

traduccin de la expresin es la multiplicacin, paso 1, debido a que es el de ms alta prioridad. Se coloca el operador de tal manera que los operandos afectados por l lo precedan.

Para el operador de suma se sigue el mismo

criterio, los dos operandos lo preceden. En este caso el primer operando es X y el segundo es ZW*

Explicacin
En los pasos 1, 3 y 5 el smbolo analizado -un

operando- se agrega directamente a EPOS. Al analizar el operador + (paso 2) se verifica si en PILA hay operadores de mayor o igual prioridad. En este caso, PILA est vaca; por tanto, se pone el smbolo en el tope de ella. Con el operador * (paso 4) sucede algo similar.

En PILA no existen operadores de mayor o igual

prioridad -la suma tiene menor prioridad que la multiplicacin-, por lo que se agrega el operador * a PILA. En los dos ltimos pasos, 6 y 7, se extraen de PILA sus elementos, agregndolos a EPOS.

Traduccin de expresin infija a posfija

Das könnte Ihnen auch gefallen