Sobes.tech
Junior

რა იცით მონაცემთა სტრუქტურაზე 'სია'?

sobes.tech AI

პასუხი AI-სგან

სია (Queue) — ეს მონაცემთა სიაა, რომელიც მუშაობს FIFO (First-In, First-Out) პრინციპით: პირველი შეყვანილი ელემენტი პირველი გამოდის.

ძირითადი ოპერაციები:

  • put/enqueue: ელემენტის დამატება ბოლო ადგილზე.
  • get/dequeue: ელემენტის ამოღება და დაბრუნება დასაწყისიდან.
  • peek/front: ელემენტის ნახვა დასაწყისში — ამოღების გარეშე.
  • is_empty: სიის ცარიელობა შემოწმება.
  • size: მიმდინარე ელემენტების რაოდენობა.

Python-ში რეალიზაციები:

  • list: მარტივი, მაგრამ არაეფექტური ხშირი ოპერაციების დროს (pop(0) სვლით).
  • collections.deque: ორმხრივი სია, ოპტიმიზირებულია ორივე მხარის დამატებისა და ამოღებისთვის, ჩვეულებრივი სიის მსგავსად გამოიყენება.
  • queue.Queue: ნაკადის უსაფრთხო რეალიზაცია, სასარგებლოა ნაკადებს შორის მონაცემთა გაცვლისთვის.

collections.deque გამოყენების მაგალითები:

# სიის ინიციალიზაცია
from collections import deque
q = deque()

# ელემენტების დამატება (enqueue)
q.append('a')
q.append('b')
q.append('c')

# ელემენტების ამოღება და დაბრუნება (dequeue)
პირველი_ელემენტი = q.popleft() # 'a'
მეორე_ელემენტი = q.popleft() # 'b'

# დასაწყისში ელემენტის ნახვა (peek) — პირდაპირი არაა, საჭიროებს იმპორტს ან ცარიელობის შემოწმებას
if q:
    peek_element = q[0] # 'c'

# ცარიელობის შემოწმება
ცარიელია = not q

# ზომა
ამჟამინდელი_ზომა = len(q)

queue.Queue გამოყენების მაგალითები:

# ნაკადის უსაფრთხო სიის ინიციალიზაცია
from queue import Queue
q_threaded = Queue()

# ელემენტების დამატება (put)
q_threaded.put('task1')
q_threaded.put('task2')

# ელემენტების ამოღება და დაბრუნება (get) — ბლოკირებადი ოპერაცია
საქმე = q_threaded.get() # 'task1'

# დასრულების შეტყობინება
q_threaded.task_done()

# ცარიელობის შემოწმება
ცარიელია_ნაკადი = q_threaded.empty()

# ზომა
ამჟამინდელი_ზომა = q_threaded.qsize()

გამოყენება:

  • დავალებების დაგეგმვა (scheduler)
  • FIFO ბუფერები
  • გრაფების სვლები (BFS)
  • მოთხოვნების დამუშავება (მაგ., ვებ სერვერში)
  • ნაკადებს შორის უსაფრთხო ურთიერთქმედება (queue.Queue-ით).