Strona główna Algorytmy i Struktury Danych Struktury danych

📦 Struktury danych

Interaktywne wizualizacje stosów, kolejek, list wiązanych i tablic haszujących — wstawianie, usuwanie i wyszukiwanie krok po kroku.

Algorytmy i Struktury Danych2DŁatwy60 FPS
data-structures ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O tej symulacji

Ta symulacja pozwala przełączać się między czterema podstawowymi strukturami danych — stosem, kolejką, listą wiązaną i tablicą haszującą — i wykonywać na żywo operacje wstawiania/usuwania na każdej z nich, renderowane w czasie rzeczywistym na płótnie Three.js/WebGL. Odłóż wartość na stos, dodaj ją do kolejki, wstaw na początek listy wiązanej albo obejrzyj, jak funkcja haszująca kieruje ją do jednego z 8 koszyków, łącząc kolizje w łańcuch. Każda operacja aktualizuje panel statystyk na żywo i trafia do dziennika operacji, dzięki czemu widać dokładnie, co się stało i dlaczego.

🔬 Co pokazuje

Cztery zakładki — Stos, Kolejka, Lista wiązana, Tablica haszująca — każda z własnym animowanym diagramem. Stos rysuje pola rosnące od podstawy w górę z podświetloną górną komórką; kolejka rysuje pola od lewej do prawej z etykietami początku i końca; lista wiązana rysuje pola połączone strzałkami wskaźników kończącymi się na NULL; tablica haszująca rysuje 8 ponumerowanych koszyków z kolidującymi wartościami połączonymi w łańcuch obok siebie.

🎮 Jak korzystać

Wybierz strukturę z rzędu zakładek Structure, wpisz wartość (0-99) w pole tekstowe, a następnie naciśnij przyciski operacji — Push/Pop dla stosu, Enqueue/Dequeue dla kolejki, Insert Head/Delete dla listy wiązanej lub Insert/Delete dla tablicy haszującej (kierowanej według wartości modulo 8). Panel Stats śledzi rozmiar i złożoność czasową, Operation Log wypisuje każdą wykonaną operację, a Clear All czyści bieżącą strukturę. Kliknij dowolną komórkę lub koszyk, aby ją podświetlić.

💡 Czy wiesz, że?

Tablica haszująca w tej symulacji rozwiązuje kolizje metodą łańcuchową: gdy dwie wartości trafią do tego samego koszyka (h(k) = k mod 8), są po prostu dopisywane do małej listy w tym koszyku, zamiast powodować błąd. Dopóki współczynnik wypełnienia (liczba elementów ÷ liczba koszyków) pozostaje niski, średni czas wstawiania i wyszukiwania jest bliski O(1) — dokładnie ta sama technika stosowana wewnątrz środowisk uruchomieniowych języków, takich jak dict w Pythonie czy HashMap w Javie.

Najczęściej zadawane pytania

Jaka jest różnica między stosem a kolejką?

Stos działa w porządku LIFO — ostatni odłożony element jest pierwszym zdejmowanym, jak stos talerzy. Kolejka działa w porządku FIFO — pierwszy dodany element jest pierwszym obsłużonym, jak kolejka w sklepie. Stosy wykorzystuje się w rekurencji i operacjach cofania; kolejki — w planowaniu zadań i przeszukiwaniu grafów wszerz (BFS).

Dlaczego tablice haszujące mają średnio złożoność wyszukiwania O(1)?

Funkcja haszująca zamienia klucz na indeks liczbowy, wskazujący bezpośrednio na lokalizację w pamięci. Dopóki współczynnik wypełnienia (liczba elementów ÷ liczba koszyków) pozostaje niski, kolizje są rzadkie i każde wyszukanie dotyka tylko jednej lub dwóch lokalizacji w pamięci. W najgorszym przypadku, przy wielu kolizjach, wyszukiwanie degraduje się do O(n).

Kiedy warto wybrać listę wiązaną zamiast tablicy?

Listy wiązane sprawdzają się, gdy potrzebne są częste wstawienia lub usunięcia na początku bądź w środku listy bez przesuwania elementów. Tablice zapewniają dostęp swobodny O(1) po indeksie, czego listy wiązane nie oferują. Jeśli głównie odczytujesz dane po pozycji, wybierz tablicę; jeśli głównie wstawiasz/usuwasz w dowolnych miejscach, lista wiązana jest wydajniejsza.

Podobne symulacje