Fusió ordenada de dues seqüències d’items amb valors creixents

Preliminars

En aquest exercici treballarem sobre la següent estructura de dades, que
ens serveix per a mantenir una seqüència de valors dins de items
encadenats mitjançant punters.

    struct Item {
    	int value;
    	Item* next;
    };

Exercici

Implementeu una funció RECURSIVA que, donats dos Item* que apunten a
seqüències d’items encadenats tals que tenen els seus valors ordenats
creixentment, retorna un altre Item* que apunta a una nova seqüència que
és la fusió ordenada de les dues seqüències originals. En altres
paraules, la nova seqüència d’items no comparteix memòria amb les
original, i la seva seqüència de valors és la que s’obtindria posant en
una llista els valors de les dues seqüències originals i ordenant-los
creixentment.

    // Pre:  pitem1, pitem2 apunten als primers elements de seqüències correctes d'items encadenats.
    //       Els últims elements de les seqüències apunten a NULL. Els propis pitem1,pitem2 podrien
    //       ser NULL, cas en el qual no hi hauria elements a les respectives seqüències.
    // Post: Retorna un Item* que representa la fusió ordenada de les dues seqüències originals.
    //       Les seqüències de valors originals no han canviat.
    Item* merge(Item* pitem1, Item* pitem2);

Aquí tenim un exemple de paràmetres entrada i sortida de la funció:

    merge([1]->[4]->[4]->[8]->[9]->NULL, [2]->[2]->[4]->[5]->NULL) =
          [1]->[2]->[2]->[4]->[4]->[4]->[5]->[8]->[9]->NULL

Fixeu-vos que l’enunciat d’aquest exercici ja ofereix uns fitxers que
haureu d’utilitzar per a compilar: Makefile, program.cpp, merge.hpp. Us
falta crear el fitxer merge.cpp amb els corresponents includes i
implementar-hi la funció anterior. Quan pugeu la vostra solució al
jutge, només cal que pugeu un tar construït així:


    tar cf solution.tar merge.cpp

Entrada

L’entrada té un nombre arbitrari de casos. Cada cas consisteix en dues
línia, on cadascuna conté una llista de valors enters ordenats
creixentment. Fixeu-vos en que el programa que us oferim ja s’encarrega
de llegir aquestes entrades. Només cal que implementeu la funció abans
esmentada.

Sortida

Per a cada cas, la sortida conté tres línies, les dues primeres amb les
mateixes llistes originals, i la tercera amb la llista resultant de la
fusió ordenada. Fixeu-vos en que el programa que us oferim ja
s’encarrega d’escriure aquestes dades. Només cal que implementeu la
funció abans esmentada.

Informació del problema

Autoria: PRO1

Generació: 2026-01-25T21:04:14.522Z

© Jutge.org, 2006–2026.
https://jutge.org
