Endavant_list El contenidor proporciona la implementació de Llista enllaçada individualment Estructura de dades. Emmagatzema dades en memòria no contigua on cada element apunta a l’element següent de la seqüència. Això fa que la inserció i la supressió siguin més ràpides un cop coneguda la posició de l’element.
Sintaxi
La llista de reenviament es defineix com a std :: Forward_list plantilla de classe dins del< endavant_list > fitxer de capçalera.
endavant_list
fl;
on
- T: Tipus de dades d’elements a la llista de reenviament.
- F: Nom assignat a la llista de reenviament.
Declaració i inicialització
Es pot declarar i inicialitzar una llista FORVER_LISTA de diverses maneres, tal com es mostra a l'exemple següent:
mides de text de làtexC++
#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; }
Producció
4 4 4 1 5 3 4
Exemple: Al programa anterior, som una llista de reenviament inicialment inicial de tres maneres:
- Declaració endavant_list
Fl1 Crea una llista de nombrosos sencers buits. - Declaració endavant_list
FL2 (34) Crea una llista de reenviament de la mida 3 i cada element és de 4. - Declaració endavant_list
fl3 = {1 5 3 4} Crea una llista de reenviament i es inicialitza amb els elements formant la llista inicialitzadora.
Operacions bàsiques
A continuació, es mostren les operacions bàsiques que podem realitzar en una llista de endavant:
1. Accés alements
No es pot accedir als elements de la llista de reenviament mitjançant índexs com matrius o vectors. Hem de passar per la llista seqüencialment des del començament fins a la posició desitjada per accedir -hi. Això es pot fer incrementant començar () iterador, però és millor utilitzar -lo Següent () o Advance () funció.
No obstant això, es pot accedir fàcilment al primer element de la llista Front () Mètode.
Exemple:
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; }
Producció
1 3
Exemple: Al programa anterior, el primer element s'imprimeix mitjançant l'ús Front () Mètode. Per accedir al tercer element Següent () s'utilitza per moure les dues posicions iterator des del principi i *it s'utilitza per desfer el iterador.
2. Inserir elements
Els elements es poden inserir a la llista de reenviament mitjançant inserir_after () funció. Requereix el iterador després del qual s'ha d'inserir l'element. No obstant això, la inserció ràpida a la part frontal és suportada per push_front () Mètode.
Exemple:
cicle de vida sdlcC++
#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; }
Producció
1 5 3 4
Explicació: En aquest programa s'insereix el primer element del Forward_list a la part frontal mitjançant el push_front () funció. A continuació, es crea un iterador i es mou una posició cap endavant mitjançant el Advance () funció. Després, l'element 5 s'insereix després del segon element mitjançant el inserir_after () funció.
3. Actualització d'elements
El valor dels elements existents es pot canviar simplement accedint -los i utilitzant -los operador d'assignació per assignar el nou valor.
Exemple:
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; }
Producció
111 333
4. Element de cerca
La llista de reenviament no proporciona cap funció de membre per cercar un element, però podem utilitzar el trobar () Algoritme per trobar qualsevol valor determinat.
Exemple :
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; }
Producció
3
5. Traversing
Es pot travessar una llista de reenviament mitjançant començar () i End () Els iteradors amb un bucle, però només podem avançar i no enrere.
Exemple:
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; }
Producció
1 5 3 4
6. Elements de supressió
A la llista de reenviament podem eliminar l'element a la posició donada mitjançant Erase_after () Mètode. Aquest mètode porta el iterador a una posició abans de l'element objectiu. És possible la supressió ràpida de la part frontal pop_front () Mètode.
llistes java
Exemple:
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; }
Producció
5 3
7. Mida de la llista de reenviament
Forward_list no té una funció de mida integrada (). Per trobar la seva mida, hem de comptar manualment els elements travessant -lo amb un bucle o amb la distància 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; }
Producció
Size of forward_list: 4
8. Buit ()
S'utilitza per comprovar si la llista Forward_ està buida.
Retorna és cert si la llista està buida i falsa en cas contrari, permet verificar ràpidament si el contenidor no té dades.
#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; }
Producció
The forward_list is empty. The forward_list is not empty.
Complexitat temporal
La taula següent mostra la complexitat del temps de les operacions anteriors a la llista de reenviament:
| Operació | Complexitat temporal |
|---|---|
| Accediu al primer element | O (1) |
| Accés Nthelement | O (n) |
| Introduïu al davant | O (1) |
| Inseriu després de la posició específica | O (n) |
| Suprimeix el primer element | O (1) |
| Suprimeix després de la posició específica | O (n) |
| Travessal | O (n) |
Reenviar la llista vs llista
Distintiu | endavant_list | inscriure |
|---|---|---|
Tipus de llista enllaçada | Llista enllaçada individualment | Llista doblement enllaçada |
Travessal | Només pot recórrer endavant | Pot recórrer tant cap endavant com cap enrere |
Ús de la memòria | Utilitza menys memòria (només un punter per node) funcions de cadena en java | Utilitza més memòria (dos indicadors per node) |
Inserció/supressió | Inserció i supressió ràpida, però només a o després d'una posició determinada | Inserció i supressió ràpida en qualsevol lloc (abans o després d'una posició) |
Funcions compatibles | Limitat en comparació amb la llista (sense mida () sense niteradors inversos) | Interfície més completa inclosa la mida () inversa () iterators bidireccionals. |
| llista c# | |