Blog information

  • Category: Kuliah

  • Posted By: AglaBridgeMedia

  • Post date: 18 Nov 2020

  • Keywords: struktur data, queue, struktur data queue, program queue bahasa c

  • Views: 4001

Contoh Program Queue Menggunakan Bahasa C - Studi Kasus Antrian Apotek

Setelah sebelumnya kita membahas tentang Stack dan contoh penerapannya, pada artikel ini kita akan membahas tentang Queue. Sebelumnya, apa itu Queue? Queue (red: kiu), adalah salah satu bentuk dari Linked List yang mengaplikasikan konsep FIFO (First In First Out). Berbeda dengan Stack yang menerapkan kaidah LIFO (Last In First Out). Konsep FIFO adalah proses di mana data yang masuk pertama kali, juga akan keluar pertama kali. Sesuai dengan artinya, Queue berarti antrian, maka konsep antrian diterapkan di sini. Contoh yang paling banyak kita lihat adalah ketika kita sedang antri di Bank. Orang pertama akan langsung berada di posisi paling depan, orang selanjutnya akan berada di belakangnya. Jika orang pertama sudah selesai transaksi, maka orang pertama akan keluar dan orang kedua akan maju menjadi paling depan, begitu seterusnya.

Secara umum operasi Queue ada 2, yaitu Enqueue dan Dequeue. Untuk kasus antrian di Bank, Enqueue dipakai untuk memasukkan orang/data melalui posisi paling belakang, dan Dequeue dipakai untuk mengeluarkan orang/data ketika sudah selesai transaksi melalui posisi paling depan. Untuk menentukan posisi ini bebas apakah dari depan ke belakang atau dari belakang ke depan. Hal pokoknya adalah untuk memasukkan dan mengeluarkan data selalu menggunakan jalan yang tetap dan berbeda. Jika memasukkan lewat depan, maka data akan masuk selalu melalui depan, dan data akan keluar selalu melalui belakang.

Adapun operasi lain seperti print (untuk menampilkan data queue), isEmpty (untuk mengecek apakah data kosong), isFull (untuk mengecek apakah data sudah penuh), hampir sama dengan yang ada di Stack dan Linked List. Pada bahasan ini fokus pada Enqueue dan Dequeue. Pada contoh kali ini, fungsi Enqueue akan menggunakan fungsi pushHead, yang mirip dengan Linked List. Dan fungsi Dequeue akan menggunakan fungsi popTail, yang mirip dengan Linked List. Perhatikan potongan kode program berikut.

void pushHead(int value){
	current = (struct antrian*)malloc(sizeof (struct antrian)); //alokasi memory untuk data baru
	current->value=value; //assign data ke dalam struct
	current->next = current->prev = NULL; //set nilai next dan prev dengan NULL
	if(head==NULL){ //jika head = null, maka head bernilai sama dengan tail sama dengan current
		head=tail=current; //hal ini berarti queue masih kosong
	}else{ //jika tidak kosong, maka
		head->prev=current; //set nilai prev dengan current
		current->next=head; //set nilai next dengan head yang baru
		head=current; //set nilai head sebagai current/nilai sekarang
	}
}

Fungsi di atas untuk memasukkan data baru ke dalam sebuah antrian/queue. 

void popTail(){
	if(tail==NULL){ //cek dulu apakah tail = null, jika null tampilkan info data masih kosong
		printf("Data Kosong");
	}else if(tail==head){ //jika tail sama dengan head, maka
		current=tail; //nilai current = tail
		head=tail=NULL; //nilai head = tail = null, set head dan tail sekaligus dengan null
		free(current); //hapus memory current
	}else{ //jika tidak memenuhi 2 kondisi sebelumnya, maka
		current=tail; //nilai current set dengan nilai tail
		tail=tail->prev; //nilai tail set dengan nilai sebelum tail
		tail->next=NULL; //hapus nilai tail
		free(current); //hapus memory current
	}
}

Fungsi di atas dipakai untuk mengeluarkan/menghapus data dari antrian/queue. Untuk kode program lengkapnya bisa dilihat berikut ini.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct antrian{
	int value;
	struct antrian *next, *prev;
}*head, *tail, *current;

void print(){
	if(head!=NULL){
		current=head;
		while(current!=NULL){
			printf("| %d ", current->value);
			current=current->next;
		}
	}else{
		printf("Data Kosong");
	}
	printf("\n\n");
};

void pushHead(int value){
	current = (struct antrian*)malloc(sizeof (struct antrian));
	current->value=value;
	current->next = current->prev = NULL;

	if(head==NULL){
		head=tail=current;
	}else{
		head->prev=current;
		current->next=head;
		head=current;
	}
}

void popTail(){
	if(tail==NULL){
		printf("Data Kosong");
	}else if(tail==head){
		current=tail;
		head=tail=NULL;
		free(current);
	}else{
		current=tail;
		tail=tail->prev;
		tail->next=NULL;
		free(current);
	}
}

void main(){
	int menu;
	int antrianke=1;
	print();
	do{
		do{
			system("clear");
			print();
			printf("1. Queue\n");
			printf("2. DeQueue\n");
			printf("3. Keluar\n");
			printf("Pilih Menu di Atas : "); scanf("%d", &menu); fflush(stdin);
		}while(menu<1 || menu>3);
		switch(menu){
			case 1 :
				pushHead(antrianke);
				antrianke++;
				break;
			case 2 :
				popTail();
				break;
		}
	}while(menu!=3);
}

Ketika kode program di atas dijalankan akan menghasilkan output sebagai berikut.


Pertama-tama akan muncul informasi bahwa queue masih kosong. Dan ketika saya memasukkan pilihan 1 dan menekan enter sebanyak 7 kali, maka akan muncul nilainya 7 buah data sebagai berikut.

Dan ketika saya memilih menu 2 dan saya tekan enter, maka tail (data yang pertama dimasukkan, dalam hal ini nilai 1) akan hilang, seperti gambar berikut.

Ketika saya pilih menu 2 sekali lagi, maka nilai 2 (tail dari data queue ini) akan hilang, seperti gambar berikut.


Nah itu tadi bahasan terkait dengan queue dan penerapan programnya menggunakan bahasa C. Silakan dicoba, dimodifikasi, dan tetap semangat. Happy Coding ^_^






blog comments powered by Disqus