Queue: Pengenalan, Implementasi, Operasi Dasar, dan Aplikasi

RICZKY PRATAMA
10 min readMay 24, 2023

Selamat datang pada artikel yang akan membahas tentang Queue, salah satu struktur data yang penting dalam pemrograman. Queue adalah konsep yang mendasar dan sering digunakan dalam berbagai aplikasi komputer. Dalam dunia nyata, kita sering menjumpai antrian di berbagai tempat seperti toko, bank, atau layanan pelanggan. Konsep antrian ini diadaptasi ke dalam pemrograman untuk mengatur dan mengelola data dengan prinsip First-In-First-Out (FIFO). Dalam artikel ini, kita akan menjelajahi konsep dasar Queue, implementasinya menggunakan array dan linked list, serta operasi dasar yang terkait. Mari kita mempelajari secara mendalam tentang Queue dan memahami mengapa ini adalah struktur data yang penting untuk dipahami oleh para pengembang perangkat lunak.

Illustrasi Queue dalam Teknologi Informasi Komputer
Photo by Radek Grzybowski on Unsplash

Artikel ini akan membahas berbagai aspek Queue, mulai dari pengenalan hingga aplikasinya dalam berbagai bidang. Anda akan mempelajari tentang operasi dasar seperti enqueue (menambahkan elemen ke dalam Queue), dequeue (menghapus elemen dari Queue), dan mengakses elemen pertama atau terakhir dalam Queue. Selain itu, kami akan membahas jenis-jenis Queue seperti Queue linear, Queue circular, dan Priority Queue yang memungkinkan kita untuk mengatur data dengan prioritas tertentu. Kami juga akan membahas aplikasi praktis dari Queue dalam sistem operasi, komunikasi data, dan pemodelan sistem. Dengan pemahaman yang mendalam tentang Queue, Anda akan memiliki pengetahuan yang kuat dalam pengembangan perangkat lunak dan mampu mengoptimalkan kinerja program Anda. Mari kita mulai dengan menjelajahi dunia yang menarik dari Queue dan manfaatnya dalam pemrograman modern.

Pengenalan Queue

a. Definisi dan Konsep Dasar Queue

Queue adalah struktur data yang mengikuti prinsip First-In-First-Out (FIFO), yang berarti elemen pertama yang masuk ke dalam antrian akan menjadi elemen pertama yang keluar dari antrian. Queue dapat diibaratkan sebagai antrian di mana elemen-elemen baru ditambahkan di satu ujung antrian (rear) dan elemen-elemen yang sudah ada dikeluarkan di ujung lainnya (front). Queue mirip dengan antrian nyata yang sering kita temui dalam kehidupan sehari-hari.

b. Karakteristik Queue (FIFO — First-In-First-Out)

Karakteristik utama dari Queue adalah prinsip FIFO (First-In-First-Out). Elemen pertama yang dimasukkan ke dalam Queue akan menjadi elemen pertama yang diambil atau dihapus dari Queue. Elemen-elemen baru ditambahkan di ujung belakang Queue dan elemen-elemen yang sudah ada dikeluarkan dari ujung depan Queue. Dengan prinsip FIFO ini, Queue dapat membantu mengatur urutan data dan mempertahankan prioritas saat memproses elemen-elemen yang ada di dalamnya.

c. Contoh Penggunaan Queue dalam Kehidupan Sehari-hari

Contoh penggunaan Queue dalam kehidupan sehari-hari dapat ditemukan di berbagai situasi. Misalnya, saat kita mengantri di sebuah toko, bank, atau tempat layanan pelanggan. Orang yang pertama kali mengantri akan dilayani terlebih dahulu dan orang yang datang kemudian akan menunggu giliran mereka sesuai dengan urutan kedatangan. Selain itu, Queue juga digunakan dalam sistem pemrosesan data, seperti antrian pesan di aplikasi komunikasi atau penjadwalan tugas pada sistem operasi.

Dengan konsep dan karakteristiknya yang sederhana, Queue menjadi struktur data yang penting dalam pemrograman dan digunakan dalam berbagai aplikasi untuk mengelola urutan data dan mempertahankan prinsip FIFO.

Representasi Queue

a. Implementasi Queue menggunakan array

