-->
g2QFCKwavghUp2yzjKrIFwEeG13RASCerFTCMH35

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

Related Posts

Post a Comment