Tag Archive: queue


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.

Pengertian shift pada kasus ini yaitu, menjadikan sebuah bilangan desimal inputan menjadi bilangan biner, lalu setelah menjadi biner, akan dilakukan dequeue lalu di enqueue sebanyak shift.

contoh :

bilangan desimal : 25

di shift : 3

maka hasilnya adalah : 7

Kenapa kok bisa 7 ??????

nah, caranya seperti ini……!!!

dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001

setelah dikonversikan, maka program di shift sebanyak 3x

11001 —> shift pertama, angka 1 yang terakhir di dequeue lalu di enqueue sehingga menjadi 11100

11100 —> shift kedua, angka 0 yang terakhir di dequeue lalu di enqueue sehingga menjadi 01110

01110 —> shift ketiga, angka 0 yang terakhir di dequeue lalu di enqueue sehingga menjadi 00111

setelah selesai menjadi bilangan biner 00111 akan dikonversikan menjadi desimal

1   —>  20 x 1    = 1

1   —>  21 x 1    = 2

1   —>  22 x 1    = 4

0   —>  23 x 0  = 0

0   —>  24 x 0  = 0

———————–  +

                         7

Untuk Skrip Dan Juga Contoh Programnya bisa di download DISINI