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


Statement
 

pdf   zip   tar

html

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.

Public test cases
  • Input

    4 6 6 9 9 10
    1 3 5
    5 6 6
    4 5
    3 5 5 7 10
    5 7 9 12 16 18 21 22 23 25
    3 7 11 13 16 20 20 20 23 24
    2 5
    4 5 5 5 9
    5 6 10 13 15 19
    3 7 9 13 17 20 20 22 25
    2 6 9 10 14 18 20 20 21
    4 5 6 10 14 14 14 18 21
    5 7 9 11 13 14 15
    1 1 5 9 13 13 17 18
    5 6 6 10 12 14 15 17 20 21
    5 9 13 16 17 19 23 26 30 30
    5 5 9
    2 2 3 4
    5 8 12 15
    1 1 5 9 13 17 19
    3 5 5 9 10 12
    4
    0 1 4 4 8 10 10 13
    3 4 7 11 12 16
    5 8
    4 7 10 13 17 19 21 22
    0 3 3 7 9 9 13 13 13 17
    3 5 7 11 13
    4 7 8 10 13 17
    2
    5 5 5 6 7 7 10
    2 6 7 9 9 12 13 15 18 22
    2 2 3 5
    4 7 8 11 12
    
    4
    5 9 10 14 17
    2 2 3 4 8 8 8
    0 1 3 3 4
    

    Output

    4 6 6 9 9 10
    1 3 5
    1 3 4 5 6 6 9 9 10
    5 6 6
    4 5
    4 5 5 6 6
    3 5 5 7 10
    5 7 9 12 16 18 21 22 23 25
    3 5 5 5 7 7 9 10 12 16 18 21 22 23 25
    3 7 11 13 16 20 20 20 23 24
    2 5
    2 3 5 7 11 13 16 20 20 20 23 24
    4 5 5 5 9
    5 6 10 13 15 19
    4 5 5 5 5 6 9 10 13 15 19
    3 7 9 13 17 20 20 22 25
    2 6 9 10 14 18 20 20 21
    2 3 6 7 9 9 10 13 14 17 18 20 20 20 20 21 22 25
    4 5 6 10 14 14 14 18 21
    5 7 9 11 13 14 15
    4 5 5 6 7 9 10 11 13 14 14 14 14 15 18 21
    1 1 5 9 13 13 17 18
    5 6 6 10 12 14 15 17 20 21
    1 1 5 5 6 6 9 10 12 13 13 14 15 17 17 18 20 21
    5 9 13 16 17 19 23 26 30 30
    5 5 9
    5 5 5 9 9 13 16 17 19 23 26 30 30
    2 2 3 4
    5 8 12 15
    2 2 3 4 5 8 12 15
    1 1 5 9 13 17 19
    3 5 5 9 10 12
    1 1 3 5 5 5 9 9 10 12 13 17 19
    4
    0 1 4 4 8 10 10 13
    0 1 4 4 4 8 10 10 13
    3 4 7 11 12 16
    5 8
    3 4 5 7 8 11 12 16
    4 7 10 13 17 19 21 22
    0 3 3 7 9 9 13 13 13 17
    0 3 3 4 7 7 9 9 10 13 13 13 13 17 17 19 21 22
    3 5 7 11 13
    4 7 8 10 13 17
    3 4 5 7 7 8 10 11 13 13 17
    2
    5 5 5 6 7 7 10
    2 5 5 5 6 7 7 10
    2 6 7 9 9 12 13 15 18 22
    2 2 3 5
    2 2 2 3 5 6 7 9 9 12 13 15 18 22
    4 7 8 11 12
    
    4 7 8 11 12
    4
    5 9 10 14 17
    4 5 9 10 14 17
    2 2 3 4 8 8 8
    0 1 3 3 4
    0 1 2 2 3 3 3 4 4 8 8 8
    
  • Information
    Author
    PRO1
    Language
    Catalan
    Official solutions
    Make
    User solutions
    Make