Pila en c

download Pila en c

of 8

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