صف (Queue)

صف با اصل FIFO: عملیات enqueue و dequeue، صف دوری، صف اولویت‌دار و کاربردهای واقعی

صف چیست؟

صف (Queue) ساختاری است که از یک انته ورود (rear) و از انته دیگر خروج (front) دارد؛ اصل FIFO (First In, First Out — اولین وارد، اولین خارج).

مثل صف نانوایی: اولین نفری که در صف ایستاده، اولین نفری است که نان می‌گیرد.

عملیات اصلی

عملیاتپیچیدگیتوضیح
enqueueO(1)افزودن به انته صف
dequeueO(1)برداشتن از جلوی صف
front/peekO(1)دیدن اول صف بدون حذف
is_emptyO(1)خالی بودن

هشدار پیاده‌سازی در پایتون!

با list معمولی، pop(0) برای dequeue O(n) است (همه عناصر جابه‌جا می‌شوند)! راه درست:

from collections import deque
q = deque()
q.append(10)      # enqueue: O(1)
q.popleft()       # dequeue: O(1)

انواع صف

کاربردهای واقعی

صف دوری — چرا؟

در صف آرایه‌ای ساده، بعد از چند dequeue، خانه‌های ابتدایی بلااستفاده می‌مانند. صف دوری با ماژولو انته آرایه را به ابتدا وصل می‌کند:

next_rear = (rear + 1) % capacity
نکته: قانون سرانگشتی — پشته برای «برگردادن به عقب» (Undo/Back) و صف برای «پردازش منصفانه به ترتیب» (نوبت‌بندی). BFS از صف و DFS از پشته استفاده می‌کند!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط