Naprej_list vsebnik zagotavlja izvajanje Singly povezan seznam struktura podatkov. Shrani podatke v neprekinjenem pomnilniku, kjer vsak element kaže na naslednji element v zaporedju. Zaradi tega je vstavljanje in brisanje hitreje, ko je znan položaj elementa.
Sintaksa
Seznam naprej je opredeljen kot std :: Forward_list predloga razreda znotraj< naprej_list > datoteka glave.
naprej_list
fl;
Kje
razvrščeni arraylist java
- T: Vrsta podatkov Elementi na seznamu naprej.
- F: Ime, dodeljeno na seznamu naprej.
Deklaracija in inicializacija
Napadalec je mogoče razglasiti in inicializirati na več načinov, kot je prikazano v spodnjem primeru:
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; }
Izhod
4 4 4 1 5 3 4
Primer: V zgornjem programu smo preprost inicializirani seznam naprej na tri načine:
- Izjava naprej_list
Fl1 Ustvari prazen seznam številnih števil. - Izjava naprej_list
FL2 (34) Ustvari seznam spredaj velikosti 3, vsak element pa 4. - Izjava naprej_list
fl3 = {1 5 3 4} Ustvari seznam naprej in se inicializira z elementi, ki tvorijo seznam inicializatorja.
Osnovne operacije
Tu so osnovne operacije, ki jih lahko izvajamo na seznamu naprej:
1. dostop do elementov
Elementov seznama naprej ni mogoče dostopati z indeksi, kot so nizi ali vektorji. Za dostop do njega moramo zaporedno iti skozi seznam od začetka do želenega položaja. To je mogoče storiti s povečanjem začeti () iterator, vendar je bolje uporabiti naslednji () ali vnaprej () delovanje.
Vendar lahko do prvega elementa seznama enostavno dostopate FRONT () metoda.
Primer:
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; }
Izhod
1 3
Primer: V zgornjem programu je prvi element natisnjen z uporabo FRONT () metoda. Za dostop do tretjega elementa naslednji () se uporablja za premikanje iteratorja dva položaja od začetka in *to se uporablja za odstranjevanje iteratorja.
string find c++
2. Vstavljanje elementov
Elemente lahko vstavite na seznam naprej s pomočjo uporabe INSERT_AFTER () delovanje. Zahteva iterator, po katerem je treba vstaviti element. Vendar hitro vstavljanje spredaj podpira push_front () metoda.
Primer:
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; }
Izhod
1 5 3 4
Pojasnilo: V tem programu se spredaj vstavi prvi element naprej_lista s pomočjo push_front () delovanje. Nato se ustvari iterator in premakne en položaj naprej s pomočjo vnaprej () delovanje. Po tem element 5 je vstavljen po drugem elementu z uporabo INSERT_AFTER () delovanje.
3. Posodabljanje elementov
Vrednost obstoječih elementov je mogoče preprosto spremeniti z dostopom do njih in z uporabo Operater dodelitve za dodelitev nove vrednosti.
Primer:
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; }
Izhod
111 333
4. Iskanje elementa
Seznam naprej ne zagotavlja nobene funkcije člana za iskanje elementa, lahko pa uporabimo find () algoritem za iskanje katere koli vrednosti.
Primer :
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; }
Izhod
3
5. Traversing
Seznam naprej je mogoče prečkati s pomočjo začeti () in konec () Iteratorji z zanko, vendar se lahko samo premaknemo naprej in ne nazaj.
Primer:
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; }
Izhod
1 5 3 4
6. Brisanje elementov
Na seznamu naprej lahko element na danem položaju izbrišemo s pomočjo erase_after () metoda. Ta metoda popelje iterator v en položaj pred ciljnim elementom. Hitro brisanje spredaj je mogoče z uporabo pop_front () metoda.
višina kat timpf
Primer:
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; }
Izhod
5 3
7. Velikost seznama naprej
Forward_list nima vgrajene funkcije velikosti (). Če želite najti svojo velikost, moramo ročno prešteti elemente tako, da jih prečkamo z zanko ali z razdaljo std ::.
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; }
Izhod
Size of forward_list: 4
8. prazno ()
Uporablja se za preverjanje, ali je naprej_list prazen.
Vrne resnično, če je seznam prazen in napačen, sicer pa omogoča hitro preverjanje, če vsebnik nima podatkov.
#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; }
Izhod
The forward_list is empty. The forward_list is not empty.
Časovna zapletenost
Spodnja tabela navaja časovno zapletenost zgornjih operacij na seznamu naprej:
| Delovanje | Časovna zapletenost |
|---|---|
| Dostop do prvega elementa | O (1) |
| Dostop nthelement | O (n) |
| Vstavite spredaj | O (1) |
| Vstavite po določenem položaju | O (n) |
| Izbriši prvi element | O (1) |
| Izbrišite po določenem položaju | O (n) |
| Traversal | O (n) |
Seznam naprej v primerjavi s seznamom
Značilnost | naprej_list | seznam |
|---|---|---|
Vrsta povezanega seznama | Singly povezan seznam | Dvojno povezan seznam |
Traversal | Lahko samo prečkate naprej v Javi | Lahko prečka tako naprej kot nazaj |
Uporaba pomnilnika | Uporablja manj pomnilnika (samo en kazalec na vozlišče) | Uporablja več pomnilnika (dva kazalca na vozlišče) |
Vstavljanje/brisanje | Hitro vstavljanje in brisanje, vendar le ob določenem položaju ali po njem | Hitro vstavljanje in brisanje kjer koli (pred ali po položaju) |
Funkcije podprte | Omejeno v primerjavi s seznamom (brez velikosti () brez povratnih iteratorjev) | Popolnejši vmesnik, vključno z velikostjo () reverzni () dvosmerni iteratorji. |
| java case statement | |