TDA Pila en Java
Una pila es una versión restringida de una lista. En todo momento sólo se tiene acceso a la parte superior de la pila, es
decir, al último objeto apilado. Por esta razón, a una pila se le conoce como una estructura de datos
LIFO(Last In First Out).
Una pila al ser una lista puede almacenar en el campo de información cualquier tipo de valor (int, char, float, vector de
caracteres, un objeto, etc), por analogía con objetos cotidianos, una operación apilar(push) equivaldría a colocar un plato
sobre una pila de platos, y una operación retirar(pop) a quitarlo. En palabras sencillas es un lugar donde se almacenan
datos.
Leamos un par de ejemplos simples de pila en Java:
Pila programada sin usar la clase Stack.
Métodos:
empty(): Regresa valor booleano true si la pila se encuentra vacía.
push(item) : Introduce el objeto dentro de la pila.
pop(): Remueve el objeto del tope de la pila
peek(): Muestra el objeto del tope de la pila sin extraerlo.
search(item): Regresa un entero con la posición del objeto buscado o regresa un -1 si no se encuentra el objeto.
Gestión de Llamadas en un Central Telefónica (Último en Entrar, Primero en Salir)
Problema: Una central telefónica recibe llamadas y las pone en una cola de espera si los operadores están ocupados.
Cuando un operador se libera, atiende la última llamada que entró a la cola.
Implementación con Pila:
Una pila para representar las llamadas en espera.
Ejemplo de Flujo y Salida por Pantalla:
--- Central Telefónica ---
Llamada entrante: Cliente A (Problema de conexión)
Pila de llamadas en espera: [Cliente A]
Llamada entrante: Cliente B (Consulta de factura)
Pila de llamadas en espera: [Cliente A, Cliente B]
Llamada entrante: Cliente C (Solicitud de alta)
Pila de llamadas en espera: [Cliente A, Cliente B, Cliente C]
---
Operador libre: Atendiendo la última llamada (LIFO)
Atendiendo a: Cliente C (Solicitud de alta)
Pila de llamadas en espera: [Cliente A, Cliente B]
---
Operador libre: Atendiendo la última llamada (LIFO)
Atendiendo a: Cliente B (Consulta de factura)
Pila de llamadas en espera: [Cliente A]
---
Llamada entrante: Cliente D (Soporte técnico)
Pila de llamadas en espera: [Cliente A, Cliente D]
---
Operador libre: Atendiendo la última llamada (LIFO)
Atendiendo a: Cliente D (Soporte técnico)
Pila de llamadas en espera: [Cliente A]
---
Operador libre: Atendiendo la última llamada (LIFO)
Atendiendo a: Cliente A (Problema de conexión)
Pila de llamadas en espera: [ ]
---
Operador libre: No hay llamadas en espera.