Sei sulla pagina 1di 17

COLAS, IMPLEMENTACIN

A PARTIR DE LISTAS Y
PARA PILAS

Una cola es un tipo especial de lista


abierta en la que slo se puede
insertar nodos en uno de los
extremos de la lista y slo se pueden
eliminar nodos en el otro. Adems,
como sucede con las pilas, las
escrituras de datos siempre son
inserciones de nodos, y las lecturas
siempre eliminan el nodo ledo.

Este tipo de lista es conocido como


lista FIFO (First In First Out), el
primero en entrar es el primero en
salir.

El nodo tpico para construir colas es


el mismo que utilizamos para la
construccin de listas y pilas:
struct nodo
{
int dato;
struct nodo *siguiente;
};

Operaciones bsicas con colas:


De nuevo nos encontramos ante una
estructura con muy pocas
operaciones disponibles. Las colas
slo permiten aadir y leer
elementos:
Aadir: Inserta un elemento al final
de la cola.
Leer: Lee y elimina un elemento del
principio de la cola.

Aadir elemento en una cola


vaca:
Partiremos de que ya tenemos el
nodo a insertar y, por supuesto un
puntero que apunte a l, adems los
punteros que definen la cola, primero
y ltimo que valdrn NULL:

El proceso es muy simple, bastar


con que:
nodo->siguiente apunte a NULL.
Y que los punteros primero y ltimo
apunten a nodo.

Aadir elemento en una cola no


vaca:
De nuevo partiremos de un nodo a
insertar, con un puntero que apunte
a l, y de una cola, en este caso, al
no estar vaca, los punteros primero
y ltimo no sern nulos:

El proceso sigue siendo muy sencillo:


Hacemos que nodo->siguiente
apunte a NULL.
Despus que ultimo->siguiente
apunte a nodo.
Y actualizamos ltimo, haciendo que
apunte a nodo.

Aadir elemento en una cola, caso


general:
Para generalizar el caso anterior, slo
necesitamos aadir una operacin:
Hacemos que nodo->siguiente apunte a
NULL.
Si ultimo no es NULL, hacemos que ultimo>siguiente apunte a nodo.
Y actualizamos ltimo, haciendo que
apunte a nodo.
Si primero es NULL, significa que la cola
estaba vaca, as que haremos que primero
apunte tambin a nodo.

Leer un elemento en una cola


con ms de un elemento:
Usaremos un puntero a un nodo
auxiliar:

Hacemos que nodo apunte al primer


elemento de la cola, es decir a primero.
Asignamos a primero la direccin del
segundo nodo de la pila: primero>siguiente.
Guardamos el contenido del nodo para
devolverlo como retorno, recuerda que la
operacin de lectura en colas implican
tambin borrar.
Liberamos la memoria asignada al primer
nodo, el que queremos eliminar.

Leer un elemento en una cola


con un solo elemento:
Tambin necesitamos un puntero a
un nodo auxiliar:

Hacemos que nodo apunte al primer elemento de


la pila, es decir a primero.
Asignamos NULL a primero, que es la direccin
del segundo nodo terico de la cola: primero>siguiente.
Guardamos el contenido del nodo para devolverlo
como retorno, recuerda que la operacin de
lectura en colas implican tambin borrar.
Liberamos la memoria asignada al primer nodo,
el que queremos eliminar.
Hacemos que ultimo apunte a NULL, ya que la
lectura ha dejado la cola vaca.

Leer un elemento en una cola caso general:


Hacemos que nodo apunte al primer elemento de
la pila, es decir a primero.
Asignamos a primero la direccin del segundo
nodo de la pila: primero->siguiente.
Guardamos el contenido del nodo para
devolverlo como retorno, recuerda que la
operacin de lectura en colas implican tambin
borrar.
Liberamos la memoria asignada al primer nodo,
el que queremos eliminar.
Si primero es NULL, hacemos que ultimo tambin
apunte a NULL, ya que la lectura ha dejado la
cola vaca.

Colas de Prioridades
Unacola de prioridadeses
unaestructura de datosen la que los
elementos se atienden en el orden
indicado por una prioridad asociada a
cada uno. Si varios elementos tienen
la misma prioridad, se atendern de
modo convencional segn la posicin
que ocupen

Tipos
Colas de prioridades con ordenamiento
ascendente: en ellas los elementos se
insertan de formaarbitraria, pero a la
hora de extraerlos, se extrae el
elemento de menor prioridad.
Colas de prioridades con ordenamiento
descendente: son iguales que la colas
de prioridad con ordenamiento
ascendente, pero al extraer el
elemento se extrae el de mayor
prioridad.

Potrebbero piacerti anche