Implementasi Queue menggunakan array melibatkan penggunaan array sebagai wadah untuk menyimpan elemen-elemen dalam antrian. Dalam implementasi ini, kita menggunakan dua penunjuk, yaitu penunjuk front dan penunjuk rear, yang menunjukkan posisi elemen pertama dan terakhir dalam Queue. Ketika elemen baru ditambahkan, penunjuk rear akan maju ke posisi berikutnya, dan saat elemen dihapus, penunjuk front akan maju ke posisi berikutnya. Array memiliki keuntungan akses elemen yang cepat berdasarkan indeksnya, tetapi memiliki keterbatasan ukuran tetap yang tidak fleksibel.

b. Implementasi Queue menggunakan linked list

Implementasi Queue menggunakan linked list melibatkan penggunaan simpul-simpul yang saling terhubung untuk menyimpan elemen-elemen dalam antrian. Setiap simpul memiliki dua bagian, yaitu data (elemen dalam Queue) dan pointer yang menunjuk ke simpul berikutnya. Dalam implementasi ini, kita menggunakan dua penunjuk, yaitu penunjuk front dan penunjuk rear, yang menunjukkan simpul pertama dan terakhir dalam Queue. Ketika elemen baru ditambahkan, simpul baru akan ditautkan ke simpul terakhir dan penunjuk rear akan diperbarui. Ketika elemen dihapus, simpul pertama akan dilepaskan dan penunjuk front akan diperbarui. Linked list memungkinkan penambahan dan penghapusan elemen dengan fleksibilitas, tetapi memiliki overhead memori untuk menyimpan pointer tambahan.

c. Perbandingan antara implementasi menggunakan array dan linked list

Implementasi menggunakan array memiliki akses elemen yang cepat berdasarkan indeksnya dan tidak memerlukan alokasi memori dinamis, tetapi memiliki batasan ukuran tetap yang tidak fleksibel. Sedangkan, implementasi menggunakan linked list memungkinkan ukuran antrian yang fleksibel, namun memiliki overhead memori untuk menyimpan pointer tambahan dan mengakses elemen membutuhkan iterasi melalui simpul-simpul. Pilihan antara array dan linked list untuk implementasi Queue bergantung pada kebutuhan aplikasi dan trade-off antara kecepatan akses dan fleksibilitas ukuran.

Operasi Dasar pada Queue

a. Enqueue (Menambahkan elemen ke dalam Queue)

Operasi Enqueue digunakan untuk menambahkan elemen baru ke dalam Queue. Elemen baru ini akan ditempatkan di posisi belakang Queue (rear). Saat melakukan Enqueue, penunjuk rear akan maju ke posisi berikutnya untuk menunjuk elemen baru tersebut.

b. Dequeue (Menghapus elemen dari Queue)

Operasi Dequeue digunakan untuk menghapus elemen pertama dari Queue. Elemen yang dihapus ini merupakan elemen yang berada di posisi depan Queue (front). Saat melakukan Dequeue, penunjuk front akan maju ke posisi berikutnya untuk menunjuk elemen setelahnya, dan elemen yang dihapus tidak lagi termasuk dalam Queue.

c. Front (Mendapatkan elemen pertama dalam Queue)

Operasi Front digunakan untuk mendapatkan elemen pertama dalam Queue tanpa menghapusnya. Dengan menggunakan operasi ini, kita dapat melihat elemen yang akan dikeluarkan selanjutnya dari Queue. Biasanya, operasi ini hanya digunakan untuk melihat elemen pertama tanpa mengubah struktur Queue.

d. Rear (Mendapatkan elemen terakhir dalam Queue)

Operasi Rear digunakan untuk mendapatkan elemen terakhir dalam Queue tanpa menghapusnya. Dengan menggunakan operasi ini, kita dapat melihat elemen terakhir yang telah ditambahkan ke dalam Queue. Biasanya, operasi ini hanya digunakan untuk melihat elemen terakhir tanpa mengubah struktur Queue.

e. IsEmpty (Memeriksa apakah Queue kosong)

Operasi IsEmpty digunakan untuk memeriksa apakah Queue kosong atau tidak. Jika Queue tidak memiliki elemen, berarti Queue kosong, dan operasi ini akan mengembalikan nilai benar (true). Jika Queue memiliki elemen, berarti Queue tidak kosong, dan operasi ini akan mengembalikan nilai salah (false).

f. Size (Mendapatkan jumlah elemen dalam Queue)

Operasi Size digunakan untuk mendapatkan jumlah elemen yang ada dalam Queue. Dengan menggunakan operasi ini, kita dapat mengetahui berapa banyak elemen yang saat ini ada dalam Queue tanpa mengubah struktur atau menghapus elemen.

