Naprijed_list spremnik pruža provedbu pojedinačno povezani popis Struktura podataka. Podaci pohranjuje u neprekidnoj memoriji gdje svaki element pokazuje na sljedeći element u nizu. Zbog toga brže umetanje i brisanje nakon što je poznat položaj elementa.
Sintaksa
Popis naprijed definiran je kao std :: naprijed_list predložak klase unutar< naprijed_list > Datoteka zaglavlja.
naprijed_list
fl;
gdje
- T: Vrsta podataka elemenata na popisu naprijed.
- F: Ime dodijeljeno popisu naprijed.
Izjava i inicijalizacija
Awork_list može se deklarirati i inicijalizirati na nekoliko načina kao što je prikazano u donjem primjeru:
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; }
Izlaz
4 4 4 1 5 3 4
Primjer: U gornjem programu smo jednostavni inicijalizirani popis naprijed na tri načina:
java arraylist sortiranje
- Izjava naprijed_list
Fl1 Stvara prazan popis cijelih brojeva. - Izjava naprijed_list
FL2 (34) Stvara list naprijed veličine 3, a svaki element je 4. - Izjava naprijed_list
fl3 = {1 5 3 4} Stvara popis naprijed i inicijalizira se s elementima s popisom inicijalizatora.
Osnovne operacije
Evo osnovnih operacija koje možemo izvesti na popisu naprijed:
1. Pristup elementima
Elementima popisa naprijed ne može se pristupiti pomoću indeksa poput nizova ili vektora. Moramo proći kroz popis uzastopno od početka do željenog položaja kako bismo mu pristupili. To se može učiniti povećanjem početi() iterator, ali bolje je koristiti sljedeći() ili Advance () funkcija.
Međutim, prvi element popisa može se lako pristupiti ispred() metoda.
Primjer:
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; }
Izlaz
1 3
Primjer: U gornjem programu prvi se element ispisuje pomoću korištenja ispred() metoda. Za pristup trećem elementu sljedeći() koristi se za pomicanje iteratora dva položaja od početka i *to koristi se za uklanjanje iteratora.
2. Umetanje elemenata
Elementi se mogu umetnuti na popis naprijed koristeći insert_after () funkcija. Zahtijeva iterator nakon kojeg se element treba umetnuti. Međutim, brzo umetanje na prednji dio podržava Push_Front () metoda.
Primjer:
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; }
Izlaz
1 5 3 4
Obrazloženje: U ovom se programu prvi element naprijed_liste ubacuje na prednji dio pomoću Push_Front () funkcija. Tada se stvara iterator i pomakne jedan položaj prema naprijed koristeći Advance () funkcija. Nakon toga element 5 je umetnut nakon drugog elementa pomoću insert_after () funkcija.
3. Ažuriranje elemenata
Vrijednost postojećih elemenata može se promijeniti jednostavnim pristupom im i upotrebom dodjeljivanje dodijeliti novu vrijednost.
json u primjeru json
Primjer:
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; }
Izlaz
111 333
4. Pronalaženje elementa
Popis naprijed ne pruža nijednu funkciju člana za traženje elementa, ali možemo koristiti pronaći() Algoritam za pronalaženje bilo koje date vrijednost.
Primjer ::
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; }
Izlaz
3
5. Prolazak
Popis prema naprijed može se proći koristeći početi() i kraj() Iteratori s petljom, ali možemo samo naprijed, a ne natrag.
Primjer:
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; }
Izlaz
1 5 3 4
6. Brisanje elemenata
U popisu naprijed možemo izbrisati element na danom položaju koristeći erase_after () metoda. Ova metoda preuzima iterator u jedan položaj prije ciljnog elementa. Brza brisanje s prednje strane moguće je koristiti pop_front () metoda.
java učiniti dok
Primjer:
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; }
Izlaz
5 3
7. Veličina popisa naprijed
FORTHER_LIST nema funkciju ugrađene veličine (). Da bismo pronašli njegovu veličinu, moramo ručno brojati elemente prelaskom petljom ili pomoću STD :: Udaljenost.
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; }
Izlaz
Size of forward_list: 4
8. prazno ()
Koristi se za provjeru je li naprijed_list prazan.
Vraća istinito ako je popis prazan i lažan, inače, omogućava brzo provjeru ima li spremnik podatke.
#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; }
Izlaz
The forward_list is empty. The forward_list is not empty.
Vremenska složenost
Donja tablica navodi vremensku složenost gore navedenih operacija na popisu naprijed:
| Operacija | Vremenska složenost |
|---|---|
| Pristup prvom elementu | O (1) |
| Pristup nthelement | Na) |
| Umetnite ispred | O (1) |
| Umetnite nakon određenog položaja | Na) |
| Izbriši prvi element | O (1) |
| Izbrišite nakon određenog položaja | Na) |
| Prelazak | Na) |
Popis naprijed prema listu
Značajka | naprijed_list | popis |
|---|---|---|
Vrsta povezanog popisa | Pojedinačno povezani popis generator slučajnih vrijednosti u Javi | Dvostruko povezani popis |
Prelazak | Može samo krenuti naprijed | Može preći i naprijed i unatrag |
Upotreba pamćenja | Koristi manje memorije (samo jedan pokazivač po čvoru) | Koristi više memorije (dva pokazivača po čvoru) |
Umetanje/brisanje | Brzo umetanje i brisanje, ali samo na ili nakon određenog položaja | Brzo umetanje i brisanje bilo gdje (prije ili nakon položaja) |
Podržane funkcije | Ograničeno u usporedbi s popisom (bez veličine () Nema obrnutog iteratora) | Potpunije sučelje, uključujući veličinu () reverse () dvosmjerni iteratori. |
| multipleksiranje | |