Forward_list Kontti tarjoaa toteutuksen yksin linkitetty luettelo tietorakenne. Se tallentaa tietoja ei-kohtauksellisessa muistissa, jossa kukin elementti osoittaa seuraavaan sekvenssin elementtiin. Tämä tekee insertoinnista ja poistoista nopeamman, kun elementin sijainti on tiedossa.
korvaa kaikki java
Syntaksi
Eteenpäin luettelo on määritelty std :: eteenpäin luokkamalli< Forward_list > otsikkotiedosto.
Forward_list
fl;
jossa
- T: Tietotyyppi elementtejä eteenpäin.
- F: Etuluetteloon määritetty nimi.
Julistus ja alustaminen
Forward_list voidaan julistaa ja alustaa monin tavoin alla olevan esimerkin osoittamalla tavalla:
C++
#include using namespace std; void printFL(forward_list<int>& fl) { for (auto i : fl) cout << i << ' '; cout << 'n'; } int main() { // Creating an empty forward_list forward_list<int> fl1; // Creating a forward_list with // default value forward_list<int> fl2(3 4); // Creating a forward_list from an // initializer list forward_list<int> fl3 = {1 5 3 4}; printFL(fl2); printFL(fl3); return 0; }
Tulos
4 4 4 1 5 3 4
Esimerkki: Yllä olevassa ohjelmassa olemme yksinkertaisia alustettuna eteenpäin suuntautuva luettelo kolmella tavalla:
- Lausunto Forward_list
FL1 luo tyhjän eteenpäin luettelon kokonaislukuista. - Lausunto Forward_list
FL2 (34) luo eteenpäin luettelon koosta 3 ja jokaisen elementin ollessa 4. - Lausunto Forward_list
fl3 = {1 5 3 4} luo eteenpäin -luettelon ja alustaa elementtien kanssa, jotka muodostavat alustusluettelon.
Perustoiminta
Tässä ovat perustoiminnot, jotka voimme suorittaa eteenpäin suuntautuvassa luettelossa:
Kello 1.
Eteenpäin suuntautuvan luettelon elementtejä ei voida käyttää indekseillä, kuten taulukoilla tai vektoreilla. Meidän on suoritettava luettelo peräkkäin alusta alkaen haluttuun asentoon käyttääksemme sitä. Tämä voidaan tehdä lisäämällä alkaa() iteraattori, mutta on parempi käyttää Seuraava () tai etukäteen () toiminto.
Kuitenkin luettelon ensimmäiseen elementtiin pääsee helposti edessä () menetelmä.
Esimerkki:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Access the first element cout << fl.front() << endl; // Access third element auto it = next(fl.begin() 2); cout << *it; return 0; }
Tulos
1 3
Esimerkki: Yllä olevassa ohjelmassa ensimmäinen elementti tulostetaan käyttämällä edessä () menetelmä. Kolmannen elementin pääsy Seuraava () käytetään iteraattorin kahden asennon siirtämiseen alusta ja *se käytetään iteraattorin käytöstä.
2. Elementtien lisääminen
Elementit voidaan lisätä eteenpäin suuntautuvaan luetteloon käyttämällä insert_after () toiminto. Se vaatii iteraattorin, jonka jälkeen elementti asetetaan. Nopeaa asetusta edestä tukee kuitenkin push_front () menetelmä.
Esimerkki:
C++#include using namespace std; int main() { forward_list<int> fl = {5 4}; // Inserting Element at front fl.push_front(1); // Insert 3 after the second element auto it = fl.begin(); advance(it 1); fl.insert_after(it 3); for (auto x: fl) cout << x << ' '; return 0; }
Tulos
1 5 3 4
Selitys: Tässä ohjelmassa eturintamassa asetetaan etuosaan ensimmäinen elementti push_front () toiminto. Sitten iteraattori luodaan ja siirretään yksi sijainti eteenpäin etukäteen () toiminto. Sen jälkeen elementti 5 asetetaan toisen elementin jälkeen käyttämällä insert_after () toiminto.
java operaattorit
3. Elementtien päivittäminen
Nykyisten elementtien arvoa voidaan muuttaa yksinkertaisesti käyttämällä niitä ja käyttämällä toimeksiantaja uuden arvon määrittäminen.
Esimerkki:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Updating first element fl.front() = 111; cout << fl.front() << endl; // Updating third element auto it = next(fl.begin() 2); *it = 333; cout << *it; return 0; }
Tulos
111 333
4. Löydä elementti
Eteenpäin suuntautuva luettelo ei tarjoa mitään jäsentoimintoa elementin etsimiseksi, mutta voimme käyttää löytää() Algoritmi minkä tahansa arvon löytämiseksi.
Esimerkki -
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Finding 3 auto it = find(fl.begin() fl.end() 3); if (it != fl.end()) cout << *it; else cout << 'Element not Found'; return 0; }
Tulos
3
5. kulku
Eteenpäin suuntautuva luettelo voidaan kulkea käyttämällä alkaa() ja loppu () iteraattorit, joilla on silmukka, mutta voimme vain siirtyä eteenpäin eikä taaksepäin.
Esimerkki:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Traversing using range-based for loop for(auto i : fl) cout << i << ' '; cout << endl; return 0; }
Tulos
1 5 3 4
6. Poista elementit
Eteenpäin luettelossa voimme poistaa elementin tietyssä paikassa ERASE_AFTER () menetelmä. Tämä menetelmä vie iteraattorin yhteen sijaintiin ennen kohdeelementtiä. Nopea deleetio edestä on mahdollista käyttämällä pop_front () menetelmä.
java tehdä vaikka
Esimerkki:
C++#include using namespace std; int main() { forward_list<int> fl = {1 5 3 4}; // Delete first element fl.pop_front(); // Delete third element auto it = fl.begin(); advance(it 1); fl.erase_after(it); for (auto x: fl) cout << x << ' '; return 0; }
Tulos
5 3
7. eteenpäin suuntautuvan luettelon koko
Eteenpäin_listalla ei ole sisäänrakennettua kokoa (). Sen koon löytämiseksi meidän on laskettava elementit manuaalisesti kuljettamalla sitä silmukka tai käyttämällä STD :: Etäisyyttä.
C++#include #include #include using namespace std; int main() { forward_list<int> flist={10203040}; //Calculate size by counting elements using std:: distance int size=distance(flist.begin()flist.end()); cout<<'Size of forward_list: '<<size<<endl; return 0; }
Tulos
Size of forward_list: 4
8. tyhjä ()
Sitä käytetään tarkistamaan, onko Forward_List on tyhjä.
Se palauttaa tosi, jos luettelo on tyhjä ja väärä muuten sallii nopeasti tarkistaa, jos säilöllä ei ole tietoja.
#include #include using namespace std; int main() { forward_list<int> flist; if (flist.empty()) { cout << 'The forward_list is empty.' << endl; } flist.push_front(10); if (!flist.empty()) { cout << 'The forward_list is not empty.' << endl; } return 0; }
Tulos
The forward_list is empty. The forward_list is not empty.
Ajan monimutkaisuus
Alla olevassa taulukossa luetellaan yllä olevien operaatioiden ajan monimutkaisuus eteenpäin suuntautuvassa luettelossa:
| Käyttö | Ajan monimutkaisuus |
|---|---|
| Pääsy ensimmäiseen elementtiin | O (1) |
| Pääsy nthelementti | O (n) |
| Työntää eteenpäin | O (1) |
| Aseta tietyn asennon jälkeen | O (n) |
| Poista ensimmäinen elementti | O (1) |
| Poista tietyn sijainnin jälkeen | O (n) |
| Läpikulku | O (n) |
Eteenpäin luettelo vs. luettelo
Ominaisuus | Forward_list | lista |
|---|---|---|
Linkitetyn luettelon tyyppi | Yksin linkitetty luettelo | Kaksinkertaisesti linkitetty luettelo |
Läpikulku | Voi vain kulkea eteenpäin jos muuten lauseke java | Voi kulkea sekä eteenpäin että taaksepäin |
Muistin käyttö | Käyttää vähemmän muistia (vain yksi osoitin solmua kohti) | Käyttää enemmän muistia (kaksi osoitinta solmua kohti) |
Lisäys/deleetio | Nopea insertio ja deleetio, mutta vain tietyssä asemassa tai sen jälkeen | Nopea insertio ja deleetio missä tahansa (ennen asennon tai sen jälkeen) |
TUTKIMUKSET | Rajoitettu verrattuna luetteloon (ei kokoa () ei käänteisiä iteraattoreita) | Täydellisempi rajapinta, mukaan lukien koko () käänteinen () kaksisuuntaiset iteraattorit. |
| multipleksointi | |