Sobes.tech
Junior

Ką žinote apie duomenų struktūrą 'eilė'?

sobes.tech AI

Atsakymas iš AI

Eilė (Queue) — tai duomenų struktūra, veikianti pagal FIFO (First-In, First-Out) principą: pirmas įeinantis elementas pirmas išeina.

Pagrindinės operacijos:

  • put/enqueue: elemento pridėjimas į eilės galą.
  • get/dequeue: elemento pašalinimas ir grąžinimas iš pradžios.
  • peek/front: peržiūrėti elemento pradžioje — be pašalinimo.
  • is_empty: patikrinti, ar eilė tuščia.
  • size: gauti esamų elementų skaičių.

Python įgyvendinimai:

  • list: paprasta, bet neefektyvu dažnų operacijų pop(0) atveju.
  • collections.deque: dvipusė eilė, optimizuota abiejų galų pridėjimui ir pašalinimui, dažnai naudojama kaip įprasta eilė.
  • queue.Queue: srauto saugi įgyvendinimas, patogu duomenų mainams tarp srautų.

collections.deque pavyzdžiai:

# Eilės inicializavimas
from collections import deque
q = deque()

# Elementų pridėjimas (enqueue)
q.append('a')
q.append('b')
q.append('c')

# Elementų pašalinimas ir grąžinimas (dequeue)
pirmas_elementas = q.popleft() # 'a'
antras_elementas = q.popleft() # 'b'

# Peržiūrėti elemento pradžioje (peek) — netiesiogiai, reikalauja importo arba tuščios eilės patikrinimo
if q:
    peek_element = q[0] # 'c'

# Patikrinti, ar eilė tuščia
ar_tuščia = not q

# Dydis
dabartinis_dydis = len(q)

queue.Queue pavyzdžiai:

# Srauto saugios eilės inicializavimas
from queue import Queue
q_threaded = Queue()

# Elementų pridėjimas (put)
q_threaded.put('užduotis1')
q_threaded.put('užduotis2')

# Elementų pašalinimas ir grąžinimas (get) — blokuojanti operacija
užduotis = q_threaded.get() # 'užduotis1'

# Baigimo pranešimas
q_threaded.task_done()

# Patikrinti, ar eilė tuščia
ar_tuščia_eilė = q_threaded.empty()

# Dydis
dabartinis_dydis = q_threaded.qsize()

Naudojama:

  • Užduočių planavimas (scheduler)
  • FIFO buferiai
  • Grafo apėjimo algoritmai (BFS)
  • Užklausų apdorojimas (pvz., žiniatinklio serveriuose)
  • Srautų saugi sąveika tarp srautų (queue.Queue).