Jotta C ++ -prioriteetinjonoa voidaan käyttää, ohjelman pitäisi alkaa koodilla, joka on seuraava:
#sisältää
#sisältää
käyttämällä nimiavaruustuntia;
Se sisältää ohjelmaan jonokirjaston.
Jatkaakseen lukemista lukijalla olisi pitänyt olla perustiedot C ++: sta.
Artikkelin sisältö
- Perusrakenne
- Tärkeitä jäsentoimintoja
- Muut tärkeät jonotoiminnot
- Merkkijonon tiedot
- Muut tärkeät jonorakenteet
- Johtopäätös
Perusrakenne
Tietorakenne on rakennettava ensin, ennen kuin sitä voidaan käyttää. Rakentaminen tarkoittaa tässä objektin näyttämistä kirjaston jonoluokasta. Tämän jälkeen jono -objektilla on oltava ohjelmoijan antama nimi. Yksinkertaisin syntaksi prioriteettijonon luomiseen on:
prioriteetti_jono<tyyppi>queueName;
Tällä syntaksilla suurin arvo poistetaan ensin. Esimerkki hetkellisyydestä on:
prioriteetti_jono<int>s;tai
prioriteetti_jono<hiiltyä>s;
Vektori ja dekki ovat kaksi datarakennetta C ++: ssa. Prioriteetti_jono voidaan luoda jollakin niistä. Syntaksi prioriteettijonon luomiseksi vektorirakenteesta on:
prioriteetti_jono<tyyppi, vektori<samaa tyyppiä>, vertailla>s;Esimerkki tästä esittelystä on:
prioriteetti_jono<int, vektori<int>, vähemmän<int> >s;Huomaa väli> ja> ilmoituksen lopussa. Näin vältetään sekaannus >>. Oletusarvoinen vertailukoodi on pienempi, eli suurin ja ei välttämättä ensimmäinen arvo poistetaan ensin. Joten luomislauseke voidaan yksinkertaisesti kirjoittaa seuraavasti:
prioriteetti_jono<int, vektori<int> >s;Jos pienin arvo poistetaan ensin, lausuman on oltava:
prioriteetti_jono<int, vektori<int>, suurempi<int> >s;Tärkeitä jäsentoimintoja
Push () -toiminto
Tämä funktio työntää arvon, joka on sen argumentti, prioriteettijonoon. Se palauttaa tyhjyyden. Seuraava koodi havainnollistaa tätä:
s.työntää(10);
s.työntää(30);
s.työntää(kaksikymmentä);
s.työntää(viisikymmentä);
s.työntää(40);
Tämä prioriteettijono on saanut 5 kokonaislukua, jotka ovat luokkaa 10, 30, 20, 50, 40. Jos kaikki nämä elementit poistetaan prioriteettijonosta, ne tulevat ulos luokassa 50, 40, 30, 20, 10.
Pop () -toiminto
Tämä toiminto poistaa prioriteettijonosta arvon, jolla on korkein prioriteetti. Jos vertailukoodi on suurempi, se poistaa elementin, jolla on pienin arvo. Jos se kutsutaan uudelleen, se poistaa seuraavan elementin, jolla on pienin lopun arvo; uudelleen, se poistaa seuraavan pienimmän nykyisen arvon ja niin edelleen. Se palauttaa tyhjyyden. Seuraava koodi havainnollistaa tätä:
s.työntää('');s.työntää('c');s.työntää('b');s.työntää('Ja');s.työntää('d');
Huomaa, että jäsenfunktion kutsuminen edellyttää, että objektin nimen jälkeen on oltava piste ja sitten funktio.
Ylin () -toiminto
The pop () -toiminto poistaa seuraavan korkeimman prioriteetin arvon, mutta ei palauta sitä, kuten pop () on tyhjä funktio. Käytä alkuun () -toiminto tietääksesi korkeimman prioriteetin arvon, joka on poistettava seuraavaksi. The alkuun () -toiminto palauttaa kopion prioriteetin_jonon korkeimman prioriteetin arvosta. Seuraava koodi, jossa seuraava korkeimman prioriteetin arvo on pienin arvo, havainnollistaa tätä
s.työntää('');s.työntää('c');s.työntää('b');s.työntää('Ja');s.työntää('d');
hiiltyäch1=s.alkuun();s.pop-();
hiiltyäch2=s.alkuun();s.pop-();
hiiltyäch3=s.alkuun();s.pop-();
hiiltyäch4=s.alkuun();s.pop-();
hiiltyäch5=s.alkuun();s.pop-();
kustannus<<ch1<<''<<ch2<<''<<ch3<<''<<ch4<<''<<ch5<<'' n'';
Tulos on 'a' 'b' 'c' 'd' 'e'.
Tyhjä () -toiminto
Jos ohjelmoija käyttää alkuun () toiminto tyhjällä prioriteetti_jonolla, onnistuneen kääntämisen jälkeen hän saa virheilmoituksen, kuten:
Tarkista siis aina, onko prioriteettijono tyhjä, ennen kuin käytät alkuun () toiminto. The tyhjä() jäsenfunktio palauttaa bool -arvon, tosi, jos jono on tyhjä, ja epätosi, jos jono ei ole tyhjä. Seuraava koodi havainnollistaa tätä:
prioriteetti_jono<int>s;inti1= 10; inti2= 30; inti3= kaksikymmentä; inti4= viisikymmentä; inti5= 40;
s.työntää(i1);s.työntää(i2);s.työntää(i3);s.työntää(i4);s.työntää(i5);
sillä aikaa(!s.tyhjä())
{
kustannus <<s.alkuun() << '';
s.pop-();
}
kustannus << '' n'';
Muut tärkeät jonotoiminnot
Koko () -toiminto
Tämä toiminto palauttaa prioriteettijonon pituuden, kuten seuraava koodi havainnollistaa:
inti1= 10; inti2= 30; inti3= kaksikymmentä; inti4= viisikymmentä; inti5= 40;
s.työntää(i1);s.työntää(i2);s.työntää(i3);s.työntää(i4);s.työntää(i5);
intlen=s.koko();
kustannus <<len<< '' n'';
Lähtö on 5.
Vaihto () -toiminto
Jos kaksi prioriteetti_jonoa ovat samaa tyyppiä ja kokoa, tämä toiminto voi vaihtaa ne, kuten seuraava koodi osoittaa:
inti1= 10; inti2= 30; inti3= kaksikymmentä; inti4= viisikymmentä; inti5= 40;
pq1.työntää(i1);pq1.työntää(i2);pq1.työntää(i3);pq1.työntää(i4);pq1.työntää(i5);
prioriteetti_jono<int>pqA;
intse 1= 1; intse 2= 3; intse 3= 2; intse 4= 5; intse 5= 4;
pqA.työntää(se 1);pqA.työntää(se 2);pqA.työntää(se 3);pqA.työntää(se 4);pqA.työntää(se 5);
pq1.vaihtaa(pqA);
sillä aikaa(!pq1.tyhjä())
{
kustannus <<pq1.alkuun() << '';
pq1.pop-();
} kustannus<<'' n'';
sillä aikaa(!pqA.tyhjä())
{
kustannus <<pqA.alkuun() << '';
pqA.pop-();
} kustannus<<'' n'';
Lähtö on:
& emsp; 5 & emsp; 4 & emsp; 3 & emsp; 2 & emsp; 1
& emsp; 50 & emsp; 40 & emsp; 30 & emsp; 20 & emsp; 10
Emplace () Fuction
The emplace () toiminto on samanlainen kuin push -toiminto. Seuraava koodi havainnollistaa tätä:
inti1= 10; inti2= 30; inti3= kaksikymmentä; inti4= viisikymmentä; inti5= 40;
pq1.sijoittaa(i1);pq1.sijoittaa(i2);pq1.sijoittaa(i3);pq1.sijoittaa(i4);pq1.sijoittaa(i5);
sillä aikaa(!pq1.tyhjä())
{
kustannus <<pq1.alkuun() << '';
pq1.pop-();
} kustannus<<'' n'';
Lähtö on:
50 40 30 20 10
Merkkijonon tiedot
Merkkijonoja verrattaessa on käytettävä merkkijonoluokkaa eikä merkkijonojen kirjainten suoraa käyttöä, koska se vertaisi osoittimia eikä varsinaisia merkkijonoja. Seuraava koodi näyttää merkkijonoluokan käytön:
#sisältääprioriteetti_jono<merkkijono>pq1;
merkkijono s1=merkkijono('kynä'), s2=merkkijono('lyijykynä'), s3=merkkijono('tehtäväkirja'), s4=merkkijono('oppikirja'), s5=merkkijono('viivotin');
pq1.työntää(s1);pq1.työntää(s2);pq1.työntää(s3);pq1.työntää(s4);pq1.työntää(s5);
sillä aikaa(!pq1.tyhjä())
{
kustannus <<pq1.alkuun() << '';
pq1.pop-();
} kustannus<<'' n'';
Lähtö on:
& emsp; oppikirja & viivain & emsp; lyijykynä & emsp; kynä & emsp; harjoituskirja
Muut tärkeät jonorakenteet
Selkeä luominen vektorista
Prioriteettijono voidaan luoda nimenomaisesti vektorista, kuten seuraava koodi osoittaa:
vektori<int>vtr= {10,30,kaksikymmentä,viisikymmentä,40};
prioriteetti_jono<int>s(vtr.alkaa(), vtr.loppuun());
sillä aikaa(!s.tyhjä())
{
kustannus <<s.alkuun() << '';
s.pop-();
} kustannus<<'' n'';
Tulos on: 50 40 30 20 10. Tällä kertaa myös vektoriotsikko on sisällytettävä. Konstruktori -funktion argumentit ottavat vektorin alku- ja loppuosoittimet. Vektorin tietotyypin ja prioriteetin_jonon tietotyypin on oltava samat.
Jotta vähimmäisarvo olisi prioriteetti, rakentajan ilmoitus olisi:
prioriteetti_jono<int, vektori<int>, suurempi>int> >s(vtr.alkaa(), vtr.loppuun()); Selkeä luominen ryhmästä
Ensisijainen jono voidaan luoda suoraan taulukosta, kuten seuraava koodi osoittaa:
prioriteetti_jono<int>s(arr, arr+5);
sillä aikaa(!s.tyhjä())
{
kustannus <<s.alkuun() << '';
s.pop-();
} kustannus<<'' n'';
Tulos on: 50 40 30 20 10. Konstruktori -funktion argumentit ottavat taulukon alku- ja loppukohdat. arr palauttaa aloitusosoittimen, arr+5 palauttaa osoittimen juuri matriisin ohi ja 5 on taulukon koko. Matriisin tietotyypin ja prioriteetti_jonon tietotyypin on oltava samat.
Jotta vähimmäisarvo olisi prioriteetti, rakentajan ilmoitus olisi:
prioriteetti_jono<int, vektori<int>, suurempi<int> >s(arr, arr+5);Huomautus: C ++: ssa prioriteettijonoa kutsutaan itse asiassa sovittimeksi, ei vain säiliöksi.
Mukautettu vertailukoodi
Kaikkien prioriteettijonon arvojen nouseva tai laskeva ei ole ainoa prioriteettijonon vaihtoehto. Esimerkiksi luettelo 11 kokonaisluvusta suurimmalle kasalle on:
88, 86, 87, 84, 82, 79,74, 80, 81 ,, 64, 69
Suurin arvo on 88. Tämän jälkeen on kaksi numeroa: 86 ja 87, jotka ovat alle 88. Loput luvut ovat pienempiä kuin nämä kolme numeroa, mutta eivät oikeassa järjestyksessä. Luettelossa on kaksi tyhjää solua. Numerot 84 ja 82 ovat pienempiä kuin 86. Numerot 79 ja 74 ovat pienempiä kuin 87. Numerot 80 ja 81 ovat pienempiä kuin 84. Numerot 64 ja 69 ovat alle 79.
Numeroiden sijoitus noudattaa maksimi-kasan ehtoja-katso myöhemmin. Voidakseen tarjota tällaisen järjestelmän prioriteettijonolle ohjelmoijan on annettava oma vertailukoodinsa - katso myöhemmin.
Johtopäätös
C ++ -prioriteetin_jono on ensin ensimmäisessä-ulos -jono. Jäsentoiminto, työntää(), tuo jonoon uuden arvon. Jäsentoiminto, alkuun (), lukee jonon ylin arvo. Jäsentoiminto, pop (), poistaa palauttamatta jonon ylintä arvoa. Jäsentoiminto, tyhjä(), tarkistaa onko jono tyhjä. Prioriteettijono eroaa kuitenkin jonosta siinä, että se noudattaa jotakin prioriteettialgoritmia. Se voi olla suurin, ensimmäisestä viimeiseen tai vähiten, ensimmäisestä viimeiseen. Ehdot (algoritmi) voidaan myös ohjelmoida.