Implement Queue with Stacks
Sadece stack kullanarak queue implement et. Amortized O(1).
Sliding Window Maximum
Her k-boyutlu pencerede maksimum. Deque (monotonic queue) — O(n).
Design Circular Queue
Sabit boyutlu circular queue tasarla. FIFO, front/rear wrap eder.
Number of Recent Calls
Son 3000 ms içindeki ping sayısı. Her ping() çağrısı için.
Moving Average from Data Stream
Son N değerin hareketli ortalamasını (sliding window) hesapla. next(val) çağrıldıkça queue'nun son N değerinin ortalamasını döndür. N'den az eleman varsa mevcut elemanların ortalamasını al.
Python Queue Nedir?
Queue (Kuyruk) Nedir?
Queue, FIFO (First-In, First-Out — ilk giren ilk çıkar) prensibiyle çalışan bir veri yapısıdır. İki temel işlemi vardır: enqueue (kuyruğun sonuna ekle) ve dequeue (kuyruğun başından çıkar). Python'da list ile queue yapılabilir ama baştan çıkarma O(n) olduğu için yavaştır; bu yüzden collections.deque tercih edilir.
Queue'nun klasik kullanım alanları: BFS (genişlik öncelikli arama), task scheduling (işletim sistemi, mesaj kuyruğu), printer queue, cache'lerde FIFO eviction, producer-consumer problemi. Mülakatlarda en sık sorulan: "kuyruğu kullanarak seviye seviye binary tree dolaşma" (BFS).
from collections import deque
# Queue — deque ile (O(1) her iki uç)
q = deque()
q.append(1) # enqueue (sağdan)
q.append(2)
q.append(3)
print(q) # deque([1, 2, 3])
front = q.popleft() # dequeue (soldan) → 1
print(q) # deque([2, 3])
# BFS örneği (seviye seviye tree dolaşma)
def bfs(root):
if not root:
return []
result = []
q = deque([root])
while q:
node = q.popleft()
result.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
return result
# Circular queue (sabit boyutlu)
class CircularQueue:
def __init__(self, k: int):
self.q = deque(maxlen=k)
def enqueue(self, val: int) -> bool:
if len(self.q) == self.q.maxlen:
return False
self.q.append(val)
return True
def dequeue(self) -> bool:
if not self.q:
return False
self.q.popleft()
return True
def front(self) -> int:
return -1 if not self.q else self.q[0]
def rear(self) -> int:
return -1 if not self.q else self.q[-1]
def is_empty(self) -> bool:
return not self.q
def is_full(self) -> bool:
return len(self.q) == self.q.maxlenQueue Ne Zaman Kullanılır?
BFS, producer-consumer, scheduling, rate limiting gibi sıra koruma gerektiren durumlarda queue idealdir. Priority queue (heap) ise "en yüksek öncelikli önce" senaryolarında tercih edilir. Circular queuesabit boyutlu buffer gerektiren yerlerde (örneğin producer-consumer'da bounded buffer) kullanılır.
list.pop(0) kullanma — O(n) maliyeti var. Her zaman deque.popleft() tercih et.- BFS (breadth-first search): ağaç veya graf seviye seviye dolaşma
- Task scheduling: işletim sistemi, mesaj kuyruğu (Celery, RabbitMQ)
- Cache eviction: FIFO cache, ring buffer
- Producer-consumer: sınırlı buffer, multi-threading
- Print queue, request queue: sıralı işlem
- Stream processing: akan veriden sliding window
İlgili Kategoriler
Veri Yapıları
Tüm veri yapıları.
Python Stack
LIFO stack için 5+ soru.
Python Heap
heapq, priority queue için 8+ soru.
Python Algoritma Soruları
Sıralama, arama, DP, graf.
Tüm Mülakat Kategorileri
9 kategori, 132 soru.
Python Eğitimi
Sıfırdan ileri seviyeye Türkçe dersler.