Está en la página 1de 4

NOMBRE: WILLIAM ZABALETA LEUCA

MATERIA: ESTRUCTURA DE DATOS


CURSO: 2do B Noche

PILAS Y COLAS EN JAVA


Pilas:
Una pila (stack en ingls) es una lista ordinal o estructura de datos en la que el
modo de acceso 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.
Las pilas se construyen en memoria. Por cada dato insertado, el tem superior
anterior y todos los datos inferiores se mueven hacia abajo. Cuando llega el
momento de sacar un tem de la pila, se recupera y se borra de la pila el tem
superior.
Operaciones de la pila: Una pila cuenta con 2 operaciones imprescindibles: apilar
y des apilar, a las que en las implementaciones modernas de las pilas se suelen
aadir ms de uso habitual.
Crear: se crea la pila vaca (size).
Apilar: se aade un elemento a la pila. (Push)
Des apilar: se elimina el elemento frontal de la pila. (Pop)
Cima: devuelve el elemento que est en la cima de la pila. (Top o peek)
Vaca: devuelve cierto si la pila est vaca o falso en caso contrario (empty).

Las pilas son muy tiles en varios escenarios de programacin. Dos de los ms
comunes son:
Pilas que contienen direcciones de retorno:
Cuando el cdigo llama a un mtodo, la direccin de la primera instruccin que
sigue a la llamada se inserta en la parte superior de la pila de llamadas de
mtodos del thread actual. Cuando el mtodo llamado ejecuta la instruccin
return, se saca la direccin de la parte superior de la pila y la ejecucin contina
en esa direccin. Si un mtodo llama a otro mtodo, el comportamiento LIFO de
la pila asegura que la instruccin return del segundo mtodo transfiere la
ejecucin al primer mtodo, y la del primer mtodo transfiere la ejecucin al
cdigo que sigue al cdigo que llam al primer mtodo. Como resultado una pila
"recuerda" las direcciones de retorno de los mtodos llamados.
Pilas que contienen todos los parmetros del mtodo llamado y las variables
locales:

Cuando se llama a un mtodo, la JVM reserva memoria cerca de la direccin de


retorno y almacena todos los parmetros del mtodo llamado y las variables
locales de ese mtodo. Si el mtodo es un mtodo de ejemplar, uno de los
parmetros que almacena en la pila es la referencia del objeto actual.
Es muy comn implementar una pila utilizando un array un-dimensional o una
lista de enlace simple. En el escenario del array un-dimensional, una variable
entera, tpicamente llamada top, contiene el ndice de la parte superior de la pila.
De forma similar, una variable de referencia, tambin nombrada normalmente
como top, referencia el nodo superior del escenario de la lista de enlace simple.
Interface Stack:
// Stack.java
Package com.javajeff.cds;
public interface Stack {
boolean is Empty ();
Object peek ();
void push (Object o);
Object pop ();
}
Priorizar con Colas
La Cola es una estructura de datos donde la insercin de tem se hace en un final
(el fin de la cola) y la recuperacin/borrado de elementos se hace en el otro final
(el inicio de la cola). Como el primer elemento insertado es el primero en ser
recuperado, los desarrolladores se refieren a estas colas como estructuras FIFO
(first-in, first-out).

Operaciones Bsicas de una Cola


Crear: se crea la cola vaca.
Encolar (aadir, entrar, insertar): se aade un elemento a la cola. Se aade al
final de esta.
Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es
decir, el primer elemento que entr.
Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el
primer elemento que entr.
Vaca: devuelve cierto si la pila est vaca o falso en caso contrario (empty).

Normalmente los desarrolladores trabajan con dos tipos de colas: lineal y circular.
En ambas colas, la insercin de datos se realiza en el fin de la cola, se mueven
hacia adelante y se recuperan/borran del inicio de la cola.
La cola lineal almacena cuatro enteros, con el entero 1 en primer lugar. Esa cola
est llena y no puede almacenar ms datos adicionales porque rear identifica la
parte final de la cola. La razn de la posicin vaca, que identifica front, implica el
comportamiento lineal de la cola. Inicialmente, front y rear identifican la posicin
ms a la izquierda, lo que indica que la cola est vaca. Para almacenar el entero
1, rear avanza una posicin hacia la derecha y almacena 1 en esa posicin. Para
recuperar/borrar el entero 1, front avanza una posicin hacia la derecha.
Nota:
Para sealar que la cola lineal est vaca, no necesita gastar una posicin,
aunque esta aproximacin algunas veces es muy conveniente. En su lugar asigne
el mismo valor que indique una posicin no existente a front y a rear. Por
ejemplo, asumiendo una implementacin basada en un array un-dimensional,
front y rear podran contener -1. El ndice 0 indica entonces la posicin ms a la
izquierda, y los datos se insertarn empezando en este ndice.
Cuando rear identifique la posicin ms a la derecha, la cola lineal podra no
estar llena porque front podra haber avanzado al menos una posicin para
recuperar/borrar un dato. En este escenario, considere mover todos los tems de
datos hacia la izquierda y ajuste la posicin de front y rear de la forma apropiada
para crear ms espacio. Sin embargo, demasiado movimiento de datos puede
afectar al rendimiento, por eso debe pensar cuidadosamente en los costes de
rendimiento si necesita crear ms espacio.
La cola circular de la figura anterior tiene siete datos enteros, con el entero 1
primero. Esta cola est llena y no puede almacenar ms datos hasta que front
avance una posicin en sentido horario (para recuperar el entero 1) y rear avance
una posicin en la misma direccin (para identificar la posicin que contendr el
nuevo entero). Al igual que con la cola lineal, la razn de la posicin vaca, que
identifica front, implica el comportamiento circular de la cola. Inicialmente, front
y rear identifican la misma posicin, lo que indica una cola vaca. Entonces rear
avanza una posicin por cada nueva insercin. De forma similar, front avanza
una posicin por cada recuperacin/borrado.
Las colas son muy tiles en varios escenarios de programacin, entre los que se
encuentran:
Temporizacin de Threads:
Una JVM o un sistema operativo subyacente podran establecer varias colas para
coincidir con diferentes prioridades de los threads. La informacin del thread se
bloquea porque todos los threads con una prioridad dada se almacenan en una
cola asociada.

Trabajos de impresin:
Como una impresora normalmente es ms lenta que un ordenador, un sistema
operativo maneja los trabajos de impresin en un subsistema de impresin, que
inserta esos trabajos de impresin en una cola. El primer trabajo en esa cola se
imprime primero, y as sucesivamente.
Los desarrolladores normalmente utilizan una array uni-dimensional para
implementar una cola. Sin embargo, si tienen que co-existir mltiple colas o las
inserciones en las colas deben ocurrir en posiciones distintas a la ltima por
motivos de prioridades, los desarrolladores suelen cambiar a la lista doblemente
enlazada. Con un array un-dimensional dos variables enteras (normalmente
llamadas front y rear) contienen los ndices del primer y ltimo elemento de la
cola, respectivamente.

También podría gustarte