Diferencia entre revisiones de «Cola circular»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Mcapdevila (discusión · contribs.)
Sin resumen de edición
Mcapdevila (discusión · contribs.)
Deshecha la edición 37618325 de Mcapdevila (disc.)
Línea 5: Línea 5:


<pre>
<pre>
fmod ANELL {X :: TRIV} is
fmod ANILLO {X :: TRIV} is
sorts AnellNV{X} Anell{X} .
sorts AnilloNV{X} Anillo{X} .
subsort AnellNV{X} < Anell{X} .
subsort AnilloNV{X} < Anillo{X} .


op crear : -> Anell{X} [ctor] .
op crear : -> Anillo{X} [ctor] .
op insertar : X$Elt Anell{X} -> AnellNV {X} [ctor] .
op insertar : X$Elt Anillo{X} -> AnilloNV {X} [ctor] .


op eliminar : Anell{X} -> Anell{X} .
op eliminar : Anillo{X} -> Anillo{X} .
ops rotarDret rotarEsq : Anell{X} -> Anell{X} .
ops rotarDch rotarIzq : Anillo{X} -> Anillo{X} .
op cap : AnellNV{X} -> X$Elt .
op cabeza : AnilloNV{X} -> X$Elt .
op esVuit? : Anell{X} -> Bool .
op esVacio? : Anillo{X} -> Bool .
op aLaCua : X$Elt Anell{X} -> Anell{X} .
op aLaCola : X$Elt Anillo{X} -> Anillo{X} .
op elimCua : Anell{X} -> Anell{X} .
op elimCola : Anillo{X} -> Anillo{X} .
op cua : AnellNV {X} -> X$Elt .
op cola : AnilloNV {X} -> X$Elt .


var A : Anell{X} .
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 cap(insertar(E, A)) = E .
eq cabeza(insertar(E, A)) = E .


eq esVuit?(crear) = true .
eq esVacio?(crear) = true .
eq esVuit?(insertar(E, A)) = false .
eq esVacio?(insertar(E, A)) = false .


eq cua(insertar(E, crear)) = E .
eq cola(insertar(E, crear)) = E .
eq cua(insertar(E, insertar(E2, A))) = cua(insertar(E2, A)) .
eq cola(insertar(E, insertar(E2, A))) = cola(insertar(E2, A)) .


eq elimCua(crear) = crear .
eq elimCola(crear) = crear .
eq elimCua(insertar(E, crear)) = crear .
eq elimCola(insertar(E, crear)) = crear .
eq elimCua(insertar(E, insertar(E2, A))) = insertar(E, elimCua(insertar(E2, A))) .
eq elimCola(insertar(E, insertar(E2, A))) = insertar(E, elimCola(insertar(E2, A))) .


eq aLaCua(E, crear) = insertar(E, crear) .
eq aLaCola(E, crear) = insertar(E, crear) .
eq aLaCua(E, insertar(E2, A)) = insertar(E2, aLaCua(E, A)) .
eq aLaCola(E, insertar(E2, A)) = insertar(E2, aLaCola(E, A)) .


eq rotarDret(crear) = crear .
eq rotarDch(crear) = crear .
eq rotarDret(insertar(E, A)) = aLaCua(E, A) .
eq rotarDch(insertar(E, A)) = aLaCola(E, A) .


eq rotarEsq(crear) = crear .
eq rotarIzq(crear) = crear .
eq rotarEsq(insertar(E, A)) = insertar(cua(insertar(E, A)), elimCua(insertar(E, A))) .
eq rotarIzq(insertar(E, A)) = insertar(cola(insertar(E, A)), elimCola(insertar(E, A))) .
endfm
endfm
</pre>
</pre>


== Anell en Pseudollenguatge ==
== Anillo en Pseudolenguaje ==
<pre>
<pre>
FUNC CrearCua() : TCua
FUNC CrearCola() : TCola
VARIABLES
VARIABLES
cola: TCola
cua: TCua
INICIO
INICI
cua.front <- MAXCUA
cola.frente <- MAXCOLA
cua.final <- MAXCUA
cola.final <- MAXCOLA
RESULTAT <- cua
RESULTADO <- cola
FIN
FINAL


PROC DestruirCua(&cua: TCua)
PROC DestruirCola(&cola: TCola)
INICIO
INICI
//No hay q hacer nada
//No hay q hacer nada
FIN
FINAL


FUNC CuaPlena(cua: TCua): LÓGICO
FUNC ColaLlena(cola: TCola): LÓGICO
INICIO
INICI
RESULTAT <- (cua.final MOD MAXCUA) + 1 = cua.front
RESULTADO <- (cola.final MOD MAXCOLA) + 1 = cola.frente
FIN
FINAL


FUNC CuaVuida(cua: TCua): LÓGICO
FUNC ColaVacia(cola: TCola): LÓGICO
INICIO
INICI
RESULTAT <- cua.final = cua.front
RESULTADO <- cola.final = cola.frente
FIN
FINAL




PROC PosarCua (&cua: TCua; &e: Telement; &error: Terror)
PROC MeterCola (&cola: TCola; &e: Telemento; &error: Terror)
VARIABLES
VARIABLES
final: NATURAL
fin: NATURAL
INICIO
INICI
SI CuaPlena(cua) ENTONCES
SI ColaLlena(cola) ENTONCES
error <- ErrorCuaPlena
error <- ErrorColaLlena
EN OTRO CASO
EN OTRO CASO
error <- NoError
error <- NoError
final <- (cua.final MOD MAXCUA) + 1
fin <- (cola.final MOD MAXCOLA) + 1
cua.final <- final
cola.final <- fin
cua.elements[final] <- e
cola.elementos[fin] <- e
FINSI
FINALSI
FIN
FINAL


PROC SacarCua (&cua: TCua; &e: Telement; &error: Terror)
PROC SacarCola (&cola: TCola; &e: Telemento; &error: Terror)
VARIABLES
VARIABLES
ini: NATURAL
ini: NATURAL
INICIO
INICI
SI CuaVuida(cua) ENTONCES
SI ColaVacia(cola) ENTONCES
error <- ErrorCuaPlena
error <- ErrorColaLlena
EN OTRO CASO
EN OTRO CASO
error <- NoError
error <- NoError
ini <- (cua.front MOD MAXCUA) + 1
ini <- (cola.frente MOD MAXCOLA) + 1
cua.front <- ini
cola.frente <- ini
e <- cua.elements[ini]
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

Véase también