Zig Academy · Lekcja

Jednokierunkowa lista wiązana

Węzły, własność i przechodzenie po liście.

Lekcja 2 z 413 kroki

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: ?*Node

Lista ś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. 🎯

Bezpłatny start

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

  1. Generyczny stos od podstaw
  2. Jednokierunkowa lista wiązana
  3. Korzystanie z HashMap i AutoHashMap
  4. Profilowanie i kompromisy bezpieczeństwa
← Powrót do Zig Academy