Check the new version here

Popular channels

Colas y tipo de colas (estructura de datos).

Cola (estructura de datos)


Viendo que estaba estudiando este tema me decidi a hacer un posto sobre las Colas o Queue

Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.

El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobús está compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el comienzo se extraerá un elemento cuando haya comprado el billete para su viaje, y si llega una nueva persona con intención de usar el autobús, tendrá que colocarse al final y esperar que todos los elementos situados antes que él abandonen la cola.

Tipos de colas


* Colas de prioridad: En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen.

Hay 2 formas de implementación: ademas los datos no son datos sino son resultados que se represerntan a traves del timpo. puede ser alguien o algo

1. Añadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad.
2. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola.

* Bicolas: son colas en donde los nodos se pueden añadir y quitar por ambos extremos; se les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer con un array circular con Ini y Fin que apunten a cada uno de los extremos. Hay variantes:
o Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace por el final, aunque podemos eliminar al principio ó al final.
o Bicolas de salida restringida: Son aquellas donde sólo se elimina por el final, aunque se puede insertar al principio y al final.

* Colas de prioridad: son aquellas que cumplen dos reglas :

1. De dos elementos siempre se atenderá antes al que tenga mayor prioridad.
2. Si dos elementos tienen la misma prioridad se atiende primero el que llego antes.


Realización Se ponen todos los nodos en la misma cola. Su particularidad es que cada nodo tiene un campo adicional con la prioridad del dato; de tal forma que cuando insertamos nuevos datos, el nuevo nodo, se inserta al final de la cola de los que tengan su misma prioridad navi.


Ejemplo de como implementar una cola
Lenguaje: pascal
Código fuente:
program colas_lista_enlazada_circular;

Type
tCola = ^nodo;
nodo = Record
clave : Integer;
sig : tCola;
End;

Procedure Crear(Var c1 : tcola);
begin
c1 := NIL
End;

Function Vacia(c1 : tcola) : Boolean;
Begin
Vacia := c1 = NIL
End;

Procedure Encolar(Var c1 : tcola; elem : Integer);
Var
nuevo : tcola;
begin
new(nuevo);
nuevo^.clave := elem;
if c1 = NIL then
nuevo^.sig := nuevo
else begin
nuevo^.sig := c1^.sig;
c1^.sig := nuevo
end;
c1 := nuevo
end;

Procedure Desencolar(Var c1 : tcola; Var elem : Integer);
Var
nuevo : tcola;
Begin
elem := c1^.sig^.clave;
if c1 = c1^.sig then begin
dispose(c1);
c1 := NIL
end
else begin
nuevo := c1^.sig;
c1^.sig := nuevo^.sig;
dispose(nuevo)
end
end;

{ Programa de prueba }
Var
cola : tcola;
elem : Integer;
begin
crear(cola);
if (vacia(cola)) then writeln('Cola vacia');
encolar(cola, 3);
desencolar(cola, elem)
end.


Fuente
Wikipedia
0
0
0
0No comments yet