Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur Pilas y Colas Ricardo Coppo rcoppo@uns.edu.ar Tipo de datos abstracto: Pila Una pila es una estructura en la que el acceso se limita al último elemento insertado. Es comparable con una pila de monedas, diarios, dinero, etc. El último elemento ingresado es el primer elemento a quitar (LIFO) Pilas y Colas Ricardo Coppo 2 Principios de Computadoras II Universidad Nacional del Sur Operaciones con pilas push( x ) pop() Inserta el elemento x al tope de la pila Retorna el elemento que se encuentra en el tope de la pila y lo elimina de la estructura top() Retorna el elemento que se encuentra en el tope de la pila, no lo quita de la estructura Pilas y Colas Ricardo Coppo 3 Principios de Computadoras II Universidad Nacional del Sur Operaciones con pilas clear() Inicializa una pila vacía. Si la pila ya existe elimina todos los elementos almacenados en ella isEmpty() Retorna una variable lógica = true si la lista está vacía. Pilas y Colas Ricardo Coppo 4 Principios de Computadoras II Universidad Nacional del Sur Interfase Pila Pilas y Colas Ricardo Coppo 5 Principios de Computadoras II Universidad Nacional del Sur Implementación de Pilas Existen dos técnicas tradicionales para implementar pilas Usar un arreglo, y un índice que indica el tope Usar una lista enlazada, con inserción y quite solo en la cabeza de la lista. Pilas y Colas Ricardo Coppo 6 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos crece tope (prox) Pilas y Colas Ricardo Coppo 7 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos Pilas y Colas Ricardo Coppo 8 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 9 Principios de Computadoras II Universidad Nacional del Sur Ejemplo de uso Pilas y Colas Ricardo Coppo 10 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas deque enqueue Pilas y Colas Ricardo Coppo 11 Principios de Computadoras II Universidad Nacional del Sur Implementación con Listas Enlazadas Pilas y Colas Ricardo Coppo 12 Principios de Computadoras II Universidad Nacional del Sur Implementación con Listas Enlazadas Pilas y Colas Ricardo Coppo 13 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 14 Principios de Computadoras II Universidad Nacional del Sur Ejemplo de uso Pilas y Colas Ricardo Coppo 15 Principios de Computadoras II Universidad Nacional del Sur Aplicaciones típicas con pilas Invertir una cadena de símbolos Evaluación de expresiones polacas inversas Invocaciones de subprogramas Equilibrio de paréntesis en expresiones Pilas y Colas Ricardo Coppo 16 Principios de Computadoras II Universidad Nacional del Sur Tipo de datos abstracto: Cola Una cola es una estructura en la que el acceso se limita a la inserción en el último lugar y el quite del primero. Es comparable con una cola de personas en el banco, una cola de trabajos pendientes, etc. El primer elemento ingresado es el primero en salir de la estructura (en orden de llegada). Estructura FIFO – First In First Out. Pilas y Colas Ricardo Coppo 17 Principios de Computadoras II Universidad Nacional del Sur Operaciones con colas insertar(x) – enqueue(x) quitar() - dequeue() Insertar un elemento al final de la cola Retirar el elemento que se encuentra al principio de la cola primero() Observar que elemento se encuentra al principio de la cola sin modificar la información almacenada Pilas y Colas Ricardo Coppo 18 Principios de Computadoras II Universidad Nacional del Sur Operaciones con colas isEmpty() Retorna un booleano que indica si la cola está vacía clear() Inicializa una cola. Si ya posee elementos los elimina. Pilas y Colas Ricardo Coppo 19 Principios de Computadoras II Universidad Nacional del Sur Interfase Cola Pilas y Colas Ricardo Coppo 20 Principios de Computadoras II Universidad Nacional del Sur Implementación de Colas Existen dos técnicas tradicionales para implementar colas Usar un arreglo, y dos índices (principio y fin) que “rotan” o se “reciclan” sobre la estructura Usar una lista enlazada, con inserción al final y quite al principio de la lista. Pilas y Colas Ricardo Coppo 21 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos fin nroElementos = 0 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 22 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos insertar( a ) fin a nroElementos = 1 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope.. Pilas y Colas Ricardo Coppo 23 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos insertar( b ) fin a b nroElementos = 2 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 24 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos insertar( c ) fin a b c nroElementos = 3 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 25 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglo quitar() fin a b c nroElementos = 2 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 26 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos quitar() fin a b c nroElementos = 1 tope Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 27 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos quitar() fin a b c tope nroElementos = 0 Para insertar al final, incrementar fin y almacenar. Para quitar, retirar primer elemento y luego avanzar tope. Pilas y Colas Ricardo Coppo 28 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos fin a b a c tope b nroElementos = 2 Cuando se llega al final del vector se reciclan los indices (Implementación circular) Pilas y Colas Ricardo Coppo 29 Principios de Computadoras II Universidad Nacional del Sur Implementación con arreglos insertar( c ) fin c b a c tope b nroElementos = 3 Cuando se llega al final del vector se reciclan los indices (Implementación circular) Pilas y Colas Ricardo Coppo 30 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 31 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 32 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 33 Principios de Computadoras II Universidad Nacional del Sur Implementación con listas enlazadas Pilas y Colas Ricardo Coppo 34 Principios de Computadoras II Universidad Nacional del Sur Aplicaciones de colas Procesamiento de transacciones comerciales que actualizan una base de datos en un servidor Planificador de procesos en un sistema de multiprogramación Simulacion comandado por eventos Pilas y Colas Ricardo Coppo 35 Principios de Computadoras II Universidad Nacional del Sur Para investigar… La biblioteca de Java posee clases para operar con listas enlazadas, pilas y colas. Investigue a las clases LinkedList, Stack, Queue y Deque. Compare los métodos de las clases de biblioteca con las vistas en clase. ¿Qué funcionalidad adicional incorporan? Pilas y Colas Ricardo Coppo 36 Principios de Computadoras II Universidad Nacional del Sur Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Universidad Nacional del Sur Pilas y Colas Ricardo Coppo rcoppo@uns.edu.ar