Diferencia entre revisiones de «Cola circular»
Apariencia
Contenido eliminado Contenido añadido
Sin resumen de edición |
Deshecha la edición 37618325 de Mcapdevila (disc.) |
||
Línea 5: | Línea 5: | ||
<pre> |
<pre> |
||
fmod |
fmod ANILLO {X :: TRIV} is |
||
sorts |
sorts AnilloNV{X} Anillo{X} . |
||
subsort |
subsort AnilloNV{X} < Anillo{X} . |
||
op crear : -> |
op crear : -> Anillo{X} [ctor] . |
||
op insertar : X$Elt |
op insertar : X$Elt Anillo{X} -> AnilloNV {X} [ctor] . |
||
op eliminar : |
op eliminar : Anillo{X} -> Anillo{X} . |
||
ops |
ops rotarDch rotarIzq : Anillo{X} -> Anillo{X} . |
||
op |
op cabeza : AnilloNV{X} -> X$Elt . |
||
op |
op esVacio? : Anillo{X} -> Bool . |
||
op |
op aLaCola : X$Elt Anillo{X} -> Anillo{X} . |
||
op |
op elimCola : Anillo{X} -> Anillo{X} . |
||
op |
op cola : AnilloNV {X} -> X$Elt . |
||
var A : |
var A : Anillo{X} . |
||
vars E E2 : X$Elt . |
vars E E2 : X$Elt . |
||
Línea 26: | Línea 26: | ||
eq eliminar(insertar(E, A)) = A . |
eq eliminar(insertar(E, A)) = A . |
||
eq |
eq cabeza(insertar(E, A)) = E . |
||
eq |
eq esVacio?(crear) = true . |
||
eq |
eq esVacio?(insertar(E, A)) = false . |
||
eq |
eq cola(insertar(E, crear)) = E . |
||
eq |
eq cola(insertar(E, insertar(E2, A))) = cola(insertar(E2, A)) . |
||
eq |
eq elimCola(crear) = crear . |
||
eq |
eq elimCola(insertar(E, crear)) = crear . |
||
eq |
eq elimCola(insertar(E, insertar(E2, A))) = insertar(E, elimCola(insertar(E2, A))) . |
||
eq |
eq aLaCola(E, crear) = insertar(E, crear) . |
||
eq |
eq aLaCola(E, insertar(E2, A)) = insertar(E2, aLaCola(E, A)) . |
||
eq |
eq rotarDch(crear) = crear . |
||
eq |
eq rotarDch(insertar(E, A)) = aLaCola(E, A) . |
||
eq |
eq rotarIzq(crear) = crear . |
||
eq |
eq rotarIzq(insertar(E, A)) = insertar(cola(insertar(E, A)), elimCola(insertar(E, A))) . |
||
endfm |
endfm |
||
</pre> |
</pre> |
||
== |
== Anillo en Pseudolenguaje == |
||
<pre> |
<pre> |
||
FUNC |
FUNC CrearCola() : TCola |
||
VARIABLES |
VARIABLES |
||
cola: TCola |
|||
cua: TCua |
|||
INICIO |
|||
INICI |
|||
cola.frente <- MAXCOLA |
|||
cola.final <- MAXCOLA |
|||
RESULTADO <- cola |
|||
FIN |
|||
FINAL |
|||
PROC |
PROC DestruirCola(&cola: TCola) |
||
INICIO |
|||
INICI |
|||
//No hay q hacer nada |
//No hay q hacer nada |
||
FIN |
|||
FINAL |
|||
FUNC |
FUNC ColaLlena(cola: TCola): LÓGICO |
||
INICIO |
|||
INICI |
|||
RESULTADO <- (cola.final MOD MAXCOLA) + 1 = cola.frente |
|||
FIN |
|||
FINAL |
|||
FUNC |
FUNC ColaVacia(cola: TCola): LÓGICO |
||
INICIO |
|||
INICI |
|||
RESULTADO <- cola.final = cola.frente |
|||
FIN |
|||
FINAL |
|||
PROC |
PROC MeterCola (&cola: TCola; &e: Telemento; &error: Terror) |
||
VARIABLES |
VARIABLES |
||
fin: NATURAL |
|||
INICIO |
|||
INICI |
|||
SI |
SI ColaLlena(cola) ENTONCES |
||
error <- |
error <- ErrorColaLlena |
||
EN OTRO CASO |
EN OTRO CASO |
||
error <- NoError |
error <- NoError |
||
fin <- (cola.final MOD MAXCOLA) + 1 |
|||
cola.final <- fin |
|||
cola.elementos[fin] <- e |
|||
FINSI |
|||
FINALSI |
|||
FIN |
|||
FINAL |
|||
PROC |
PROC SacarCola (&cola: TCola; &e: Telemento; &error: Terror) |
||
VARIABLES |
VARIABLES |
||
ini: NATURAL |
ini: NATURAL |
||
INICIO |
|||
INICI |
|||
SI |
SI ColaVacia(cola) ENTONCES |
||
error <- |
error <- ErrorColaLlena |
||
EN OTRO CASO |
EN OTRO CASO |
||
error <- NoError |
error <- NoError |
||
ini <- ( |
ini <- (cola.frente MOD MAXCOLA) + 1 |
||
cola.frente <- ini |
|||
e <- |
e <- cola.elementos[ini] |
||
FINSI |
|||
FINALSI |
|||
FIN |
|||
FINAL |
|||
</pre> |
</pre> |
||
Revisión del 11:07 1 jun 2010
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 cosultarse, añadirse y eliminarse unicamente 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} . op crear : -> Anillo{X} [ctor] . op insertar : X$Elt Anillo{X} -> AnilloNV {X} [ctor] . op eliminar : Anillo{X} -> 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) . eq rotarIzq(crear) = crear . eq rotarIzq(insertar(E, A)) = insertar(cola(insertar(E, A)), elimCola(insertar(E, A))) . endfm
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