Welcome to Scribd. Sign in or start your free trial to enjoy unlimited e-books, audiobooks & documents.Find out more
Download
Standard view
Full view
of .
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Pila

Pila

Ratings: (0)|Views: 10|Likes:
Published by emililla

More info:

Published by: emililla on Jul 02, 2012
Copyright:Attribution Non-commercial

Availability:

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

03/26/2014

pdf

text

original

 
Pila (informática)1
Pila (informática)
Una
pila
(
stack 
en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es detipo LIFO (del inglés
 Last In First Out 
,
último en
entrar
, primero en
 salir
) que permite almacenar y recuperardatos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad yordenación implícita de la propia estructura.Para el manejo de los datos se 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, esdecir, al último objeto apilado (denominado
TOS
,
Top of Stack 
eninglés). La operación
retirar
permite la obtención de este elemento,que es retirado de la pila permitiendo el acceso al siguiente (apiladocon anterioridad), que pasa a ser el nuevo TOS.Por analogía con objetos cotidianos, una operación
apilar
equivaldría acolocar un plato sobre una pila de platos, y una operación
retirar
a retirarlo.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 contextoImplementación de recursividad.
Historia
El método de pila para la evaluación de expresiones fue propuesto en1955 y dos años después patentado por Fiedrich L.Bauer, quién recibióen 1988 el premio "IEEE Computer Society Pioneer Award" por sutrabajo en el desarrollo de dicha estructura de datos.
Pila como tipo abstracto de datos
A modo de resumen tipo de datos, la pila es un contenedor de nodos ytiene 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. 'Pop' elimina y devuelveel actual nodo superior de la pila. Una metáfora que se utiliza con frecuencia es la idea de una pila de platos en unacafetería con muelle de pila. En esa serie, sólo la primera placa es visible y accesible para el usuario, todas las demásplacas permanecen ocultas. Como se añaden las nuevas placas, cada nueva placa se convierte en la parte superior dela pila, escondidos debajo de cada plato, empujando a la pila de placas. A medida que la placa superior se elimina dela pila, la segunda placa se convierte en la parte superior de la pila. Dos principios importantes son ilustrados poresta metáfora: En primer lugar la última salida es un principio, la segunda es que el contenido de la pila está oculto.Sólo la placa de la parte superior es visible, por lo que para ver lo que hay en la tercera placa, el primer y segundoplatos tendrán que ser retirados.
 
Pila (informática)2
Operaciones
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las implementaciones modernasde las pilas se suelen añadir más de uso habitual.
Crear:
se crea la pila vacía. (constructor)
Tamaño:
regresa el numero de elementos de la pila. (size)
Apilar:
se añade un elemento a la pila.(push)
Desapilar:
se elimina el elemento frontal de la pila.(pop)
Cima:
devuelve el elemento que esta en la cima de la pila. (top o peek)
Vacía:
devuelve cierto si la pila está vacía o falso en caso contrario (empty).
Implementación
Un requisito típico de almacenamiento de una pila de n elementos es O(n). El requisito típico de tiempo de O(1) lasoperaciones también son fáciles de satisfacer con un array o con listas enlazadas simples.La biblioteca de plantillas de C++ estándar proporciona una "pila" clase templated que se limita a sóloapilar/desapilar operaciones. Java contiene una biblioteca de la clase Pila que es una especialización de Vector. Estopodría ser considerado como un defecto, porque el diseño heredado get () de Vector método LIFO ignora lalimitación de la Pila.Estos son ejemplos sencillos de una pila con las operaciones descritas anteriormente (pero no hay comprobación deerrores).
Implementación en Python
class
 
Stack
(object): 
def
 __init__(self):  self.stack_pointer= None  
def
 push(self, element):  self.stack_pointer=Node(element,self.stack_pointer)  
def
 pop(self): e= self.stack_pointer.element  self.stack_pointer= self.stack_pointer.next  
return
e 
def
 peek(self):  
return
 self.stack_pointer.element  
def
 __len__(self): i= 0 sp= self.stack_pointer  
while
sp:i+= 1 sp=sp.next  
return
i
class
 
 Node
(object): 
def
 __init__(self, element=None,next=None):
 
Pila (informática)3
 self.element=element  self.next= next
if
__name__== '__main__':  
# small use example
s=Stack() 
for
i
in
 range(10):s.push(i)  
for
i
in
 range(len(s)):
 print
(s.pop())
Implementación en Maude
La PilaNV es la pila no vacía, que diferenciamos de la pila normal a la hora de tomar en cuenta errores. El elementoX representa el tipo de valor que puede contener la pila: entero, carácter, registro, etc.
fmod PILA-GENÉRICA {X :: TRIV} issorts Pila{X} PilaNV{X}.subsorts PilaNV{X} < Pila{X}.***generadores:op crear: -> Pila {X} [ctor].op apilar : X$Elt Pila{X} -> PilaNV{X} [ctor].***constructoresop desapilar : Pila{X} -> Pila{X}.***selectoresop cima : PilaNV{X} -> X$Elt.***variablesvar P : Pila{X}.var E : X$Elt.***ecuacioneseq desapilar (crear) = crear.eq desapilar(apilar(E, P)) = P.eq cima(apilar(E, P)) = E.endfm
Implementación en Visual Basic
Public Class StackPrivate p_index As IntegerPrivate list As New ArrayListPublic Sub New()p_index = -1End SubReadOnly Property count

You're Reading a Free Preview

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