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);
}
}
Sumber : faishalmovic13.wordpress.com