Pila en c
-
Upload
david-delgadillo -
Category
Documents
-
view
214 -
download
0
Transcript of Pila en c
-
7/24/2019 Pila en c
1/8
Pila (Informtica)Una pila (stacken ingls) es una lista ordinal o estructura de datosen la que el modo deacceso a sus elementos es de tipo LIFO(del ingls Last In First Out, ltimo en entrar,primero en salir) que permite almacenar y recuperar datos !sta estructura se aplica enmultitud de ocasiones en el rea deinformticade"ido a su simplicidad y ordenaci#n
impl$cita de la propia estructuraPara el mane%o de los datos se cuenta con dos operaciones "sicas& apilar (push), quecoloca un o"%eto en la pila, y su operaci#n in'ersa, retirar (o desapilar,pop), que retira elltimo elemento apilado
!n cada momento s#lo se tiene acceso a la parte superior de la pila, es decir, al ltimoo"%eto apilado (denominado O, Top of Stacken ingls) La operaci#n retirar permite lao"tenci#n de este elemento, que es retirado de la pila permitiendo el acceso al siguiente(apilado con anterioridad), que pasa a ser el nue'o O
Por analog$a con o"%etos cotidianos, una operaci#n apilar equi'aldr$a a colocar un platoso"re una pila de platos, y una operaci#n retirar a retirarlo
* modo de resumen tipo de datos, la pila es un contenedor de nodos y tiene dos
operaciones "sicas& pus+ (o apilar) y pop (o desapilar) Pus+ a-ade un nodo a laparte superior de la pila, de%ando por de"a%o el resto de los nodos Pop elimina y
de'uel'e el actual nodo superior de la pila Una metfora que se utili.a con frecuencia
es la idea de una pila de platos en una cafeter$a con muelle de pila !n esa serie, s#lo
la primera placa es 'isi"le y accesi"le para el usuario, todas las dems placas
permanecen ocultas /omo se a-aden las nue'as placas, cada nue'a placa se
con'ierte en la parte superior de la pila, escondidos de"a%o de cada plato, empu%ando a
la pila de placas * medida que la placa superior se elimina de la pila, la segunda placa
se con'ierte en la parte superior de la pila 0os principios importantes son ilustrados
por esta metfora& !n primer lugar la ltima salida es un principio, la segunda es que el
contenido de la pila est oculto #lo la placa de la parte superior es 'isi"le, por lo que
para 'er lo que +ay en la tercera placa, el primer y segundo platos tendrn que ser
retirados
Operaciones
Una pila cuenta con 1 operaciones imprescindi"les& apilar y desapilar, a las que en las
implementaciones modernas de las pilas se suelen a-adir ms de uso +a"itual
Crear:se crea la pila 'ac$a (constructor)
Tamao:regresa el numero de elementos de la pila (si.e)
Apilar:se a-ade un elemento a la pila(pus+)
Desapilar:se elimina el elemento frontal de la pila(pop)
Cima:de'uel'e el elemento que esta en la cima de la pila (top o pee2)
Vaca:de'uel'e cierto si la pila est 'ac$a o falso en caso contrario (empty)
http://es.wikipedia.org/wiki/Idioma_ingl%C3%A9shttp://es.wikipedia.org/wiki/Estructura_de_datoshttp://es.wikipedia.org/wiki/Estructura_de_datoshttp://es.wikipedia.org/wiki/LIFOhttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Estructura_de_datoshttp://es.wikipedia.org/wiki/LIFOhttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Idioma_ingl%C3%A9s -
7/24/2019 Pila en c
2/8
Implementacin
Un requisito t$pico de almacenamiento de una pila de n elementos es O(n) !l requisito
t$pico de tiempo de O(3) las operaciones tam"in son fciles de satisfacer con un array
o con listas enla.adas simples
La "i"lioteca de plantillas de /44 estndar proporciona una 5pila5 clase templated que
se limita a s#lo apilar6desapilar operaciones 7a'a contiene una "i"lioteca de la clase
Pila que es una especiali.aci#n de 8ector !sto podr$a ser considerado como un defecto,
porque el dise-o +eredado get () de 8ector mtodo LIFO ignora la limitaci#n de la Pila
-
7/24/2019 Pila en c
3/8
/#digo para /44
#ifndef PILA
#define PILA // define la pila
templateclassPila {
private:
structNodo {
T elemento;
Nodo*siuiente; // coloca el nodo en la seunda posicion
!*ultimo;
unsinedintelementos;
pu"lic:
Pila${
elementos %&;
!
'Pila${
()ileelementos %&$pop$;
!
voidpus)constT+elem${
Nodo*au, %ne(Nodo;
au,->elemento %elem;
au,->siuiente %ultimo;
ultimo %au,;
..elementos;
!
voidpop${
Nodo*au, %ultimo;
ultimo %ultimo->siuiente;
deleteau,;
--elementos;
!
T cima$const{
returnultimo->elemento;
!
"oolvacia$const{
returnelementos %%&; !
unsinedintaltura$const{
returnelementos;
!
!;
-
7/24/2019 Pila en c
4/8
#endif
Una pila t$pica es un rea de la memoria de los computadores con un origen 9%o y un
tama-o 'aria"le *l principio, el tama-o de la pila es cero Un puntero de pila, por lo
general en forma de un registro de +ard:are, apunta a la ms reciente locali.aci#n en
la pila; cuando la pila tiene un tama-o de cero, el puntero de pila de puntos en elorigen de la pila
Las dos operaciones aplica"les a todas las pilas son&
Una operaci#n apilar, en el que un elemento de datos se coloca en el lugar
apuntado por el puntero de pila, y la direcci#n en el puntero de pila se a%usta por el
tama-o de los datos de partida
Una operaci#n desapilar& un elemento de datos en la u"icaci#n actual apuntado
por el puntero de pila es eliminado, y el puntero de pila se a%usta por el tama-o de
los datos de partida
-
7/24/2019 Pila en c
5/8
an0ana Pl1tano
Pl1tano %%rotar a la derec)a%%> 2resa
2resa an0ana
2resa an0ana
Pl1tano %%rotar a la i03uierda%%> 2resa
an0ana Pl1tano
Una pila es normalmente representada en los ordenadores por un "loque de celdas de
memoria, con los 5de a"a%o5 en una u"icaci#n 9%a, y el puntero de pila de la direcci#n
actual de la 5cima5 de clulas de la pila !n la parte superior e inferior se utili.a la
terminolog$a con independencia de que la pila crece realmente a la "a%a de direcciones
de memoria o direcciones de memoria +acia mayores
*pilando un elemento en la pila,se a%usta el puntero de pila por el tama-o de
elementos (ya sea decrementar o incrementar, en funci#n de la direcci#n en que crece
la pila en la memoria), que apunta a la pr#=ima celda, y copia el nue'o elemento de lacima en rea de la pila 0ependiendo de nue'o so"re la aplicaci#n e=acta, al 9nal de
una operaci#n de apilar, el puntero de pila puede se-alar a la siguiente u"icaci#n no
utili.ado en la pila, o tal 'e. apunte al m=imo elemento de la pila i la pila apunta al
m=imo elemento de la pila, el puntero de pila se actuali.ar antes de que un nue'o
elemento se apile, si el puntero que apunta a la pr#=ima u"icaci#n disponi"le en la pila,
que se actuali.ar despus de que el m=imo elemento se apile en la pila
0esapilando es simplemente la in'ersa de apilar !l primer elemento de la pila es
eliminado y el puntero de pila se actuali.a, en el orden opuesto de la utili.ada en la
operaci#n de apilar
Aotaci#n Polaca In'ersa
La notaci#n polaca in'ersa, notaci#n de post9%o, o notaci#n pos9%a, (en ingls, Be'ersePolis+ notation, o BPA), es un mtodo alge"raico alternati'o de introducci#n de datosu nom"re 'iene por analog$a con la relacionadanotaci#n polaca, una notaci#n depre9%o introducida en 3?1> por el matemtico polaco7an Cu2asie:ic., en donde cada
http://es.wikipedia.org/wiki/Idioma_ingl%C3%A9shttp://es.wikipedia.org/wiki/Notaci%C3%B3n_polacahttp://es.wikipedia.org/wiki/Notaci%C3%B3n_polacahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Jan_%C5%81ukasiewiczhttp://es.wikipedia.org/wiki/Idioma_ingl%C3%A9shttp://es.wikipedia.org/wiki/Notaci%C3%B3n_polacahttp://es.wikipedia.org/wiki/Poloniahttp://es.wikipedia.org/wiki/Jan_%C5%81ukasiewicz -
7/24/2019 Pila en c
6/8
operador est antes de sus operandos !n la notaci#n polaca in'ersa es al re's,primero estn los operandos y despus 'iene el operador que 'a a reali.ar los clculosso"re ellos anto la notaci#n polaca como la notaci#n polaca in'ersa no necesitan usarparntesis para indicar el orden de las operaciones mientras la aridaddel operador sea9%a
Funcionamientou principio es el de e'aluar los datos directamente cuando se introducen y mane%arlosdentro de una estructura LIFO(Last In First Out), lo que optimi.a los procesosa la +orade programarDsicamente la diferencias con el mtodo alge"raico o notaci#n de in9%oes que, ale'aluar los datos directamente al introducirlos, no es necesario ordenar la e'aluaci#nde los mismos, y que para e%ecutar un comando, primero se de"en introducir todos susargumentos, as$, para +acer una suma a4"Ec el BPA lo mane%ar$a a " 4, de%ando elresultado c directamenteA#tese que la notaci#n polaca in'ersa no es literalmente la imagen especular de lanotaci#n polaca& el orden de los operandos es igual en la tres notaciones(in9%o,pre9%oo polaca, y post9%o o polaca in'ersa), lo que cam"ia es que el lugardonde 'a el operador !n la notaci#n in9%a, el operador 'a en el medio de losoperandos, mientras que en la notaci#n polaca 'a antes y en la notaci#n polaca in'ersa
'a despus *s$ pues, 5G> 6 35 (en notaci#n de in9%o), se escri"e como 56 G> 35 (ennotaci#n polaca) y como 5G> 3 65 en notaci#n polaca in'ersa !l orden de losoperandos es importante cuando se mane%an operadores no conmutati'os (como laresta o la di'isi#n), as$, si di'idimos 3> entre 1, por e%emplo, en las tres notaciones sede"e escri"ir de la siguiente manera& 53> 6 15, 56 3> 15, 53> 1 65
8enta%as Los clculos se reali.an secuencialmentesegn se 'an
introduciendo operadores, en 'e. de tener que esperar a escri"ir la e=presi#n alcompleto 0e"ido a esto, se cometen menos errores alprocesar clculoscomple%os
!l proceso de apilaci#npermite guardar resultados intermedios para un usoposterior !sta caracter$stica permite que las calculadoras BPA computen
e=presiones de comple%idad muy superior a la que alcan.an las calculadorasalge"raicas Ao requiereparntesisni reglas de preferencia, al contrario que la notaci#n
alge"raica, ya que el proceso de apilamiento permite calcular la e=presi#n poretapas
!n las calculadoras BPA, el clculo se reali.a sin tener que apretar la tecla 5E5(aunque se requiere pulsar la tecla 5!nter5 para a-adir cifras a la pila)
!l estado interno de la calculadora siempre consiste en una pila de cifras so"relas que se puede operar 0ado que no se pueden introducir operadores en lapila, la notaci#n polaca in'ersa es conceptualmente ms sencilla y menos dadaa errores que otras notaciones
!n trminos educati'os, la notaci#n polaca in'ersa requiera que el estudiantecomprenda la e=presi#n que se est calculando /opiar una e=presi#n
alge"raica directamente a una calculadora sin comprender la aritmtica dar unresultado err#neo
0es'enta%as La adopci#n casi uni'ersal de la notaci#n alge"raicaen los sistemas educati'os
+ace que no +aya muc+as ra.ones prcticas inmediatas para que los alumnosaprendan la notaci#n polaca in'ersa Ao o"stante, muc+os estudiantes a9rmanque, una 'e. aprendida, la notaci#n polaca in'ersa simpli9ca en gran manera elclculo de e=presiones comple%as
http://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/wiki/LIFOhttp://es.wikipedia.org/w/index.php?title=Optimizaci%C3%B3n_de_procesos&action=edit&redlink=1http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_prefijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_prefijohttp://es.wikipedia.org/w/index.php?title=C%C3%A1lculo_secuencial&action=edit&redlink=1http://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/C%C3%A1lculohttp://es.wikipedia.org/w/index.php?title=Pila_(computaci%C3%B3n)&action=edit&redlink=1http://es.wikipedia.org/wiki/Par%C3%A9ntesishttp://es.wikipedia.org/wiki/Par%C3%A9ntesishttp://es.wikipedia.org/wiki/Pila_(inform%C3%A1tica)http://es.wikipedia.org/wiki/Notaci%C3%B3n_algebraicahttp://es.wikipedia.org/wiki/Aridadhttp://es.wikipedia.org/wiki/LIFOhttp://es.wikipedia.org/w/index.php?title=Optimizaci%C3%B3n_de_procesos&action=edit&redlink=1http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_infijohttp://es.wikipedia.org/wiki/Notaci%C3%B3n_de_prefijohttp://es.wikipedia.org/w/index.php?title=C%C3%A1lculo_secuencial&action=edit&redlink=1http://es.wikipedia.org/wiki/Operadorhttp://es.wikipedia.org/wiki/C%C3%A1lculohttp://es.wikipedia.org/w/index.php?title=Pila_(computaci%C3%B3n)&action=edit&redlink=1http://es.wikipedia.org/wiki/Par%C3%A9ntesishttp://es.wikipedia.org/wiki/Pila_(inform%C3%A1tica)http://es.wikipedia.org/wiki/Notaci%C3%B3n_algebraica -
7/24/2019 Pila en c
7/8
!s dif$cil usar la notaci#n polaca in'ersa al escri"ir a mano, dada la importanciade los espacios para separar operandos e requiere un caligraf$a muy clarapara e'itar confundir, por e%emplo, 31 HG4 (EG) de 31H G4 (E31) o 3 1HG4(E1HJ)
Las calculadoras BPA son relati'amente raras For.ado a usar una calculadoraalge"raica, el usuario de una calculadora BPA t$picamente comete errores ms
frecuentemente de"ido a sus +"itos de uso normales Ao o"stante, esto no esun pro"lema tan gra'e en la actualidad, de"ido a que muc+os sistemasoperati'os pueden emular calculadoras BPA
-
7/24/2019 Pila en c
8/8