Vous êtes sur la page 1sur 5

Pila (inform�tica)

Ir a la navegaci�nIr a la b�squeda

El texto que sigue es una traducci�n defectuosa.


Si quieres colaborar con Wikipedia, busca el art�culo original y mejora esta
traducci�n.
Copia y pega el siguiente c�digo en la p�gina de discusi�n del autor: {{subst:Aviso
mal traducido|Pila (inform�tica)}} ~~~~

Representaci�n simplificada de una pila

Pilas para ni�os


Una pila (stack en ingl�s) es una lista ordenada o estructura de datos que permite
almacenar y recuperar datos, el modo de acceso a sus elementos es de tipo LIFO (del
ingl�s Last In, First Out, ��ltimo en entrar, primero en salir�) . Esta estructura
se aplica en multitud de supuestos en el �rea de inform�tica debido a su
simplicidad y capacidad de dar respuesta a numerosos procesos.

Para el manejo de los datos cuenta con dos operaciones b�sicas: apilar (push), que
coloca un objeto en la pila, y su operaci�n inversa, retirar (o desapilar, pop),
que retira el �ltimo elemento apilado.

En cada momento s�lo se tiene acceso a la parte superior de la pila, es decir, al


�ltimo objeto apilado (denominado TOS, Top of Stack en ingl�s). La operaci�n
retirar permite la obtenci�n de este elemento, que es retirado de la pila
permitiendo el acceso al anterior (apilado con anterioridad), que pasa a ser el
�ltimo, el nuevo TOS.

Las pilas suelen emplearse en los siguientes contextos:

Evaluaci�n de expresiones en notaci�n postfija (notaci�n polaca inversa).


Reconocedores sint�cticos de lenguajes independientes del contexto.
Implementaci�n de recursividad.
En un sistema operativo cada proceso tiene un espacio de memoria (pila) para
almacenar valores y llamadas a funciones.

Una pila acotada es una pila limitada a un tama�o m�ximo impuesto en su


especificaci�n.

Por analog�a con objetos cotidianos, una operaci�n apilar equivaldr�a a colocar un
plato sobre una pila de platos, y una operaci�n retirar equivaldr�a a retirarlo.

�ndice
1 Historia
2 Pila como tipo abstracto de datos
2.1 Operaciones
3 Pilas Hardware
4 Arquitectura b�sica de una pila
5 Soporte de Hardware
6 Soporte de Software
7 Expresi�n de evaluaci�n y an�lisis sint�ctico
8 Implementaci�n en aplicaciones inform�ticas
9 Tiempo de ejecuci�n de la gesti�n de memoria
10 Solucionar problemas de b�squeda
11 Seguridad
12 V�ase tambi�n
13 Enlaces externos
Historia
El m�todo de pila para la evaluaci�n de expresiones fue propuesto en 1955 y dos
a�os despu�s patentado por Friedrich L. Bauer, qui�n recibi� en 1988 el premio
"IEEE Computer Society Pioneer Award" por su trabajo en el desarrollo de dicha
estructura de datos.

Pila como tipo abstracto de datos


A modo de resumen, la pila es un contenedor de nodos y tiene dos operaciones
b�sicas: push (o apilar) y pop (o desapilar). �Push� a�ade un nodo a la parte
superior de la pila, dejando por debajo el resto de los nodos ya presentes en la
pila. �Pop� devuelve y elimina el actual nodo superior de la pila. Una met�fora que
se utiliza con frecuencia es la idea de una pila de platos dispuesta en una
cafeter�a en un contenedor con un muelle que mantiene la pila a nivel. En esa
serie, solo el primer plato es visible y accesible para el usuario, todos las dem�s
permanecen ocultos. Como se a�aden nuevos platos, cada nuevo plato se convierte en
la parte superior de la pila, permaneciendo escondidos debajo los dem�s. A medida
que el plato superior se extrae de la pila, el inmediatamente inferior pasa a
ocupar la parte superior de la pila. Dos principios importantes son ilustrados por
esta met�fora: �nicamente se accede al plato que se encuentra en la parte superior
(el �ltimo en depositarse), y el resto de platos de la pila permanecen ocultos.
Para extraer un plato distinto al superior habr� que extraer antes los que se
encuentran sobre �l.

Operaciones
Habitualmente, junto a las dos operaciones b�sicas de apilar y desapilar (push,
pop), las pilas puede implementar otra serie de funciones:

Crear (constructor): crea la pila vac�a.


Tama�o (size): regresa el n�mero de elementos de la pila.
Apilar (push): a�ade un elemento a la pila.
Desapilar (pop): lee y retira el elemento superior de la pila.
Leer �ltimo (top o peek): lee el elemento superior de la pila sin retirarlo.
Vac�a (empty): devuelve cierto si la pila est� sin elementos o falso en caso de que
contenga alguno.
Una pila puede implementarse f�cilmente ya sea mediante una matriz o una lista
enlazada. Lo que identifica a una estructura de datos como una pila en cualquier
caso no es su estructura sino su interfaz: al usuario solo se le permite colocar y
extraer datos en el modo que se espera de una pila y algunas otras operaciones
auxiliares.

