Artikel kali ini akan membahas sebuah program yang mengimplementasikan struktur data queue bersama-sama dengan linked list.
Program ini menggunakan antrian sembako sebagai perumpamaan dan data tiap antrian akan terdiri dari data orang yang mengantri.
Pendahuluan
Program ini mengimplementasikan struktur data antrian atau queue, namun pembuatan antrian tidak menggunakan array, tapi menggunakkan linked list.
Dalam pembuatan simpul untuk linked list, kita membutuhkan struktur data struct karena satu simpul akan menyimpan banyak data termasuk dengan pointer penunjuk data di sebelahnya.
Baca juga : Tentang Linked List – Antek Teknologi
Program ini menyediakan 3 buah menu, mulai dari menambah antrian baru, memanggil antrian terdepan dan menampilkan keseluruhan antrian yang ada.
Mungkin itu saja untuk pendahuluan singkat kali ini, mari lanjut ke sintaks dari programnya.
Sintaks Program
Untuk dapat melihat konsep tersebut dalam bentuk program komputer, kunjungi saja alamat ini, hanpalla/Queue-Linked-list (github.com).
Implementasi konsep di dalam program tersebut diwakili dengan ilustrasi antrian sembako.
Jika sudah mengunjungi dan melihat sintaksnya, kalian bisa lanjut membaca penjelasannya kalau masih belum paham.
Penjelasan Program
Karena program dibuat menggunakan bahasa pemrograman C, maka perlu melakukan pemanggilan file header dan juga inisiasi variabel atau fungsi jika perlu.
Kemudian ada tipe data struct, tipe data struct adalah sebuah tipe data yang bisa menyimpan banyak tipe data lain di dalamnya.
Nantinya akan ada dua buah variabel tipe data struct di dalam program ini.
Satunya bertugas untuk menjadi simpul atau antrian pada linked list, dan yang satunya bertugas untuk membungkus identitas orang yang mengantri.
Jadi akan ada sebuah tipe data struct yang diam di dalam tipe data struct juga.
Di dalam program ini juga terdapat dua variabel pointer yang bertugas sebagai navigasi dari badan linked list tersebut.
Kedua pointer ini adalah head dan tail.
Dimana head sebagai penanda bahwa data tersebut adalah antrian terdepan, dan variabel tail sebagai penanda bahwa data tersebut adalah antrian paling belakang.
Artikel kali ini hanya akan menjelaskan tentang konsep yang digunakan di dalam program tersebut.
Untuk sintaks dan hal-hal lain yang serupa bisa kalian pelajari sendiri dari berbagai sumber.
Untuk pointer next dari head atau tail yang bernilai NULL, itu berarti tidak ada lagi antrian setelah antrian tersebut.
Namun jika keduanya bernilai NULL, maka tidak ada antrian sama sekali.
Karena jika variabel pointer bernilai NULL, maka pointer itu sama saja tidak menunjuk kemana-mana.
Di sini akan dijelaskan tiga konsep utama, yaitu konsep sebuah antrian ditambahkan, antrian terdepan dipanggil dan menampilkan data antrian yang sedang mengantri.
Karena program ini hanya mengganti array dengan linked list dalam pembuatan sebuah struktur data queue, maka konsep dari penambahan antrian, pemanggilan dan mencetak keseluruhan antrian masih sama saja.
Menambah Antrian Baru
Setelah program menerima input dari pengguna, maka program akan memasuki sebuah percabangan.
Percabangan tersebut berisi dua pilihan yaitu:
a. Belum ada antrian
Jika belum ada antrian sama sekali, maka data yang baru masuk tadi akan menjadi simpul head sekaligus tail.
b. Sudah ada antrian
Namun jika minimal satu saja sudah ada antrian, maka pointer next dari tail saat ini akan mengarah ke data yang baru masuk.
Setelah itu data yang baru masuk akan menjadi tail yang terbaru. Kemudian pointer next dari tail teranyar akan memiliki nilai NULL lagi.
Di dalam penambahan data, hanya pointer tail yang akan berpindah tempat.
Memanggil Antrian Terdepan
Sama seperti algoritma antrian atau queue pada umumnya, jika ada pemanggilan antrian atau penghapusan antrian, maka antrian yang berada paling depan yang akan menjadi korban.
Karena hubungannya erat dengan antrian terdepan, maka pointer yang menjadi patokan dalam pemanggilan adalah pointer head.
Sebelum masuk ke pemanggilan, akan ada pemeriksaan apakah ada data pada pointer head.
Jika bernilai NULL, maka tidak ada antrian sama sekali. Namun jika ada satu saja, maka proses pemanggilan akan dijalankan.
Jika antrian tadi tidak kosong, maka sebuah pointer bantuan akan digunakan untuk menunjuk simpul yang menjadi head saat ini, karena nantinya pointer head akan berpindah tempat.
Kemudian pointer next dari head akan menjadi pointer head yang terbaru, sederhananya pointer head tersebut berpindah ke antrian atau simpul berikutnya.
Setelah pointer head berpindah tempat, maka antrian yang sebelumnya sudah dipegang oleh sebuah pointer bantuan akan dihapus.
Singkatnya pointer head berpindah tempat ke antrian berikutnya, kemudian antrian yang sebelumnya menjadi head akan terhapus.
Menampilkan Data Antrian
Program ini menggunakan sebuah perulangan while untuk menampilkan semua antrian yang ada.
Hal ini karena komputer tidak akan mencatat jumlah dari antrian yang masuk, atau tidak akan tahu jumlah antrian secara pasti.
Sama dengan proses pemanggilan antrian sebelumnya, akan ada pemeriksaan apakah ada data pada pointer head. Jika pointer head bernilai NULL, maka tidak ada antrian sama sekali.
Namun jika ada satu saja, maka akan langsung masuk ke perulangan.
Jika ada antrian minimal satu saja, sebuah pointer bantuan akan berada pada posisi head.
Nantinya pointer bantuan ini akan terus bergerak sampai ke posisi paling akhir.
Yang berpindah tempat adalah pointer bantuan tersebut, bukan pointer head ataupun pointer tail.
Perulangan ini memiliki kondisi selesai di saat ditemukannya sebuah data antrian bernilai NULL, atau tidak ada lagi yang bisa dicetak.
Namun jika ada, maka data antrian akan dicetak dan setelah itu pointer bantuan ini akan terus berpindah ke data berikutnya.
Konsep perpindahan pointer bantuan ini sama seperti pointer head yang berpindah ke data berikutnya dalam proses pemanggilan antrian terdepan.
Setelah pointer bantuan ini memegang sebuah simpul, maka akan terjadi pemeriksaan terlebih dahulu, apakah simpul itu datanya bernilai NULL atau tidak.
Jika datanya tidak NULL, maka perulangan akan terus berlanjut.
Namun jika nilainya NULL, maka sesuai dengan penjelasan sebelumnya, perulangan akan langsung selesai.
Rangkuman
Sekian untuk artikel kali ini, jika ada kekurangan atau kesalahan, mungkin bisa beritahukan kepada kami.
Tadi adalah sebuah program sederhana yang mengimplementasikan struktur data antrian menggunakan konsep linked list.
Alasan penggunaan linked list sendiri karena linked list mengalokasikan data secara dinamis, berbeda dengan array.
Jadi di saat sebuah data terhapus, maka tidak perlu repot-repot untuk menghilangkan ruang yang sudah tidak dipakai lagi.
Selain itu, dengan linked list, tidak perlu repot-repot mengatur ukuran dari antrian atau berapa banyak data yang bisa diam di dalam antrian.
Hal ini karena setiap data yang baru datang akan memiliki tempatnya sendiri di memori, dan pointer dari setiap data yang akan menjadi penghubung.
Untuk dapat mempelajari konsep program dengan mudah, penjelasannya sudah terbagi menjadi 3 bagian.
Sekian untuk artikel dan juga program sederhana yang ada, semoga bermanfaat dan terima kasih.