Operasi-operasi dasar tersebut penting dalam mengelola Queue, karena mereka memungkinkan kita untuk menambahkan, menghapus, dan mengakses elemen-elemen dalam urutan yang sesuai dengan prinsip FIFO (First-In-First-Out).

Jenis-jenis Queue

a. Queue Linear (Implementasi Queue dengan batasan linier)

Queue Linear adalah implementasi Queue yang menggunakan struktur data linear seperti array atau linked list. Pada Queue Linear, elemen-elemen ditambahkan di ujung belakang (rear) dan dihapus dari ujung depan (front). Namun, Queue Linear memiliki batasan ukuran tetap yang dapat mengakibatkan situasi ketika Queue penuh dan tidak dapat menampung elemen baru meskipun masih ada ruang kosong pada struktur data yang digunakan.

b. Queue Circular (Implementasi Queue dengan memanfaatkan siklus)

Queue Circular adalah implementasi Queue yang menggunakan struktur data linear seperti array dengan pemanfaatan siklus. Pada Queue Circular, elemen-elemen tetap ditambahkan di ujung belakang (rear) dan dihapus dari ujung depan (front), namun jika Queue mencapai batas maksimum, elemen-elemen baru akan ditempatkan di awal antrian. Dengan memanfaatkan siklus, Queue Circular dapat memanfaatkan kembali ruang yang tersedia dan menghindari pemborosan memori.

c. Priority Queue (Implementasi Queue dengan prioritas pada setiap elemen)

Priority Queue adalah implementasi Queue di mana setiap elemen memiliki prioritas tertentu. Elemen-elemen dalam Priority Queue diurutkan berdasarkan prioritas mereka, sehingga elemen dengan prioritas yang lebih tinggi akan diberikan akses lebih awal daripada elemen dengan prioritas yang lebih rendah. Prioritas dapat ditentukan menggunakan aturan yang telah ditetapkan sebelumnya atau dengan membandingkan nilai-nilai elemen. Implementasi Priority Queue dapat menggunakan struktur data seperti heap untuk memastikan elemen-elemen tetap terurut secara tepat.

Jenis-jenis Queue ini memungkinkan kita untuk memilih implementasi yang sesuai dengan kebutuhan aplikasi. Queue Linear cocok digunakan ketika ukuran Queue tetap dan memori tidak menjadi kendala. Queue Circular bermanfaat ketika kita ingin memanfaatkan kembali ruang yang tersedia pada struktur data. Sedangkan, Priority Queue berguna ketika elemen-elemen dalam Queue memiliki prioritas yang berbeda dan kita ingin mengakses elemen dengan prioritas tertinggi terlebih dahulu.

Antrian dengan Prioritas

a. Definisi dan Konsep Dasar Antrian dengan Prioritas

Antrian dengan prioritas adalah struktur data di mana setiap elemen memiliki prioritas tertentu. Elemen-elemen dalam antrian diurutkan berdasarkan prioritas mereka, sehingga elemen dengan prioritas yang lebih tinggi akan diberikan akses lebih awal daripada elemen dengan prioritas yang lebih rendah. Konsep dasar antrian dengan prioritas adalah mengutamakan elemen-elemen yang memiliki nilai atau tingkat penting yang lebih tinggi untuk diproses lebih awal, memastikan bahwa tugas-tugas yang paling penting atau mendesak dapat ditangani dengan segera.

b. Implementasi Antrian dengan Prioritas menggunakan Heap

Implementasi umum untuk antrian dengan prioritas adalah menggunakan struktur data heap. Heap adalah sebuah struktur pohon biner yang memiliki sifat khusus di mana setiap simpul memiliki nilai yang lebih kecil (atau lebih besar) daripada simpul anaknya. Dalam implementasi antrian dengan prioritas menggunakan heap, elemen-elemen dimasukkan ke dalam heap sesuai dengan prioritas mereka. Elemen dengan prioritas yang lebih tinggi ditempatkan pada posisi yang lebih tinggi dalam heap, sehingga saat penghapusan elemen dilakukan, elemen dengan prioritas tertinggi akan dihapus terlebih dahulu. Heap memungkinkan pengaksesan dan penghapusan elemen dengan prioritas tertinggi secara efisien, menjadikannya struktur data yang cocok untuk implementasi antrian dengan prioritas.

c. Perbandingan antara Antrian Biasa dan Antrian dengan Prioritas

