Taller - Pila y Cola

TALLER  –  PILAS  y  COLAS  

Programación Avanzada

Profesor: Jorge Lanzarotti - Ayudante: Patricio Beckmann
Profesor:  Roberto  Konow  –  Ayudante:  Chien-­‐Fu  Chen  

Taller - Pila y Cola

Las pilas y colas son TDA (Tipo de dato abstracto) que utiliza la EDD (Estructura de dato) anteriormente vista “LISTA”, en vulgares palabras son listas que se comportan de distintas maneras que sólo pueden insertar y eliminar nodos en uno de los extremos de la lista (al principio o al final). Estos métodos se conocen como push (empujar o agregar) y pop (tirar o eliminar y además retorna su valor).

PILA Comportamiento de la lista LIFO (Last In First Out), el último en entrar es el primero en salir. Ej: Apilamos un monton de libros, al termino de este si queremos sacar el primer libro que ingresamos tendremos que retirar todos los anteriores primero para llegar a ese.

COLA Comportamiento de la lista FIFO (First In First Out), el primero en entrar es el primero en salir. Ej: Una cola en el supermercado, el primero que entra a la caja va ser el primero que lo atienden asi que va a ser el primero en salir, los demas tienen que esperar en una cola.

Nos centraremos primero en entender PILAS y después programaremos COLAS. Para darnos una idea de como funciona las pilas nos guiaremos de los siguientes diagramas: Método push: Ingresaremos 3 nodos.

Al finalizar toda la inserción podemos ver que el primer nodo que ingresamos (1) quedó al final de nuestra pila, para poder recuperarla tendremos que sacar (3) y (2) respectivamente para poder llegar a (1).

Si queremos obtener el valor del primer nodo que ingresamos tendremos que dejar la lista vacía ya que para obtenerlo tenemos que retirar los nodos que esten arriba de él y hacerle un pop al primero como el diagrama lo demuestra. Para obtener el comportamiento LIFO tendremos que insertar en la cabeza y eliminar también por ahí.Método pop: Vamos a obtener el valor del primer nodo que insertamos. } void Push(int v). int Pop(). }. además de quitarlo retorna su valor. La  clase  pila     Como  ven  no  tiene  diferencia  a  la   clase  lista.   class pila { private: nodo *head. public: pila() { head = NULL.  pero  veremos  como  se   diferencian  en  los  métodos.         . Al momento de realizar un pop este quita de la pila el nodo de mas arriba o el último que fue ingresado.

<< X->Pop() << endl. << X->Pop() << endl. int v. cout << "Push(20)" X->Push(2).                                   int main() { pila *X = new pila(). head = nuevo.  éste  debe  ser  capaz  de  imprimir  todos   los  valores  en  orden  de  llegada. if(!head) return -1. << X->Pop() << endl. cout << "Push(10)" cout << "Pop() = " X->Push(3).   2. << X->Pop() << endl. v = aux->get_valor(). X->Push(1). << endl. << endl. aux = head.             . << endl.  la  pila  no  puede  sufrir  de  ningún  cambio. << X->Pop() << endl.         Ejercicios:     1. nuevo->sig = head. head = aux->sig. return v. cout << "Push(40)" X->Push(4). Implemente  una  Cola  con  sus  respectivos  métodos  (push  y  pop). << endl. }   •   Método  pop:   int pila::Pop() { nodo *aux.   TIP  Obligatorio:  Se  necesita  otra  pila  para  realizarlo. cout << "Push(90)" cout << "Pop() = " cout << "Pop() = " }   << endl.•   Método  push:   void pila::Push(int v) { nodo *nuevo = new nodo(v). cout << "Push(30)" cout << "Pop() = " cout << "Pop() = " X->Push(5). Implementar  el  método  imprimir. }   // puntero a nodo auxiliar // variable auxiliar para retornar el valor // Si la cola esta vacia retornamos -1 //guardamos el puntero a la cabeza //la nueva cabeza es el siguiente de la cabeza anterior //guardamos el valor del nodo que retiramos •   main  y  resultado.