Algoritmo Colas Eliminacion
Algoritmo Colas Eliminacion
Algoritmo Colas Eliminacion
Colas Encadenadas
Encadenadas
Comience
I <= V
PRUEB-COL-NG(NG, VACIA)
Si (VACIA) Entonces
I <= F
Sino
P <= *NG.ENLA
Si (*P.ENLA= NG) Entonces
Sino
P <= *P.ENLA
DATO <= *P.INFO
Fin-Si
Fin-Si
Termine
ALGORITMO INSER-CC-NG(NG,DATO,I)
Precondición: Apuntador NG válido. El contenido
INFO del último nodo de la cola es DATO. Este nodo
es el que sigue al nodo guía en la cola circular.
Comience
ASIGNA-NODO(Q,DATO,I)
Si (I) Entonces
PRUEBA-CC-NG(NG,VACIA)
Si (VACIA) Entonces
*NG.ENLA<= Q
*Q.ENLA<= NG
Sino
P <= *NG.ENLA
UC <= P
Mientras (*P.ENLA<> NG) Ejecute
P <= *P.ENLA
Fin-Mientras
*P.ENLA <= UC
*Q.ENLA <= ENLA(*UC)
*UC.ENLA <= NG
*NG.ENLA <= Q
Fin-Si
Sino
Fin-Si
Termine
2.5 Doble Cola
Algoritmo de Inicialización
F < -- 1
A <-- 0
Si A=máximo entonces
mensaje (overflow)
en caso contrario
A <--A+1
cola[A]<-- valor
Si F>A entonces
mensaje (underflow)
en caso contrario
mensaje (frente/atrás)
si frente entonces
x <-- cola[F]
F <-- F+1
en caso contrario
x <-- cola[A]
A <-- A-1
Algoritmo de Inicialización
F <--1
A <-- 0
Si F>A entonces
mensaje (overflow)
en caso contrario
mensaje (Frente/Atrás)
si Frente entonces
cola[F] <--valor
en caso contrario
A <-- A+1
cola[A] <--valor
Si F=0 entonces
mensaje (underflow)
en caso contrario
x <--cola[F]
F <-- F+1
void
eliminar (AVLTree ** t, int x)
{
AVLTree *aux;
else /* coincidencia! */
{
if (es_vacio (izquierdo (*t)) && es_vacio (derecho (*t)))
{/* es una hoja */
free (*t);
(*t) = vacio();
}
else if (es_vacio (izquierdo (*t)))
{/* subárbol izquierdo vacio */
aux = (*t);
(*t) = (*t)->der;
free (aux);
}
else if (es_vacio (derecho (*t)))
{/* subárbol derecho vacio */
aux = (*t);
(*t) = (*t)->izq;
free (aux);
}
else /* caso más complicado */
{
(*t)->dato = eliminar_min (&(*t)->der);
}
}
balancear (t);
actualizar_altura (*t);
}
int
eliminar_min (AVLTree ** t)
{
if (es_vacio (*t))
{
fprintf (stderr,
"No se respeta precondición de eliminar_min()\n");
exit(0);
}
else
{
if (!es_vacio (izquierdo (*t)))
{
int x = eliminar_min (&(*t)->izq);
balancear (t);
actualizar_altura (*t);
return x;
}
else
{
AVLTree *aux = (*t);
int x = raiz (aux);
*t = derecho (*t);
free (aux);
balancear (t);
actualizar_altura (*t);
return x;
}
}
}
http://www.virtual.unal.edu.co/cursos/ingenieria/2001412/capitulos/cap5/57.html
http://www.itlp.edu.mx/publica/tutoriales/estru1/25.htm
http://es.tldp.org/Tutoriales/doc-programacion-arboles-avl/htmls/x235.html
http://www.uv.es/~diaz/mn/node29.html