Forward_list Container leverer implementering af Enkelt linket liste datastruktur. Det gemmer data i ikke-sammenhængende hukommelse, hvor hvert element peger på det næste element i sekvensen. Dette gør indsættelse og deletion hurtigere, når elementets position er kendt.
Syntaks
Fremadsliste defineres som std :: fremad_list klasseskabelon inde i< Forward_list > header -fil.
Forward_list
fl;
hvor
- T: Datatype af elementer på listen frem.
- F: Navn tildelt den forreste liste.
Erklæring og initialisering
En Forward_List kan erklæres og initialiseres på flere måder som vist i nedenstående eksempel:
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; }
Produktion
4 4 4 1 5 3 4
Eksempel: I ovenstående program er vi enkel initialiseret fremadrettet liste på tre måder:
- Erklæring Forward_list
FL1 Opretter en tom fremadliste over heltal. - Erklæring Forward_list
FL2 (34) Opretter en fremadrettet liste over størrelse 3 og med hvert element er 4. - Erklæring Forward_list
fl3 = {1 5 3 4} Opretter en fremadrettet liste og initialiseres med elementerne fra initialiseringslisten.
Grundlæggende operationer
Her er de grundlæggende operationer, vi kan udføre på en fremadrettet liste:
1. adgang til elementer
Fremadsliste -elementer kan ikke fås adgang til ved hjælp af indeks som arrays eller vektorer. Vi er nødt til at gennemgå listen sekventielt fra starten til den ønskede position for at få adgang til den. Dette kan gøres ved at øge begynde() iterator, men det er bedre at bruge næste() eller fremskridt () fungere.
Imidlertid kan det første element på listen let fås adgang til front() metode.
Eksempel:
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; }
Produktion
1 3
Eksempel: I ovenstående program udskrives det første element ved hjælp af front() metode. For at få adgang til det tredje element næste() bruges til at flytte iteratoren to positioner fra begyndelsen og *det bruges til at derference iteratoren.
2. Indsættelse af elementer
Elementer kan indsættes på listen for fremad ved hjælp af insert_after () fungere. Det kræver iterator, hvorefter elementet skal indsættes. Uanset hvor hurtig indsættelse foran understøttes af push_front () metode.
Eksempel:
uendelig løkkeC++
#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; }
Produktion
1 5 3 4
Forklaring: I dette program indsættes det første element i Forward_Listen foran ved hjælp af push_front () fungere. Derefter oprettes en iterator og flyttes en position fremad ved hjælp af fremskridt () fungere. Derefter elementet 5 indsættes efter det andet element ved hjælp af insert_after () fungere.
3. Opdatering af elementer
Værdien af eksisterende elementer kan ændres ved blot at få adgang til dem og bruge Tildelingsoperatør at tildele den nye værdi.
Eksempel:
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; }
Produktion
111 333
4. Find element
Fremadslisten giver ingen medlemsfunktion til at søge efter et element, men vi kan bruge finde() Algoritme for at finde nogen given værdi.
Eksempel :
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; }
Produktion
3
5. Kortning
En fremadrettet liste kan krydses ved hjælp af begynde() og ende() Iteratorer med en løkke, men vi kan kun komme videre og ikke bagud.
Eksempel:
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; }
Produktion
1 5 3 4
6. Sletning af elementer
På en fremadrettet liste kan vi slette elementet i den givne position ved hjælp af Erase_after () metode. Denne metode fører iteratoren til en position før målelementet. Hurtig sletning fra fronten er mulig ved hjælp af pop_front () metode.
Eksempel:
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; }
Produktion
5 3
7. Størrelse på fremadrettet liste
Forward_list har ikke en indbygget størrelse () -funktion. For at finde dens størrelse er vi nødt til manuelt at tælle elementerne ved at krydse det med en løkke eller bruge std :: afstand.
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; }
Produktion
Size of forward_list: 4
8. tom ()
Det bruges til at kontrollere, om fremadretningen er tom.
Det returnerer sandt, hvis listen er tom og falsk ellers tillader det hurtigt at verificere, om containeren ikke har nogen data.
#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; }
Produktion
The forward_list is empty. The forward_list is not empty.
Tidskompleksitet
Nedenstående tabel viser tidskompleksiteten af ovenstående operationer på fremadrettet liste:
Neena Gupta
| Operation | Tidskompleksitet |
|---|---|
| Adgang til det første element | O (1) |
| Adgang nThelement | På) |
| Indsæt foran | O (1) |
| Indsæt efter specifik position | På) |
| Slet det første element | O (1) |
| Slet efter specifik position | På) |
| Traversal | På) |
Fremadsliste vs liste
Funktion | Forward_list | liste |
|---|---|---|
Type linkede liste | Enkelt linket liste | Dobbeltlinket liste |
Traversal | Kan kun krydse fremad | Kan krydse både fremad og bagud |
Hukommelsesbrug | Bruger mindre hukommelse (kun en markør pr. Knude) | Bruger mere hukommelse (to pointer pr. Knude) |
Indsættelse/sletning | Hurtig indsættelse og sletning, men kun på eller efter en given position | Hurtig indsættelse og sletning overalt (før eller efter en position) |
Funktioner understøttet | Begrænset sammenlignet med listen (ingen størrelse () ingen omvendte iteratorer) | Mere komplet interface inklusive størrelse () omvendt () tovejs -iteratorer. |
| | |