Queue (FIFO) — Struktur Data

Queue adalah struktur data yang mengikuti prinsip FIFO — First In, First Out. Elemen pertama masuk adalah yang pertama keluar. Analogi: Antrian di kasir — yang

Queue adalah struktur data yang mengikuti prinsip FIFOFirst In, First Out. Elemen pertama masuk adalah yang pertama keluar.

Analogi: Antrian di kasir — yang datang duluan dilayani duluan.

Operasi utama:

Operasi Kompleksitas Penjelasan
enqueue(item) O(1) Masuk ke belakang antrian
dequeue() O(1) Keluar dari depan antrian
front() O(1) Lihat depan tanpa menghapus
isEmpty() O(1) Cek apakah kosong
class Queue {
  constructor() {
    this.items = {};
    this.head = 0;
    this.tail = 0;
  }

  enqueue(item) {
    this.items[this.tail] = item;
    this.tail++;
  }

  dequeue() {
    if (this.isEmpty()) return undefined;
    const item = this.items[this.head];
    delete this.items[this.head];
    this.head++;
    return item;
  }

  front() {
    return this.items[this.head];
  }

  isEmpty() {
    return this.tail - this.head === 0;
  }
}

const q = new Queue();
q.enqueue("A"); // [A]
q.enqueue("B"); // [A, B]
q.enqueue("C"); // [A, B, C]
q.dequeue();    // "A" → [B, C]
q.front();      // "B"

Catatan: Implementasi di atas menggunakan object dan pointer (head/tail) agar dequeue tetap O(1). Jika pakai array.shift(), hasilnya O(n) karena semua elemen harus digeser.

Kegunaan nyata:

💡 Kenapa harus pakai pointer (head/tail), bukan arr.shift()? arr.shift() itu O(n) — semua elemen harus geser index ke kiri. Loop 1jt dequeue dengan shift = 1jt × geser n elemen = O(n²). Pakai pointer = O(1) per operasi. Beda performa jauh saat data besar.

🎭 Analogi sehari-hari (selain antrian kasir):

⚠️ Jebakan umum:

🎯 Kapan pakai Queue?

🧪 Tebakan cepat: Enqueue 1,2,3 lalu dequeue dequeue — outputnya? 1, 2. Sama dengan urutan masuk.

TL;DR: Queue = FIFO. Push belakang, pop depan. Pakai pointer (bukan shift) supaya O(1). Cocok untuk antrian, BFS, dan task processing fair-order.

Yang akan kamu pelajari