Stos i kolejka w PythonieTemat: „Struktury proste i użyteczne”

1. Wstęp: jak komputer radzi sobie z danymi

Każdy z nas coś zapisuje — numery telefonów, listę zakupów, oceny z ostatnich sprawdzianów albo listę ulubionych piosenek.
Komputer też musi przechowywać dane.
Ale nie trzyma ich „na kartce”, tylko w specjalnych strukturach danych — czyli sposobach porządkowania informacji w pamięci.

Najprostsza z nich to lista.
Ale zanim do niej przejdziemy, warto zrozumieć pewną różnicę…


2. Tablica a struktura dynamiczna

Wyobraź sobie, że masz pudełko na 10 miejsc i wkładasz tam swoje rzeczy.
Jeśli chcesz włożyć jedenasty przedmiot — nie ma już miejsca.
Musisz wziąć większe pudełko i wszystko przepakować.

Tak działa tablica statyczna — ma określony rozmiar, którego nie da się łatwo zmienić.

A teraz wyobraź sobie pudełko LEGO, do którego możesz dokładać klocki, kiedy chcesz.
Nie musisz nic przepakowywać — po prostu dołączasz nowy klocek na końcu.
To jest struktura dynamiczna — taka, która potrafi zmieniać rozmiar w trakcie działania programu.


3. Lista – magazyn danych

Lista to najprostszy przykład struktury dynamicznej.
To po prostu zbiór elementów ułożonych w kolejności — tak jak półki w magazynie.

Można do niej:

  • dodać nowy element (append()),
  • usunąć ostatni (pop()),
  • wstawić coś w wybrane miejsce (insert()).

Przykład:

lista = []  # pusta lista

lista.append("mleko")
lista.append("chleb")
lista.append("masło")

print("Lista zakupów:", lista)

lista.pop()  # usuwa ostatni element
print("Po usunięciu:", lista)

lista.insert(1, "ser")  # wstawiamy w środek
print("Po wstawieniu sera:", lista)

Wynik:

Lista zakupów: ['mleko', 'chleb', 'masło']
Po usunięciu: ['mleko', 'chleb']
Po wstawieniu sera: ['mleko', 'ser', 'chleb']

W pamięci komputer trzyma to tak:

mleko → ser → chleb

Każdy element „wskazuje” na następny.


4. Stos – jak wieża talerzy

Wyobraź sobie stos talerzy w szkolnej stołówce.
Kładziesz jeden na drugi, ale jak chcesz wziąć talerz, to zdejmujesz ten z góry.
Nie sięgniesz po środkowy, dopóki nie zdejmiesz wszystkich powyżej.

To właśnie stos (stack).
Zasada działania to LIFOLast In, First Out – ostatni wszedł, pierwszy wychodzi.

Przykład:

stos = []

stos.append("Matematyka")
stos.append("Informatyka")
stos.append("Angielski")

print("Stos:", stos)

ostatni = stos.pop()
print("Zdejmuję ze stosu:", ostatni)
print("Po zdjęciu:", stos)

Wynik:

Stos: ['Matematyka', 'Informatyka', 'Angielski']
Zdejmuję ze stosu: Angielski
Po zdjęciu: ['Matematyka', 'Informatyka']

W pamięci:

↑ Angielski
↑ Informatyka
↑ Matematyka

Gdzie w życiu używa się stosu?

  • historia stron w przeglądarce (przycisk „Wstecz”),
  • cofanie ostatniego ruchu w grze (undo),
  • sprawdzanie poprawności nawiasów w wyrażeniach matematycznych.

5. Kolejka – jak w sklepie lub w stołówce

Kto pierwszy stanął, ten pierwszy wychodzi.
Nie możesz się przepchnąć na początek, bo wszyscy czekają w kolejności.
Tak działa kolejka (queue).
Jej zasada to FIFOFirst In, First Out – pierwszy wszedł, pierwszy wychodzi.

Przykład:

from collections import deque

kolejka = deque()

kolejka.append("Ola")
kolejka.append("Tomek")
kolejka.append("Kasia")

print("Kolejka:", kolejka)

pierwszy = kolejka.popleft()
print("Obsłużono:", pierwszy)
print("Zostało:", kolejka)

Wynik:

Kolejka: deque(['Ola', 'Tomek', 'Kasia'])
Obsłużono: Ola
Zostało: deque(['Tomek', 'Kasia'])

W pamięci:

Ola → Tomek → Kasia

Gdzie w życiu używa się kolejki?

  • kolejka klientów do obsługi (drukarka, sklep),
  • kolejka zadań w systemie operacyjnym,
  • kolejka graczy w grach online.

6. Jak to wszystko zapamiętać

StrukturaZasadaPrzykład z życiaSposób działania
ListaDodajesz, usuwasz, wstawiasz gdzie chceszLista zakupówswobodne manipulowanie danymi
StosOstatni wchodzi, pierwszy wychodzi (LIFO)Stos talerzyappend() i pop()
KolejkaPierwszy wchodzi, pierwszy wychodzi (FIFO)Kolejka do kasyappend() i popleft()

7. Po co to wiedzieć?

Zrozumienie tych struktur to podstawa programowania.
Każda aplikacja, gra czy system operacyjny w jakiś sposób z nich korzysta:

  • gra przechowuje ruchy gracza na stosie,
  • system drukarki ma kolejkę zadań,
  • sklep internetowy ma listę produktów.

To jak z klocków LEGO — na tych prostych strukturach buduje się wszystko, co potem nazywamy „algorytmami”.


8. Zadania do samodzielnego wykonania

Zadanie 1 – Lista zakupów
Napisz program, który pozwala:

  • dodawać produkty do listy,
  • usuwać ostatni,
  • wyświetlać listę.
    Zakończ wpisując „koniec”.

Zadanie 2 – Stos książek
Zaimplementuj stos, do którego możesz dodawać tytuły książek (push) i zdejmować je (pop).
Pokaż, które książki pozostały.

Zadanie 3 – Kolejka do lekarza
Utwórz kolejkę pacjentów. Każdy wpisuje swoje imię.
Lekarz obsługuje pacjentów w kolejności zgłoszeń (popleft()).

Zadanie 4 – Dla chętnych
Napisz program, który sprawdza, czy nawiasy w wyrażeniu matematycznym są poprawnie dopasowane.
Podpowiedź: użyj stos do śledzenia otwierających nawiasów.


9. Podsumowanie

  • Struktury dynamiczne mogą zmieniać rozmiar podczas działania programu.
  • W Pythonie wszystkie trzy — lista, stos i kolejka — można zrealizować bardzo prosto.
  • Ich zrozumienie to klucz do nauki bardziej złożonych struktur, takich jak drzewa, grafy czy tablice haszujące.

Jak to sobie wyobrazić

LISTA:
[A] – [B] – [C] ← można dodać lub wyjąć w dowolnym miejscu

STOS:
↑ C
↑ B
↑ A ← zdejmujesz tylko z góry (LIFO)

KOLEJKA:
A → B → C ← pierwszy wchodzi, pierwszy wychodzi (FIFO)