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 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.

Anillo en Maude[editar]

fmod ANILLO {X :: TRIV} is 	sorts AnilloNV{X} Anillo{X} . 	subsort AnilloNV{X} < Anillo{X} . Int num; If(vacía()) No funcia code  	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[editar]

FUNC CrearCola() : TCola VARIABLES cola: TCola INICIO 	cola.frente <- MAXCOLA 	cola.final <- MAXCOLA 	RESULTADO <- cola FIN  PROC DestruirCola(&cola: TCola) INICIO //Sin modificaciones 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 

Véase también[editar]