Selamat siang semua,,

kali ini saya akan mencoba posting sebuah program QUEUE tak terbatas menggunakan double linked list.

Double Linked List yaitu sebuah linked list yang mempunyai satu atau lebih data dengan 2 penunjuk, yaitu penunjuk simpul sebelum dan penunjuk simpul sesudah.

Akan saya definisikan terlebih dahulu struktur sebuah double linked list (DNode) sebagai berikut :

typedef int itemtype;
typedef struct simpul dnode;
struct simpul
{
	itemtype data;
	dnode *prev;
	dnode *next;
};

Dan membuat sebuah rumusan QUEUE juga sebagai penunjuknya sebagai berikut :

typedef struct
{
	dnode *front;
	dnode *rear;
} queue;

Setiap membuat linked list diperlukan sebuah fungsi untuk meng alokasikan ke memori. fungsi tersebut bisa menggunakan seperti biasanya :

void alokasi_node(itemtype x)
{
	baru = (dnode *) malloc(sizeof(dnode));
	if(baru==NULL)
	{
		printf("Alokasi GAGAL\n");
		exit(1);
	}
	else
	{
		baru->data = x;
		baru->next = NULL;
		baru->prev = NULL;
	}
}

Dan jangan lupa untuk membuat sebuah variabel global yaitu :

dnode *baru;

Lalu buat beberapa fungsi untuk queue yaitu fungsi inisialisasi, kosong, enqueue, dequeue. contohnya sebagai berikut :

void inisialisasi(queue *q)
{
	q->front = NULL;
	q->rear = NULL;
}

int kosong(queue *q)
{
	return (q->front==NULL && q->rear==NULL);
}

void enqueue(queue *q, itemtype x)
{
	if(kosong(q))
	{
		q->front = baru;
		q->rear = baru;
		printf("Anda Telah Menginput Data Pertama\n");
	}
	else
	{
		baru->prev = q->rear;
		q->rear->next = baru;
		q->rear = baru;
	}
}

itemtype dequeue(queue *q)
{
	dnode *temp;
	if(kosong(q))
	{
		printf("Data Kosong\n");
		return -1000;
	}
	else
	{
		temp = q->front;
		if(q->front==q->rear)
		{
			q->front=NULL;
			q->rear=NULL;
		}
		else
		{
			q->front = q->front->next;
			q->front->prev = NULL;
		}
		return temp->data;
		free(temp);
		temp = NULL;
	}
}

Dan untuk menampilkan data queue yang ada gunakan fungsi tampil seperti dibawah ini :

void tampil(queue *q)
{
	queue temp;
	temp = *q;
	printf("\nData Simpul ==> ");
	while(temp.front!=NULL)
	{
		printf("%d ", temp.front->data);
		temp.front = temp.front->next;
	}
	printf("\n\n");
}

Dan untuk main() bisa direpresentasikan seperti dibawah ini :

void main()
{
	char lagi='y';
	queue simpul;
	itemtype data;
	int pil;
	inisialisasi(&simpul);
	while(lagi=='y' || lagi=='Y')
	{
		system("CLS");
		tampil(&simpul);
		printf("Menu :\n");
		printf("1. Enqueue\n");
		printf("2. Dequeue\n");
		printf("Masukkan pilihan : ");
		scanf("%d", &pil);
		switch(pil)
		{
		case 1 :
			printf("Masukkan data : ");
			scanf("%d", &data);
			alokasi_node(data);
			enqueue(&simpul, data);
			break;
		case 2 :
			dequeue(&simpul);
			break;
		default :
			printf("Pilihan salah\n");
			break;
		}
		fflush(stdin);
		printf("Lagi (y/n) ? ");
		scanf("%c", &lagi);
	}
}

Untuk mendownload contoh program disini

Jika ada yang kurang mengerti dengan program seperti diatas, bisa ditanyakan langsung. tinggalkan komentar anda, kirim pesan email, dan apa saja boleh yang penting bisa bertanya 😀 😀 hehe

Semoga bermanfaat.