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 consultarse, añadirse y eliminarse únicamente 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.
cuales son sus características:
- 1. 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. Se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento También es llamado estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.
- 2. REPRESENTACIÓN DE LAS CO Un elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por la frente (parte inicial, cabeza) de la lista. Las aplicaciones utilizan una cola para almacenar elementos en su orden de aparición o concurrencia
- 3. Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan y, por consiguiente, una cola es una estructura de tipo FIFO (First Input First Output) porque el primer elemento que entra a la cola es el primero que sale. Las colas se representan por listas enlazadas o por arrayas. Se necesitan dos punteros: frente (f) y final(r), y la lista o arraya de “n” elementos
- 4. OPERACIONES BÁSICAS DE LAS CO Las operaciones básicas de las colas son: Crear: se crea la cola vacía. Encolar (añadir, entrar, push): se añade un elemento a la cola. Se añade al final de esta. Desencolar (sacar, salir, pop): 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 primero elemento que entró.
- 5. APLICACIONES DE LAS COLAS. Esta estructura de datos se usa en muchos sistemas operativos, por ejemplo Unix, para llevar el control de la ejecución de procesos, cada proceso en el sistema es almacenado en una lista y esta se va recorriendo, dándole un pequeño tiempo del microprocesador a cada proceso, durante la fracción de segundo de cada proceso este asume que tiene el control total del procesador.
- 6. COLA CIRCULAR O ANILLO 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 consultarse, añadirse y eliminarse únicamente desde la cabeza del anillo que es una posición distinguida. Esta avanza en el sentido de las agujas del reloj. En la figura mostrada muestra una cola circular con un solo dato almacenado. La variable “final” es la posición en donde se hizo la última inserción. Después que se ha producido una inserción, final se mueve circularmente a la derecha.
- 7. COLA DE PRIORIDADE Una cola de prioridades se utiliza para que 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. Este tipo especial de colas tienen las mismas operaciones que las colas, pero con la condición de que los elementos se atienden en orden de prioridad.
- 8. DOBLE COLA (BICOLA 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. Todas las operaciones de este tipo de datos tienen coste constante. Existen dos tipos de la doble cola: · Doble cola de entrada restringida: acepta inserciones solo al final de la cola. · Doble cola de salida restringida: acepta eliminaciones solo al frente de la cola
- 9. TIPO COLA IMPLEMENTADO COMO ARREG La figura de arriba, muestra la forma de implementar una cola, como arreglo, en la que cada casilla, representa una estructura compuesta por el tipo de dato a guardar (o bien otra estructura). Las variables q.rear y q.front, se van modificando cada vez que añadimos o eliminamos datos de nuestra cola. Para determinar la cantidad de elementos en cualquier momento utilizamos la expresión: Cant=q.rear-q.front+1
como se emplea:
Anillo en Maude
fmod ANILLO {X :: TRIV} is sorts AnilloNV{X} Anillo{X} . subsort AnilloNV{X} < Anillo{X} . op crear : -> Anillo{X} [ctor] . op insertar : X$Elt Anillo{X} -> AnilloNV {X} [ctor] . -> Anillo{X} . ops rotarDch rotarIzq : Anillo{X} -> Anillo{X} . op cabeza : AnilloNV{X} -> X$Elt . op esVacio? : Anillo{X} -> Bool . op aLaCola : X$Elt Anillo{X} -> Anillo{X} . op elimCola : Anillo{X} -> Anillo{X} . op cola : AnilloNV {X} -> X$Elt . var A : Anillo{X} . vars E E2 : X$Elt . eq eliminar(crear) = crear . eq eliminar(insertar(E, A)) = A . eq cabeza(insertar(E, A)) = E . eq esVacio?(crear) = true . eq esVacio?(insertar(E, A)) = false . eq cola(insertar(E, crear)) = E . eq cola(insertar(E, insertar(E2, A))) = cola(insertar(E2, A)) . eq elimCola(crear) = crear . eq elimCola(insertar(E, crear)) = crear . eq elimCola(insertar(E, insertar(E2, A))) = insertar(E, elimCola(insertar(E2, A))) . eq aLaCola(E, crear) = insertar(E, crear) . eq aLaCola(E, insertar(E2, A)) = insertar(E2, aLaCola(E, A)) . eq rotarDch(crear) = crear . eq rotarDch(insertar(E, A)) = aLaCola(E, A) .
Anillo en Pseudolenguaje
FUNC CrearCola() : TCola VARIABLES cola: TCola INICIO cola.frente <- MAXCOLA cola.final <- MAXCOLA RESULTADO <- cola FIN PROC DestruirCola(&cola: TCola) INICIO //No hay q hacer nada FIN FUNC ColaLlena(cola: TCola): LÓGICO INICIO RESULTADO <- (cola.final MOD MAXCOLA) + 1 = cola.frente FIN FUNC ColaVacia(cola: TCola): LÓGICO INICIO RESULTADO <- cola.final = cola.frente FIN PROC MeterCola (&cola: TCola; &e: Telemento; &error: Terror) VARIABLES fin: NATURAL INICIO SI ColaLlena(cola) ENTONCES error <- ErrorColaLlena EN OTRO CASO error <- NoError fin <- (cola.final MOD MAXCOLA) + 1 cola.final <- fin cola.elementos[fin] <- e FINSI FIN PROC SacarCola (&cola: TCola; &e: Telemento; &error: Terror) VARIABLES ini: NATURAL INICIO SI ColaVacia(cola) ENTONCES error <- ErrorColaLlena EN OTRO CASO error <- NoError ini <- (cola.frente MOD MAXCOLA) + 1 cola.frente <- ini e <- cola.elementos[ini] FINSI FIN