Sobes.tech
Junior

Siz 'navbat' ma'lumotlar tuzilmasi haqida nima bilasiz?

sobes.tech AI

AIdan javob

Queue (Queue) - buzdolilikning FIFO (First-In, First-Out) tamoyiliga asoslangan chiziqli ma'lumotlar tuzilmasi: kirgan birinchi element birinchi chiqariladi.

Asosiy operatsiyalar:

  • put/enqueue: elementni qator oxiriga qo'shish.
  • get/dequeue: qator boshidan elementni olib tashlash va qaytarish.
  • peek/front: qator boshidagi elementga qarash, uni o'chirmasdan.
  • is_empty: qator bo'sh yoki yo'qligini tekshirish.
  • size: hozirgi elementlar sonini olish.

Python'da amalga oshirish:

  • list: oddiy, lekin ko'p ishlatiladigan pop(0) operatsiyasi uchun samarali emas.
  • collections.deque: ikki tomonlama qator, har ikkala uchidan qo'shish/olib tashlash uchun optimallashtirilgan, odatiy qator sifatida samarali ishlatiladi.
  • queue.Queue: iplararo xavfsiz amalga oshirish, ma'lumot almashinuvi uchun qulay.

collections.deque dan foydalanish misollari:

# Qatorni boshlash
from collections import deque
q = deque()

# Elementlar qo'shish (enqueue)
q.append('a')
q.append('b')
q.append('c')

# Elementlarni olib tashlash va qaytarish (dequeue)
first_element = q.popleft() # 'a'
second_element = q.popleft() # 'b'

# Qator boshidagi elementga qarash (peek) - bilvosita, funktsiya import qilish yoki bo'sh emasligini tekshirish kerak
if q:
    peek_element = q[0] # 'c'

# Bo'sh yoki yo'qligini tekshirish
is_empty = not q

# Hajm
current_size = len(q)

queue.Queue dan foydalanish misollari:

# Xavfsiz ipli qatorni boshlash
from queue import Queue
q_threaded = Queue()

# Elementlar qo'shish (put)
q_threaded.put('task1')
q_threaded.put('task2')

# Elementlarni olib tashlash va qaytarish (get) - bloklovchi operatsiya default

task = q_threaded.get() # 'task1'

# Ishni tugatishni bildirish (join uchun)
q_threaded.task_done()

# Bo'sh yoki yo'qligini tekshirish
is_empty_threaded = q_threaded.empty()

# Hajm
current_size_threaded = q_threaded.qsize()

Qo'llanilishi:

  • Vazifalarni rejalashtirish (scheduler).
  • FIFO bufferlar.
  • Graflarni qidirish algoritmlari (BFS - Breadth-First Search).
  • So'rovlarni qayta ishlash (masalan, veb-serverda).
  • Iplararo xavfsiz hamkorlik ( queue.Queue bilan).