Sobes.tech
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.Queue segítségével).