Junior
Mit tud az 'sor' adatszerkezetről?
sobes.tech MI
Válasz az MI-től
A sor (Queue) egy lineáris adatszerkezet, amely a FIFO (First-In, First-Out) elven működik: az elsőként beérkező elem kerül elsőként kiadásra.
Fő műveletek:
- put/enqueue: elem hozzáadása a sor végéhez.
- get/dequeue: elem eltávolítása és visszaadása a sor elejéről.
- peek/front: a sor elején lévő elem megtekintése anélkül, hogy eltávolítanánk.
- is_empty: ellenőrzés, hogy a sor üres-e.
- size: aktuális elem számának lekérdezése.
Pythonban történő megvalósítások:
- list: egyszerű, de nem hatékony a gyakori
pop(0)műveleteknél (elemek eltolása). - collections.deque: két vége nyitott sor, optimalizált mindkét végén való hozzáadásra/eltávolításra, hatékonyan használható normál sorként.
- queue.Queue: szálbiztos implementáció, kényelmes adatcsere szálak között.
A collections.deque használatának példái:
# Sor inicializálása
from collections import deque
q = deque()
# Elem hozzáadása (enqueue)
q.append('a')
q.append('b')
q.append('c')
# Elem eltávolítása és visszaadása (dequeue)
first_element = q.popleft() # 'a'
second_element = q.popleft() # 'b'
# Az első elem megtekintése (peek) - közvetett, importálás vagy üresség ellenőrzése szükséges
if q:
peek_element = q[0] # 'c'
# Üresség ellenőrzése
is_empty = not q
# Méret
current_size = len(q)
A queue.Queue használatának példái:
# Szálbiztos sor inicializálása
from queue import Queue
q_threaded = Queue()
# Elem hozzáadása (put)
q_threaded.put('task1')
q_threaded.put('task2')
# Elem eltávolítása és visszaadása (get) - alapértelmezett blokkoló művelet
task = q_threaded.get() # 'task1'
# A feldolgozás befejezésének jelzése (join)
q_threaded.task_done()
# Üresség ellenőrzése
is_empty_threaded = q_threaded.empty()
# Méret
current_size_threaded = q_threaded.qsize()
Alkalmazások:
- Feladatütemezés (scheduler).
- FIFO puffer.
- gráf bejárási algoritmusok (BFS - Breadth-First Search).
- Kérések feldolgozása (pl. web szerverben).
- Szálak közötti biztonságos interakció (a
queue.Queuesegítségével).