Struktur Data – Queue dan Implementasinya

Mahir Koding – Queue adalah bentuk lain dari konsep implementasi linked list. Berbeda dengan Stack, yang menerapkan konsep LIFO (Last In First Out), Queue justru mempunyai konsep yang berbeda yakni FIFO (First In First Out). Setiap data yang pertama kali masuk, dialah yang akan keluar duluan. Contoh paling simple dalam kehidupan sehari hari adalah antrian pengunjung bank. Biasanya saat masuk, kita akan diberi nomor antrian terlebih dahulu sebelum dipanggil oleh teller. Kita akan menunggu sampai urutan kita barulah kita dapat bertransaksi di teller.

Dalam implementasi Queue ini, kita akan menggunakan Push Head dan Pop Tail.

http://techwelkin.com/wp-content/uploads/2016/04/fifo-queue-techwelkin.png

Berikut adalah contoh source codenya :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.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("No Data");
	}
	printf("\n\n");
};

void pushHead(int value){
	current = (struct antrian *)malloc(sizeof 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("No Data");
	}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("cls");
			print();
			printf("1. Queue\n");
			printf("2. DeQueue\n");
			printf("3. Exit\n");
			printf("Choose : "); 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);
}

Source code secara lengkap bisa dicek ke github saya, di link ini.

Jika ada pertanyaan yang kurang jelas silahkan berkomentar di bawah. Atau, jika ingin request tutorial juga dapat ke halaman ini. Dukung terus Mahir Koding agar dapat selalu mengupdate artikel dengan share dan like artikel ini. Terima Kasih.