Perbedaan utama antara antrian biasa dan antrian dengan prioritas terletak pada pengaturan urutan elemen. Dalam antrian biasa, elemen-elemen diurutkan berdasarkan urutan kedatangan mereka (FIFO), di mana elemen pertama yang dimasukkan akan menjadi elemen pertama yang dihapus. Sedangkan dalam antrian dengan prioritas, elemen-elemen diurutkan berdasarkan prioritas, di mana elemen dengan prioritas yang lebih tinggi akan diproses lebih awal. Antrian dengan prioritas memberikan prioritas yang lebih tinggi kepada elemen yang memiliki nilai penting atau tingkat urgensi yang lebih tinggi, sementara antrian biasa tidak mempertimbangkan faktor prioritas.

Dengan antrian biasa, setiap elemen diberikan perlakuan yang sama dan diproses berdasarkan urutan kedatangan. Namun, dengan antrian dengan prioritas, elemen-elemen memiliki prioritas yang berbeda, sehingga memungkinkan penanganan tugas-tugas yang lebih penting terlebih dahulu. Antrian dengan prioritas sangat berguna dalam situasi di mana penanganan elemen berdasarkan tingkat kepentingan atau prioritas menjadi kritis, seperti dalam penjadwalan tugas pada sistem operasi, algoritma pemecahan masalah, atau pengelolaan antrian pesan dalam aplikasi komunikasi.

Aplikasi Queue

a. Penjadwalan Tugas pada Sistem Operasi menggunakan Queue

Queue memiliki aplikasi penting dalam penjadwalan tugas pada sistem operasi. Dalam sistem operasi, tugas-tugas yang harus dieksekusi oleh CPU diatur dalam antrian dengan menggunakan struktur data Queue. Algoritma penjadwalan seperti First-Come, First-Served (FCFS), Shortest Job Next (SJN), dan Round Robin menggunakan prinsip FIFO (First-In-First-Out) untuk mengatur urutan eksekusi tugas dalam antrian. Queue memungkinkan sistem operasi untuk mengelola dan mengoordinasikan eksekusi tugas secara efisien, memastikan penggunaan sumber daya yang adil dan optimal.

b. Antrian Pesan dalam Komunikasi Data

Queue juga digunakan dalam komunikasi data untuk mengelola antrian pesan yang harus dikirim atau diterima. Ketika pesan-pesan dikirim melalui jaringan komunikasi, mereka dapat ditempatkan dalam antrian menggunakan struktur data Queue sebelum dikirim ke tujuan yang sesuai. Antrian pesan memungkinkan pesan-pesan untuk diproses secara berurutan sesuai dengan urutan kedatangan mereka, memastikan pengiriman yang andal dan tidak ada pesan yang hilang. Implementasi antrian pesan dalam komunikasi data melibatkan penggunaan protokol komunikasi yang memanfaatkan prinsip FIFO atau antrian dengan prioritas untuk mengatur pengiriman pesan.

c. Simulasi Antrian dalam Pemodelan Sistem

Queue digunakan dalam simulasi untuk memodelkan sistem yang melibatkan proses antrian. Dalam simulasi, sistem yang memiliki antrian, seperti sistem pelayanan pelanggan atau sistem antrean transportasi, dapat direpresentasikan dengan menggunakan struktur data Queue. Simulasi antrian memungkinkan kita untuk menganalisis kinerja sistem dan memprediksi berbagai parameter seperti waktu tunggu, kecepatan layanan, dan tingkat ketepatan. Dalam pemodelan sistem, antrian digunakan untuk merepresentasikan interaksi antara entitas-entitas yang membutuhkan pelayanan atau akses terbatas pada sumber daya tertentu.

Melalui aplikasi Queue ini, kita dapat melihat bahwa Queue merupakan struktur data yang penting dalam berbagai konteks. Penggunaan Queue memungkinkan pengaturan urutan, manajemen antrian, dan pemodelan sistem yang efisien, sehingga memperbaiki kinerja dan kehandalan dalam berbagai aplikasi, mulai dari sistem operasi, komunikasi data, hingga pemodelan sistem kompleks.

Implementasi Queue dalam Bahasa Pemrograman

a. Contoh Implementasi Queue dalam Python:

Dalam Python, implementasi Queue dapat dilakukan menggunakan modul bawaan queue. Modul ini menyediakan struktur data Queue yang dapat langsung digunakan. Contoh implementasi Queue dalam Python sebagai berikut:

from queue import Queue

# Membuat objek Queue
q = Queue()

