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
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
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
Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.