Jednokierunkowa lista wiązana
Węzły, własność i przechodzenie po liście.
Jednokierunkowa lista wiązana to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.
Czym jest lista jednokierunkowa
Lista jednokierunkowa łączy wartości: każdy węzeł przechowuje wartość i wskaźnik do następnego węzła albo null na końcu. 🔗
Definiowanie węzła
Węzeł to struktura zawierająca wartość i opcjonalny wskaźnik do następnego węzła. Opcjonalność oznacza, że ostatni węzeł wskazuje na null.
const Node = struct {
value: i32,
next: ?*Node,
};Dlaczego wskaźnik jest opcjonalny
Użycie ?*Node pozwala bezpiecznie zakończyć łańcuch. Nie trzeba stosować specjalnej wartości wartownika oznaczającej koniec.
next: ?*NodeLista śledzi początek
Sama lista zapamiętuje tylko pierwszy węzeł, nazywany głową, oraz alokator, do którego należą wszystkie węzły.
const List = struct {
head: ?*Node,
alloc: std.mem.Allocator,
};Alokowanie jednego węzła
Aby dodać wartość, poproś alokator o utworzenie pojedynczego węzła Node na stercie. Zwraca to wskaźnik do nowo przydzielonego obszaru pamięci.
const node = try self.alloc.create(Node);Dodawanie na początku
Najtańsze dodawanie odbywa się na początku: skieruj nowy węzeł na dotychczasową głowę, a następnie ustaw go jako nową głowę. Operacja ma stałą złożoność czasową.
node.* = .{ .value = v, .next = self.head };
self.head = node;Przechodzenie po łańcuchu
Aby przejść po liście, zacznij od głowy i podążaj za każdym wskaźnikiem next, aż dotrzesz do null. Pętla while dobrze odwzorowuje tę operację.
var cur = self.head;
while (cur) |n| {
std.debug.print("{d}\n", .{n.value});
cur = n.next;
}Capture rozwija wartość opcjonalną
Zapis while (cur) |n| wykonuje ciało pętli tylko wtedy, gdy cur nie jest null, a n jest rozwiniętym wskaźnikiem. Pętla kończy się po napotkaniu null.
while (cur) |n| { ... }Każdy węzeł należy do Państwa
Każdy węzeł pochodzi z alokatora, więc każdy trzeba zwrócić. Pominięcie choćby jednego powoduje wyciek, który zgłosi alokator testowy.
Zwalnianie całej listy
W deinit przejdź po łańcuchu, ale pobierz next przed zwolnieniem, ponieważ węzeł znika w chwili jego zniszczenia.
var cur = self.head;
while (cur) |n| {
const nxt = n.next;
self.alloc.destroy(n);
cur = nxt;
}Uogólnianie typu
Umieść Node i List w funkcji zwracającej typ, aby lista działała dla dowolnego typu elementów, a nie tylko dla i32.
fn LinkedList(comptime T: type) type {
return struct {
const Node = struct { value: T, next: ?*Node };
};
}Szybkie sprawdzenie
Zwalniają Państwo węzły listy jednokierunkowej jeden po drugim. Co należy zrobić przed zniszczeniem każdego węzła?
Podsumowanie
Węzły przechowują wartość i opcjonalny wskaźnik next. Lista śledzi głowę i alokator, dodaje elementy na początku oraz zwalnia węzły jeden po drugim. 🎯
Ucz się Zig dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Jednokierunkowa lista wiązana” jest bezpłatna?
Tak — pełny tekst „Jednokierunkowa lista wiązana” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Jednokierunkowa lista wiązana”?
Węzły, własność i przechodzenie po liście. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Zig Academy?
Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Jednokierunkowa lista wiązana”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?
Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Generyczny stos od podstaw
- Jednokierunkowa lista wiązana
- Korzystanie z HashMap i AutoHashMap
- Profilowanie i kompromisy bezpieczeństwa