# Menambahkan elemen ke dalam Queue
q.put(10)
q.put(20)
q.put(30)

# Menghapus elemen dari Queue
q.get()

# Mendapatkan elemen pertama dalam Queue
front = q.queue[0]

# Mendapatkan jumlah elemen dalam Queue
size = q.qsize()

# Memeriksa apakah Queue kosong
is_empty = q.empty()

b. Contoh Implementasi Queue dalam Java

Dalam Java, Queue dapat diimplementasikan menggunakan kelas LinkedList atau kelas ArrayDeque yang ada dalam paket java.util. Contoh implementasi Queue dalam Java sebagai berikut:

import java.util.Queue;
import java.util.LinkedList;

public class QueueExample {
public static void main(String[] args) {
// Membuat objek Queue
Queue<Integer> queue = new LinkedList<>();

// Menambahkan elemen ke dalam Queue
queue.add(10);
queue.add(20);
queue.add(30);

// Menghapus elemen dari Queue
queue.remove();

// Mendapatkan elemen pertama dalam Queue
int front = queue.peek();

// Mendapatkan jumlah elemen dalam Queue
int size = queue.size();

// Memeriksa apakah Queue kosong
boolean isEmpty = queue.isEmpty();
}
}

c. Contoh Implementasi Queue dalam C++

Dalam C++, implementasi Queue dapat dilakukan menggunakan STL (Standard Template Library) yang menyediakan kelas queue dalam header file <queue>. Contoh implementasi Queue dalam C++ sebagai berikut:

#include <iostream>
#include <queue>

int main() {
// Membuat objek Queue
std::queue<int> q;

// Menambahkan elemen ke dalam Queue
q.push(10);
q.push(20);
q.push(30);

// Menghapus elemen dari Queue
q.pop();

// Mendapatkan elemen pertama dalam Queue
int front = q.front();

// Mendapatkan elemen terakhir dalam Queue
int rear = q.back();

// Mendapatkan jumlah elemen dalam Queue
int size = q.size();

// Memeriksa apakah Queue kosong
bool isEmpty = q.empty();

return 0;
}

Dalam contoh-contoh di atas, implementasi Queue dapat dilakukan dengan menggunakan struktur data yang sudah disediakan oleh bahasa pemrograman. Dengan memanfaatkan operasi-operasi dasar seperti menambahkan elemen, menghapus elemen, mendapatkan elemen pertama, dan lainnya, kita dapat dengan mudah mengelola Queue dalam bahasa pemrograman yang digunakan.

Secara keseluruhan, Queue adalah struktur data yang sangat penting dalam pemrograman dan pengembangan aplikasi. Dengan konsep FIFO (First-In-First-Out), Queue memungkinkan kita untuk mengatur dan mengelola data dengan urutan yang tepat, memastikan pengolahan yang teratur dan adil. Dalam kehidupan sehari-hari, Queue dapat ditemukan dalam berbagai aplikasi dan skenario, mulai dari penjadwalan tugas pada sistem operasi, pengelolaan antrian pesan, hingga pemodelan sistem yang kompleks.

Penerapan dan pemahaman yang baik tentang Queue memungkinkan kita untuk mengoptimalkan kinerja sistem, mengatasi masalah antrian dengan efisien, serta memprioritaskan tugas dan layanan berdasarkan tingkat kepentingan atau prioritas. Dalam bahasa pemrograman, terdapat berbagai cara untuk mengimplementasikan Queue, seperti menggunakan array, linked list, atau menggunakan struktur data khusus seperti heap untuk antrian dengan prioritas. Dalam setiap implementasi, penting untuk memahami operasi dasar pada Queue, seperti enqueue, dequeue, dan pengecekan status seperti isEmpty dan size.

Dengan pemahaman yang baik tentang Queue dan penerapannya dalam bahasa pemrograman, kita dapat membangun aplikasi yang lebih efisien, dapat diandalkan, dan dapat mengelola antrian tugas atau pesan dengan baik. Menggunakan Queue secara efektif akan membantu kita mengatasi tantangan dalam pengolahan data berurutan dan memaksimalkan penggunaan sumber daya yang tersedia. Oleh karena itu, pemahaman tentang Queue menjadi penting bagi para pengembang perangkat lunak dan ahli komputer dalam membangun sistem yang efisien dan terstruktur.

--

--

RICZKY PRATAMA

I am a technology enthusiast. Follow Instagram @silver_rabbitku to know me deeper. Apart from writing, I have also occasionally held online technology seminars.