Otro tipo de estructura de datos es la cola (FIFO, del ingl�s First In First Out),
�primero en entrar, primero en salir�.

Pilas Hardware
Un uso muy com�n de las pilas a nivel de arquitectura hardware es la asignaci�n de
memoria.

Arquitectura b�sica de una pila


Una pila t�pica es un �rea de la memoria de los computadores con un origen fijo, un
espacio para almacenar datos y un puntero. Al principio, su n�mero de elementos es
cero y la direcci�n del puntero coincide con la direcci�n de origen. Conforme van
incorpor�ndose datos, los elementos contenidos en la pila van increment�ndose y el
puntero va actualizando su direcci�n para hacerla coincidir con el �ltimo en
incorporase.

Las dos operaciones aplicables a todas las pilas son:

Apilar: colocar un nuevo dato en la pila. Se lee el puntero para localizar el


�ltimo elemento, se incorpora a continuaci�n de este y se redirecciona el puntero
para que apunte al nuevo dato incorporado.
Desapilar: extraer un dato de la pila. Se localiza el �ltimo dato mediante el
puntero, se lee el dato y se redirecciona el puntero al elemento inmediato anterior
para que vuelva a apuntar al �ltimo dato de la pila.
Una pila queda definida por su origen (una direcci�n de memoria), y su capacidad
para almacenar datos. Cuando se intenta leer m�s all� de su origen (esto es, se
intenta leer un elemento cuando est� vac�a) o cuando se intenta sobrepasar su
capacidad de almacenar elementos, se produce un error: error por desbordamiento.

Se puede visualizar una pila de datos (independientemente de c�mo se almacene en la


memoria) como una serie de datos colocados unos sobre otros (representaci�n que se
corresponde con el mundo real) o como una sucesi�n de datos colocados de izquierda
a derecha, unos tras otros.

Una pila ocupar�a un bloque de celdas de memoria, con una direcci�n de origen, un
espacio reservado para la acumulaci�n de datos y un puntero que apunta al �ltimo
dato incorporado. La estructura que adopte una pila puede ser muy variada:
almacenando datos en direcciones crecientes o decrecientes, con capacidad de
almacenamiento flexible, con punteros que apunten al �ltimo elemento o a la
posici�n que deber� ocupar el pr�ximo elemento que se incorpore� En cualquier caso,
quedar� definida por su algoritmo: �ltimo en entrar, primero en salir.

Soporte de Hardware
Muchas CPUs tienen registros que se pueden utilizar como punteros de pila. Algunas,
como Intel x86, tienen instrucciones especiales que impl�citan el uso de un
registro dedicado a la tarea de ser un puntero de pila. Otras, como DEC PDP-11 y de
la familia 68000 de Motorola tienen que hacer frente a los modos de hacer posible
la utilizaci�n de toda una serie de registros como un puntero de pila. La serie
Intel 80x87 de coprocesadores num�ricos tiene un conjunto de registros al que se
puede acceder ya sea como una pila o como una serie de registros numerados. Algunos
microcontroladores, por ejemplo algunos PICs, tienen un fondo fijo de pila que no
es directamente accesible. Tambi�n hay una serie de microprocesadores que aplican
una pila directamente en el hardware:

Computer vaqueros MuP21


Harris RTX l�nea
Novix NC4016
Muchas pilas basadas en los microprocesadores se utilizan para aplicar el lenguaje
de programaci�n Forth en el nivel de microc�digo. tambi�n se utilizaron las pilas
como base de una serie de mainframes y miniordenadores. Esas m�quinas fueron
llamadas m�quina de pila, el m�s famoso es el Burroughs B5000.

Soporte de Software
En programas de aplicaci�n escrito en un lenguaje de alto nivel, una pila puede ser
implementada de manera eficiente, ya sea usando vectores o listas enlazadas. En
LISP no hay necesidad de aplicar la pila, puesto que las funciones apilar y
desapilar est�n disponibles para cualquier lista. Adobe PostScript tambi�n est�
dise�ada en torno a una pila que se encuentra directamente visible y manipuladas
por el programador. El uso de las pilas est� muy presente en el desarrollo de
software por ello la importancia de las pilas como tipo abstracto de datos.

Expresi�n de evaluaci�n y an�lisis sint�ctico


Se calcula empleando la notaci�n polaca inversa utilizando una estructura de pila
para almacenar temporalmente los valores. Las expresiones pueden ser representadas
en prefijo, infijo, postfijo. La conversi�n de una forma de expresi�n a otra forma,
necesita de una pila. Muchos compiladores utilizan una pila para analizar la
sintaxis de las expresiones, bloques de programa, etc. antes de traducir a c�digo
de bajo nivel. Los lenguajes de programaci�n de alto nivel son compilados o
traducidos a c�digo m�quina realizando la conversi�n de expresiones a la notaci�n
que mejor se adapte a las caracter�sticas de su modo de operar, buscando siempre la
simplicidad.

Por ejemplo, el c�lculo: ((1 + 2) * 4) + 3, se traducir�a o notaci�n postfija con


la ventaja de no tener que atender a la jerarqu�a de prioridades:

En notaci�n postfija: 1 2 + 4 * 3 +

La expresi�n es evaluada de izquierda a derecha utilizando una pila:

Diagrama de flujo para resolver una expresi�n en notaci�n postfija


Apilar cuando el dato sea un operando
Desapilar dos operandos y evaluar el valor cuando el dato sea un operador.
Apilar el resultado de la operaci�n.
(los datos de la pila se muestran despu�s de haberse llevado a cabo la operaci�n):

ENTRADA OPERACI�N PILA


1 Apilar operando 1
2 Apilar operando 1, 2
+ Sumar operandos* 3
4 Apilar operando 3, 4
* Multiplicar operandos* 12
3 Apilar operando 12, 3
+ Sumar operandos* 15

El resultado final, 15, se encuentra en la pila, y el puntero apuntado a su


direcci�n. Se lee haciendo pop y la pila vuelve a quedar vac�a.
*.- Se extraen los dos operandos con lo que el puntero los da por eliminados y,
atendiendo a su orden (necesario en operaciones de resta, divisi�n y potencia) se
realiza la operaci�n. El resultado se coloca en la pila.
Implementaci�n en aplicaciones inform�ticas
Supongamos que se est� procesando una funci�n y en su interior llama a otra
funci�n. La funci�n se abandona para procesar la funci�n de la llamada, pero antes
se almacena en una pila la direcci�n que apunta a la funci�n. Ahora supongamos que
esa nueva funci�n llama a su vez a otra funci�n. Igualmente, se almacena su
direcci�n, se abandona y se atiende la petici�n. As� en tantos casos como existan
peticiones. La ventaja de la pila es que no requiere definir ninguna estructura de
control ni conocer las veces que el programa estar� saltando entre funciones para
despu�s retomarlas, con la �nica limitaci�n de la capacidad de almacenamiento de la
pila. Conforme se van cerrando las funciones, se van rescatando las funciones
precedentes mediante sus direcciones almacenadas en la pila y se va concluyendo su
proceso, esto hasta llegar a la primera.

El caso t�pico es el de una funci�n recursiva (que se llama a s� misma), esto es


posible implementarlo con sencillez mediante una pila. La funci�n se llama a s�
misma tantas veces como sea necesario hasta que el resultado de la funci�n cumpla
la condici�n de retorno; entonces, todas las funciones abiertas van completando su
proceso en cascada. No se necesita saber cuandas veces se anidar� y, por tanto,
tampoco cuando se cumplir� la condici�n, con la �nica limitaci�n de la capacidad de
la pila. De sobrepasarse ese l�mite, normalmente porque se entra en un bucle sin
final, se produce el �error de desbordamiento de la pila�.

La ordenaci�n de datos por el m�todo de la burbuja se resuelve mediante una funci�n


recursiva.

Tiempo de ejecuci�n de la gesti�n de memoria


Art�culo principal: Pila basada en la asignaci�n de memoria y Pila m�quina. Una
serie de lenguajes de programaci�n est�n orientadas a la pila, lo que significa que
la mayor�a definen operaciones b�sicas (a�adir dos n�meros, la impresi�n de un
car�cter) cogiendo sus argumentos de la pila, y realizando de nuevo los valores de
retorno en la pila. Por ejemplo, PostScript tiene una pila de retorno y un operando
de pila, y tambi�n tiene un mont�n de gr�ficos estado y un diccionario de pila.

Forth utiliza dos pilas, una para pasar argumentos y una subrutina de direcciones
de retorno. El uso de una pila de retorno es muy com�n, pero el uso poco habitual
de un argumento para una pila legible para humanos es el lenguaje de programaci�n
Forth raz�n que se denomina una pila basada en el idioma.

Muchas m�quinas virtuales tambi�n est�n orientadas hacia la pila, incluida la p-


c�digo m�quina y la m�quina virtual Java.

Casi todos los entornos de computaci�n de tiempo de ejecuci�n de memoria utilizan


una pila especial PILA para tener informaci�n sobre la llamada de un procedimiento
o funci�n y de la anidaci�n con el fin de cambiar al contexto de la llamada a
restaurar cuando la llamada termina. Ellos siguen un protocolo de tiempo de
ejecuci�n entre el que llama y el llamado para guardar los argumentos y el valor de
retorno en la pila. Pila es una forma importante de apoyar llamadas anidadas o a
funciones recursivas. Este tipo de pila se utiliza impl�citamente por el compilador
para apoyar CALL y RETURN estados (o sus equivalentes), y no es manipulada
directamente por el programador.

Algunos lenguajes de programaci�n utilizar la pila para almacenar datos que son
locales a un procedimiento. El espacio para los datos locales se asigna a los temas
de la pila cuando el procedimiento se introduce, y son borradas cuando el
procedimiento termina. El lenguaje de programaci�n C es generalmente aplicado de
esta manera. Utilizando la misma pila de los datos y llamadas de procedimiento
tiene importantes consecuencias para la seguridad (ver m�s abajo), de los que un
programador debe ser consciente, a fin de evitar la introducci�n de graves errores
de seguridad en un programa.

Vous aimerez peut-être aussi