Cola dobles
La bicola o doble cola es un tipo de cola especial que permiten la inserción y eliminación de elementos de ambos extremos de la cola. Puede representarse a partir de un vector y dos índices, siendo su representación más frecuente una lista circular doblemente enlazada.
Esta estructura es una cola bidimensional en
que las inserciones y eliminaciones se pueden realizar en cualquiera de los dos
extremos de la bicola. Gráficamente representamos una bicola de la siguiente
manera:
Existen dos variantes de la doble cola:
Doble cola de entrada restringida.
Doble cola de salida restringida.
La primera variante sólo acepta inserciones al
final de la cola, y la segunda acepta eliminaciones sólo al frente de la cola
Algoritmo de Inicialización
F < -- 1
A <-- 0
Algoritmo para Insertar
Si A=máximo entonces mensaje (overflow) en
caso contrario
A
<--A+1
cola[A]<-- valor
Algoritmo para Extraer
Si F>A entonces
mensaje (underflow)
en caso contrario
mensaje (frente/atrás)
si frente entonces
x <-- cola[F]
F <-- F+1
en caso contrario
x <-- cola[A]
A <-- A-1
Esta estructura es un conjunto de elementos
donde a cada uno de ellos se les asigna una prioridad, y la forma en que son
procesados es la siguiente:
Un elemento de mayor prioridad es procesado al
principio.
Dos elementos con la misma prioridad son
procesados de acuerdo al orden en que fueron insertados en la cola.
Algoritmo para Insertar
x <--1
final<--verdadero
para i desde 1 hasta n haz
Si cola[i]>prioridad entonces
x <--i
final <--falso
salir
si final entonces
x <--n+1
para i desde n+1 hasta x+1
cola[i] <--prioridad
n <-- n+1
Algoritmo para Extraer
Si cola[1]=0 entonces
mensaje(overflow)
en caso contrario
procesar <--cola[1]
para i desde 2 hasta n haz
cola[i-1] <--cola[1]
n <-- n-1
Las operaciones que nosotros podemos realizar
sobre una cola son las siguientes:
· Inserción.
· Extracción.
Las inserciones en la cola se llevarán a cabo
por atrás de la cola, mientras que las eliminaciones se realizarán por el frente
de la cola (hay que recordar que el primero en entrar es el primero en salir).
Existen dos variantes de la doble cola:
Doble cola de entrada restringida.-
Este tipo de doble cola acepta solamente la inserción de elementos por un extremo; mientras que puede eliminar por ambos.
Doble cola de salida restringida.-
Este tipo de doble cola acepta solamente la eliminación de elementos por un extremo; mientras que puede insertar por ambos.
Doble cola de entrada restringida.-
Este tipo de doble cola acepta solamente la inserción de elementos por un extremo; mientras que puede eliminar por ambos.
Doble cola de salida restringida.-
Este tipo de doble cola acepta solamente la eliminación de elementos por un extremo; mientras que puede insertar por ambos.
Cola Circular
Una cola
circular o anillo es una estructura de datos en la que los
elementos están de forma circular y cada elemento tiene un sucesor y un
predecesor. Los elementos pueden cosultarse, añadirse y eliminarse unicamente
desde la cabeza del anillo que es una posición distinguida. Existen dos
operaciones de rotaciones, una en cada sentido, de manera que la cabeza del
anillo pasa a ser el elemento sucesor, o el predecesor, respectivamente, de la
cabeza actual.
Para solucionar el problema de desperdicio de memoria se implementaron las colas circulares, en las cuales existe un apuntador desde el último elemento al primero de la cola.
La representación gráfica de esta estructura es la siguiente:
Para solucionar el problema de desperdicio de memoria se implementaron las colas circulares, en las cuales existe un apuntador desde el último elemento al primero de la cola.
La representación gráfica de esta estructura es la siguiente:
La condición de vacío en este tipo de cola es
que el apuntador F sea igual a cero.
Las condiciones que debemos tener presentes al trabajar con este tipo de estructura son las siguientes:
Las condiciones que debemos tener presentes al trabajar con este tipo de estructura son las siguientes:
· Over
flow, cuando se realice una inserción.
· Under
flow, cuando se requiera de una extracción en la cola.
· Vacio
ALGORITMO DE INICIALIZACIÓN
F < -- 0
A<-- 0
ALGORITMO PARA INSERTAR
Si (F+1=A) ó (F=1 y A=máximo) entonces
mensaje (overflow)
en caso contrario
inicio
si A=máximo entonces
A<--1
cola[A]<-- valor
en caso contrario
A <--A+1
cola[A]<-- valor
si F=0 entonces
F <-- 1
fin
ALGORITMO PARA EXTRAER
Si F=0 entonces
mensaje (underflow) en caso contrario
x <-- cola[F]
si F=A entonces
F <-- 0
A<-- 0
en caso contrario
si F=máximo entonces
F <--1 en caso contrario F <-- F+1
No hay comentarios:
Publicar un comentario