Muodosta kahden joukon erotus

Takaisin JHAVEPOP harjoituksiin

Joukon esittäminen linkitetyn listan avulla

Tässä harjoituksessa jokainen käsiteltävä joukko on talletettu linkitettyä listaa käyttäen. Joukko tarkoittaa ryhmää alkioita (tässä tapauksessa kirjaimia), jossa sama alkio ei ikinä esiinny kahta kertaa. Vaikka alkiot ovatkin linkitetyssä listassa jossakin järjestyksessä, järjestyksellä ei ole merkitystä, kun listan sisältämää alkioryhmää käsitellään joukkona. Esimerkiksi joukko {1, 2} voidaan esittää linkitetyllä listalla joko 1 -> 2 tai 2 -> 1. Linkitetty lista, jossa ei ole yhtään alkiota kuvaa tyjää joukkoa.

Ongelman kuvaus

Kirjoita C++-ohjelma, joka muodostaa kahden joukon s1 ja s2 (s kuten set) erotuksen, ja tallettaa sen joukoksi s1. Joukkoa s2 ei muuteta. Joukkojen erotus s1 - s2 tarkoittaa joukkoa, joka sisältää kaikki ne joukon s1 alkiot, jotka eivät kuulu joukkoon s2.



Kuten alla esitellyistä testitapauksista huomaat, voit olettaa, että joukot s1 ja s2 annetaan linkitettyinä listoina samannimisten osoittimien päässä. Huomaa, että harjoituksessa on määriteltynä myös ylimääräiset osoittimet p1, p2 ja prev1, joita voit käyttää apuna. Tässä harjoituksessa ei ole tarkoitus määritellä muita osoittimia.

Varmista, että kirjoittamasi ohjelmakoodi toimii oikein kaikissa erilaisissa tapauksissa, oli joukkoina mitä tahansa. Seuraavat 10 testitapausta helpottavat ohjelmasi testaamista. Kirjoita ohjelmakoodisi valmiiksi ja kopioi se sitten vuorotellen jokaiseen seuraavista JHAVEPOP testeistä kokeillaksesi sen toimintaa eri tilanteissa.


Testitapaus #1

Kuvaus: s1 on tyhjä joukko.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #2

Kuvaus: s2 on tyhjä joukko.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #3

Kuvaus: Molemmat joukoista s1 ja s2 ovat tyhjiä.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #4

Kuvaus: Joukko s1 sisältää vain yhden alkion, joka on myös joukossa s2.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #5

Kuvaus: Joukko s1 sisältää vain yhden alkion, joka ei ole joukossa s2.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #6

Kuvaus: Joukoilla s1 ja s2 ei ole yhteisiä alkioita, eli erotus on täsmälleen sama kuin joukko s1.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #7

Kuvaus: Joukko s1 on sama kuin joukko s2, eli erotus on tyhjä joukko.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #8

Kuvaus: Joukon s1 ensimmäinen alkio kuuluu erotukseen, mutta viimeinen alkio ei kuulu.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #9

Kuvaus: Joukon s1 viimeinen alkio kuuluu erotukseen, mutta ensimmäinen alkio ei kuulu.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?

Testitapaus #10

Kuvaus: Satunnainen tapaus, jossa osa alkioista kuuluu erotukseen ja osa ei.

Alkutilanne:

Lopputilanne:

Valmiina testaamaan?


Takaisin JHAVEPOP harjoituksiin