/* * OHJ-1151 - Ohjelmointi 2e * * Palautustehtävä 4 - Prioriteettijono * * * Tässä harjoitustyössä saat olettaa että muistin varaamiminen * onnistuu aina. * * Rajapinnan public-osaa ei saa muuttaa. Private-osaan saa ja pitääkin * tehdä muutoksia. * * Lista ei ole järkevin mahdollinen tietorakenne prioriteettijonon * toteuttamiseen, mutta nyt se tehdään sillä harjoituksen vuoksi. Lisäksi * prioriteettijonon fiksuun toteutukseen vaaditut rakenteet ovat * monimutkaisempia. * */ #ifndef PRIORITEETTIJONO_HH #define PRIORITEETTIJONO_HH #include #include using namespace std; class Prioriteettijono { public: // rakentaja // alustaa tyhjän jonon Prioriteettijono(); // purkaja // vapauttaa varatun muistin ~Prioriteettijono(); // harjoitellaan typedeffin käyttöä // jonon prioriteettityyppi typedef int Prioriteetti; // lisää prioriteettijonoon tehtävän oikealle paikalleen // mikäli jonossa on jo tapahtumia samalla prioriteetillä // lisätään uusi tapahtuma samaprioriteettisten viimeiseksi void lisaa(const Prioriteetti tarkeys, const string& viesti); // poistaa kaikki viestit, joiden prioriteetti on tarkeys // paluuarvo kertoo montako tapahtumaa poistettiin int poista(const Prioriteetti tarkeys); // poistaa kaikki tapahtumat joiden kuvaustekstistä löytyy alimerkkijonona // annettu merkkijono, paluuarvo kertoo montako tapahtumaa poistettiin int poista(const string& haku); // tulostaa prioriteettijonon annettuun virtaan // kiireellisimmät tapahtumat ensin. Samalla // prioriteetillä olevat tapahtumat tulostetaan lisäysjärjestyksessä // eli ensin lisätty tapahtuma ensimmäisenä. void tulosta(ostream& virta) const; // etsii jonosta alkiot, joiden prioriteetti on prioriteetti // ja tulostaa ne annettuun virtaan lisäysjärjestyksessä void etsi(const Prioriteetti prioriteetti, ostream& virta) const; // poistaa kiireellisimmän tapahtuman jonosta ja asettaa // kuvaustekstin viiteparametriin // paluuarvo false jos jono oli tyhjä, muulloin true bool tarkein(string& kuvaus); // kertoo onko jono tyhjä bool tyhja() const; // palauttaa jonossa olevien tapahtumien määrän int koko() const; private: // Kirjoita tähän oma toteutus struct Alkio; struct Alkio { Prioriteetti tarkeys; std::string viesti; Alkio *seuraava; }; Alkio *jono_; // Kielletään jonon kopiointi ja sijoitus Prioriteettijono(const Prioriteettijono& vanha); Prioriteettijono& operator=(Prioriteettijono& sijoitettava); }; #endif