Sistem antrian (queuing system) adalah salah satu struktur data fundamental dalam ilmu komputer, vital untuk mengelola tugas secara adil dan berurutan (First-In, First-Out atau FIFO). Menggunakan Python untuk mengimplementasikan sistem ini sangatlah mudah berkat sintaksnya yang bersih dan dukungan pustaka standar yang kuat.
Dalam konteks pengembangan aplikasi sederhana, seperti sistem kasir mini atau manajemen panggilan layanan, pemahaman mendalam tentang cara kerja antrian sangatlah krusial. Artikel ini akan memandu Anda membangun program antrian dasar menggunakan koleksi bawaan Python, khususnya modul collections.deque, yang menawarkan kinerja optimal untuk operasi penambahan (enqueue) dan penghapusan (dequeue) dari kedua ujung.
collections.deque?
Secara teoritis, kita bisa menggunakan list bawaan Python untuk membuat antrian. Namun, ketika menggunakan list, operasi list.pop(0) (untuk mengeluarkan elemen pertama) memerlukan waktu O(n) karena semua elemen lain harus digeser. Ini menjadi lambat seiring bertambahnya ukuran antrian.
Di sinilah deque (double-ended queue) berperan. Dibuat untuk mendukung penambahan dan penghapusan cepat di kedua ujungnya dengan kompleksitas waktu O(1). Ini menjadikannya pilihan superior untuk membangun antrian yang efisien.
Langkah pertama adalah mengimpor deque dan membuat instance antrian kosong.
from collections import deque
# Membuat antrian baru
antrian_layanan = deque()
print("Antrian berhasil dibuat.")
Operasi utama dalam antrian adalah:
deque, ini dilakukan menggunakan append().popleft().Mari kita tambahkan beberapa nomor antrian:
antrian_layanan.append("Antrian-001")
antrian_layanan.append("Antrian-002")
antrian_layanan.append("Antrian-003")
print(f"Isi antrian saat ini: {list(antrian_layanan)}")
print(f"Ukuran antrian: {len(antrian_layanan)}")
Sekarang, kita memproses antrian yang paling depan:
if antrian_layanan:
nomor_diproses = antrian_layanan.popleft()
print(f"Memproses: {nomor_diproses}")
else:
print("Antrian kosong.")
print(f"Antrian setelah diproses: {list(antrian_layanan)}")
Untuk membuat program lebih fungsional, kita dapat membungkus logika di atas ke dalam serangkaian fungsi atau bahkan kelas sederhana. Berikut adalah contoh implementasi menggunakan fungsi dengan loop utama untuk simulasi:
from collections import deque
def tampilkan_menu():
print("\n--- Sistem Antrian Python ---")
print("1. Panggil Antrian Baru (Enqueue)")
print("2. Layani Pelanggan (Dequeue)")
print("3. Lihat Status Antrian")
print("4. Keluar")
def main_antrian():
antrian = deque()
nomor_pelanggan = 100 # Mulai nomor antrian dari 100
while True:
tampilkan_menu()
pilihan = input("Pilih menu (1/2/3/4): ")
if pilihan == '1':
nomor_pelanggan += 1
id_baru = f"No-{nomor_pelanggan}"
antrian.append(id_baru)
print(f"-> Berhasil menambahkan {id_baru} ke antrian.")
elif pilihan == '2':
if antrian:
dilayani = antrian.popleft()
print(f"-> Pelayanan selesai untuk: {dilayani}")
else:
print("-> Antrian saat ini kosong. Tidak ada yang dilayani.")
elif pilihan == '3':
if antrian:
print(f"-> Total antrian menunggu: {len(antrian)}")
print(f"-> Antrian depan: {antrian[0]}")
else:
print("-> Antrian saat ini kosong.")
elif pilihan == '4':
print("Terima kasih telah menggunakan sistem antrian Python.")
break
else:
print("Pilihan tidak valid. Silakan coba lagi.")
# main_antrian() # Uncomment baris ini untuk menjalankan simulasi
Program antrian ini adalah fondasi yang kuat. Dalam aplikasi yang lebih besar, Anda mungkin ingin:
heapq (heap queue algorithm) untuk sistem antrian prioritas (seperti layanan darurat).
Dengan menguasai penggunaan deque, Anda telah membangun dasar yang sangat efisien untuk menangani manajemen urutan di berbagai proyek Python Anda.