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