[2doparcial][julio][2012][ejercicio 1.b]

[2doparcial][julio][2012][ejercicio 1.b]

de Juan Guillermo Alvez Santestevan -
Número de respuestas: 4

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;

En respuesta a Juan Guillermo Alvez Santestevan

Re: [2doparcial][julio][2012][ejercicio 1.b]

de Diego Barreiro Indart -

Llamémosle "ant" al nodo apuntado por aux^.ant. Entonces:

ant «» aux

(O sea que ant^.sig es aux y aux^.ant es ant)

Lo que hacés es lo siguiente:

1) aux^.ant^.sig := nuevo;

Ahora ant » nuevo y ant « aux

2) nuevo^.sig := aux;

Ahora ant » nuevo » aux y ant « aux

3) nuevo^.ant := aux^.ant;

Queda ant «» nuevo » aux y ant « aux

4) aux^.ant := nuevo;

Y finalmente ant «» nuevo «» aux

 

En resumen, insertaste un nodo entre ant y aux y organizaste bien todas las relaciones (doble enlazado, para adelante y para atrás).

En respuesta a Diego Barreiro Indart

Re: [2doparcial][julio][2012][ejercicio 1.b]

de Juan Guillermo Alvez Santestevan -

se podria hacer con un arreglo con tope tambien no?