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} issorts 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() : TColaVARIABLEScola: TColaINICIOcola.frente <- MAXCOLAcola.final <- MAXCOLARESULTADO <- colaFINPROC DestruirCola(&cola: TCola)INICIO//Sin modificacionesFINFUNC ColaLlena(cola: TCola): LÓGICOINICIORESULTADO <- (cola.final MOD MAXCOLA) + 1 = cola.frenteFINFUNC ColaVacia(cola: TCola): LÓGICOINICIORESULTADO <- cola.final = cola.frenteFINPROC MeterCola (&cola: TCola; &e: Telemento; &error: Terror)VARIABLESfin: NATURALINICIOSI ColaLlena(cola) ENTONCESerror <- ErrorColaLlenaEN OTRO CASOerror <- NoErrorfin <- (cola.final MOD MAXCOLA) + 1cola.final <- fincola.elementos[fin] <- eFINSIFINPROC SacarCola (&cola: TCola; &e: Telemento; &error: Terror)VARIABLESini: NATURALINICIOSI ColaVacia(cola) ENTONCES                error <- ErrorColaLlenaEN OTRO CASOerror <- NoErrorini <- (cola.frente MOD MAXCOLA) + 1cola.frente <- inie <- cola.elementos[ini]FINSIFIN

Véase también