Vous êtes sur la page 1sur 8

13-09-2012

Pilas y Colas

Prof.: Carolina Zambrano.

Pilas y Colas
Existe otro conjunto importante de problemas que se pueden modelar utilizando los conocidos:
PILAS (LIFO) COLAS (FIFO)

Recordar que la importancia de aprender a resolver problemas es Dividir para conquistar. En trminos simples esto significa que usando funciones o procedimientos podemos dividir el problema para que cada tarea particular sea abordada por la funcin o procedimiento especfico.
Prof.Carolina Zambrano

13-09-2012

Qu es una PILA?
Una pila es una estructura que almacena elementos (datos), y que provee la siguiente API o funciones: POP: Saca (eliminando) el elemento que est en el tope de la pila. PUSH: Coloca un elemento en el tope de la pila. Este mecanismo es conocido como LIFO (Last IN, First OUT) ltimo que entra es el primero en salir.
Prof.Carolina Zambrano

Ejemplo.
Operacin PUSH Operacin POP

PILA

La operacin de PUSH Y POP se realiza desde el tope de la pila.

Prof.Carolina Zambrano

13-09-2012

Es decir...imaginemos lo siguiente
Si P es una pila:
P.push(3); P.push(2); Si hago POP, que elemento retorna?

Prof.Carolina Zambrano

Ejemplos de uso...
Si se tiene un conjunto ordenado de datos... Se pueden invertir, fcilmente, usando una PILA. Cmo ? Sirvanse entrar a:
http://www.cosc.canterbury.ac.nz/mukundan/J avaP.html
Donde encontraran simuladores de todos los TAD (Tipos de Datos Abstractos).
Prof.Carolina Zambrano

13-09-2012

Ejemplos en Cdigo Lenguaje C


Push
void Push (Pila *pila, int v) { pNodo nuevo; /* Crear un nodo nuevo con su direccin de memoria */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Aadimos la pila a continuacin del nuevo nodo */ nuevo->siguiente = *pila; /* Ahora, el comienzo de nuestra pila es en nuevo nodo */ *pila = nuevo; }
Prof.Carolina Zambrano

Ejemplos en Cdigo Lenguaje C


Pop
int Pop (Pila *pila) { pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la pila */ nodo = *pila; if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0 */ /* Asignamos a pila toda la pila menos el primer elemento */ *pila = nodo->siguiente; /* Guardamos el valor de retorno */ v = nodo->valor; /* Borrar el nodo */ free(nodo); return v; }
Prof.Carolina Zambrano

13-09-2012

Colas
Una Cola es una estructura que almacena datos, y que provee la siguiente API:
PUT: Coloca un elemento al final de la cola. GET: Saca el primer elemento de la cola.

Este mecanismo es conocido como FIFO (First IN, First OUT) primero que entra es el primero en salir.

Prof.Carolina Zambrano

Es decir...
Si C es una cola:
C.put(9); C.put(10); Si hago C.GET, qu elemento retorna?

Prof.Carolina Zambrano

13-09-2012

Ejemplos de uso
Lnea de atencin en el banco. Una de sus principales aplicaciones es la simulacin de procesos en lnea.

Prof.Carolina Zambrano

Ejemplo
PUT GET

Entrada de elementos a la Cola ESTE ES EL FINAL DE LA COLA


Prof.Carolina Zambrano

Salida de elementos de Cola ESTE ES EL COMIENZO DE LA COLA

13-09-2012

Ejemplos en Cdigo Lenguaje C


PUT
void PUT(pNodo *primero, pNodo *ultimo, int v) { pNodo nuevo; /* Crear un nodo nuevo con su direccin de memoria */ nuevo = (pNodo)malloc(sizeof(tipoNodo)); nuevo->valor = v; /* Primer elemento de la cola nuevo->siguiente = NULL; /* Si la cola no estaba vaca, aadimos el nuevo a continuacin de ultimo */ if(*ultimo) (*ultimo)->siguiente = nuevo; /* Ahora, el ltimo elemento de la cola es el nuevo nodo */ *ultimo = nuevo; /* Si primero es NULL, la cola estaba vaca, ahora primero apuntar tambin al nuevo nodo */ if(!*primero) *primero = nuevo; Prof.Carolina Zambrano }

Ejemplos en Cdigo Lenguaje C


GET
int GET (pNodo *primero, pNodo *ultimo) { pNodo nodo; /* variable auxiliar para manipular nodo */ int v; /* variable auxiliar para retorno */ /* Nodo apunta al primer elemento de la cola */ nodo = *primero; if(!nodo) return 0; /* Si no hay nodos en la cola retornamos 0 */ /* Asignamos a primero la direccin del segundo nodo */ *primero = nodo->siguiente; /* Guardamos el valor de retorno */ v = nodo->valor; /* Borrar el nodo */ free(nodo); /* Si la cola qued vaca, ultimo debe ser NULL tambin*/ if(!*primero) *ultimo = NULL; return v; }
Prof.Carolina Zambrano

13-09-2012

Consultas?

Prof.: Carolina Zambrano.

Vous aimerez peut-être aussi