C++: Lista jednokierunkowa i dwukierunkowa
Lista dwukierunkowa w C++: std::list
W świecie C++, std::list
jest kontenerem sekwencyjnym, który zapewnia elastyczną obsługę danych. Ta lista dwukierunkowa oferuje unikalną funkcjonalność, umożliwiając dostęp do elementów zarówno od początku, jak i od końca. Dzięki temu, że przechowuje dane w sposób nieliniowy, std::list
jest idealna w sytuacjach, gdzie często wymagane jest wstawianie lub usuwanie elementów.
Operacje na std::list
std::list
udostępnia szereg operacji:
- Wstawianie Elementów: Metody takie jak
push_back()
,push_front()
iinsert()
pozwalają na dodanie nowych elementów zarówno na końcu, jak i na początku listy, a także w dowolnym innym miejscu. - Usuwanie Elementów: Można łatwo usuwać elementy za pomocą funkcji
pop_back()
,pop_front()
ierase()
, co jest kluczowe w dynamicznych aplikacjach, gdzie zawartość listy często ulega zmianie. - Iteracja: Lista dwukierunkowa umożliwia iterację w obu kierunkach, co jest szczególnie przydatne w przypadkach, gdy wymagane jest przeglądanie lub modyfikowanie danych w różnych sekwencjach.
Przykład Użycia std::list
Zobaczmy, jak w praktyce wykorzystać std::list
#include <list>
#include <iostream>
int main() {
std::list<int> liczby = {1, 2, 3};
liczby.push_front(0); // Dodanie na początku listy
liczby.push_back(4); // Dodanie na końcu listy
// Iteracja i wyświetlenie elementów listy
for (auto it = liczby.begin(); it != liczby.end(); ++it) {
std::cout << *it << " ";
}
}
Kod demonstruje użycie kontenera std::list
z biblioteki standardowej C++. std::list
jest listą dwukierunkową, co oznacza, że każdy element zawiera odniesienia zarówno do poprzedniego, jak i następnego elementu w sekwencji.
Analiza kodu
- Załączenie nagłówka
<list>
, który zawiera definicję szablonustd::list
. - Załączenie nagłówka
<iostream>
, aby umożliwić wykorzystanie operacji wejścia-wyjścia, w tym standardowego strumienia wyjściowegostd::cout
. - Rozpoczęcie funkcji
main
, która jest punktem wejścia każdego programu w C++. - Deklaracja i inicjalizacja listy dwukierunkowej
liczby
typuint
z początkowymi wartościami {1, 2, 3}. - Dodanie wartości 0 na początek listy
liczby
za pomocą metodypush_front()
. - Dodanie wartości 4 na koniec listy
liczby
za pomocą metodypush_back()
. - Rozpoczęcie pętli
for
, w której tworzony jest iteratorit
do przechodzenia przez listęliczby
. Pętla kontynuuje, dopóki iterator nie osiągnie końca listy (liczby.end()
). - Wyświetlenie wartości, na którą wskazuje iterator (element listy), po czym dodanie spacji. Operator dereferencji
*
jest używany do dostępu do wartości wskazywanej przez iterator. - Zakończenie funkcji
main
.
Zawartość Listy na Poszczególnych Etapach
-
Po Inicjalizacji:
liczby = {1, 2, 3}
Lista zawiera trzy elementy: 1, 2, 3. -
Po
push_front(0)
:liczby = {0, 1, 2, 3}
Na początku listy zostaje dodany element 0. -
Po
push_back(4)
:liczby = {0, 1, 2, 3, 4}
Na końcu listy zostaje dodany element 4.
Efekt Wykonania Kodu
Efektem wykonania powyższego kodu jest wypisanie na ekranie zawartości listy. Każdy element listy zostanie wyświetlony w kolejności, w jakiej znajduje się na liście, każdy oddzielony spacją. Oto wynik:
0 1 2 3 4
Lista jednokierunkowa w C++: std::forward_list
Lista jednokierunkowa, zaimplementowana w C++ jako std::forward_list
, jest kontenerem sekwencyjnym, który przechowuje dane w sposób liniowy. W przeciwieństwie do listy dwukierunkowej, lista jednokierunkowa pozwala na przemieszczanie się tylko w jednym kierunku: od początku do końca. Jest to struktura danych idealna dla operacji, które nie wymagają dostępu do poprzednich elementów sekwencji.
Operacje na std::forward_list
- Wstawianie Elementów: Metody takie jak
push_front()
iinsert_after()
umożliwiają dodawanie nowych elementów na początku listy lub za określonym elementem. - Usuwanie Elementów: Funkcje
pop_front()
ierase_after()
służą do usuwania elementów z listy. - Iteracja: Lista jednokierunkowa umożliwia iterację od początku do końca za pomocą iteratorów.
Przykład Użycia std::forward_list
Poniższy kod pokazuje, jak korzystać z listy jednokierunkowej w C++:
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> liczby = {3, 2, 1};
liczby.push_front(0); // Dodanie na początku listy
// Iteracja i wyświetlenie elementów listy
for (auto it = liczby.begin(); it != liczby.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
Analiza Kodu
- Włączenie nagłówka
<forward_list>
, który zawiera definicjęstd::forward_list
. - Inicjalizacja listy jednokierunkowej
liczby
z wartościami {3, 2, 1}. - Dodanie elementu 0 na początku listy za pomocą
push_front()
. - Iteracja po liście i wyświetlenie jej elementów.
Zawartość Listy na Poszczególnych Etapach
- Po Inicjalizacji:
liczby = {3, 2, 1}
- Po
push_front(0)
:liczby = {0, 3, 2, 1}
Efekt Wykonania Kodu
Efektem działania programu jest wyświetlenie na ekranie zawartości listy jednokierunkowej, z elementami wypisanymi w kolejności, w jakiej zostały dodane: "0 3 2 1".
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |