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.Queuebilan).