Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2004
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #3 [solución]

El SelectionSort() para la lista

      El objetivo de esta tarea programada es forzarle a usar especificación en lugar de implementación de la clase lista.

      Tome la implementación de la lista doblemente enlazada vista en clase, y agréguele el método ADH_lst2::move_after() que permite trasladar un valor de la lista a otra posición.

void ADH_lst2::move_after(
    ADH_lst2::iterator from,
    ADH_lst2::iterator to   ) {
/*  resultado
    Traslada el valor que está en el sitio denotador por "from"
    para que quede después de "to".
    - Tanto "to" como "from" deben denotar valores almacenados en "*this".
    - Para trasladar un valor al principio de la lista, es necesario ponerlo
      después del primero, y luego poner al primero después del segundo.
*/
    nodo *t = to._p;
    nodo *f = from._p;

    if (t==0 || f==0 || t==f) {
        return;
    }

    {   // caso especial: from es el primero de la lista
        if (_prm == f) {
            _prm =  f->next;
        }
    }

    {   // desconecta "from"
        nodo *prv; prv = f->prev;
        nodo *nxt; nxt = f->next;

        if (prv != 0) {
            prv->next = nxt;
        }
        if (nxt != 0) {
            nxt->prev = prv;
        }
    }

    {   // enlaza a "from" después de "to"
        f->prev = t;
        f->next = t->next;

        t->next = f;
    }
} // ADH_lst2::move_after()

      Primero debe corregir la implementación de ADH_lst2::move_after() para luego debe usarla para implementar el algoritmo de ordenamiento SelectionSort(). Modifique el algoritmo para que trabaje sobre una lista, en lugar de trabajar sobre un vector.

      Use los iteradores de la lista para especificar e implementar el algoritmo SelectionSort(), pero evite acceder el Rep de la lista. Si lo necesita, implemente también el método ADH_lst2::move_before().

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Entregue su documentación en la primera fecha, y luego entregue el programa completo en la segunda fecha.
Primera etapa: 3 días
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2004
Derechos de autor reservados © 2004
[home] <> [/\]