buenas, en este procedimiento hay una parte que no entiendo por què se hace aux^.ant^.sig := nuevo;
que sentido tiene hacer ^.ant^.sig y porque se hace en este caso? marco en negrita
PROCEDURE Insertar (d: CARDINAL; p: CARDINAL; VAR cp: CP );
(* Inserta ordenado en la cola de prioridad "cp" el dato "d" con prioridad "p".
Precondición: NOT EstaLlena(cp) *)
VAR
aux, nuevo: nodoCP;
sale: BOOLEAN;
BEGIN
NEW(nuevo);
nuevo^.dato := d;
nuevo^.prior := p;
nuevo^.sig := NIL;
nuevo^.ant := NIL;
IF cp^.primero = NIL THEN
cp^.primero := nuevo;
cp^.ultimo := nuevo;
ELSIF p <= cp^.primero^.prior THEN
cp^.primero^.ant := nuevo;
nuevo^.sig := cp^.primero;
cp^.primero := nuevo;
ELSE
aux := cp^.primero;
sale := FALSE;
WHILE (NOT sale) AND (aux^.sig <> NIL) DO
aux := aux^.sig;
IF p <= aux^.prior THEN
sale := TRUE;
END;
END;
IF sale THEN
aux^.ant^.sig := nuevo;
nuevo^.sig := aux;
nuevo^.ant := aux^.ant;
aux^.ant := nuevo;
ELSE
aux^.sig := nuevo;
nuevo^.ant := aux;
cp^.ultimo := nuevo;
END;
END;
cp^.contador := cp^.contador + 1;
END Insertar;