Queue

By Emanuel Lienardi - 6:57 AM

Queue dll


Antrean atau queue adalah  operasi penyisipan (insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi belakang (REAR), dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi lainnya, yang disebut sisi depan (FRONT), dari list. pada  antrian prinsip yang digunakan adalah FIFO (Fist In Fist Out) yang aartinya Elemen yang pertama masuk ke antrian akan keluar pertama kalinya .  Sebagai contoh , antrean (X1, X2, X3,...,XN). Kita notasikan bagian depan dari antrean X sebagai FRONT(X) dan bagian belakang sebagai REAR(X). Jadi untuk antrean X = [X1, X2, X3 …, XN] :

FRONT(X) = X1 dan REAR(X) = XN

Kita menggunakan notasi NOEL(X) untuk menyatakan jumlah elemen di dalam antrean X. NOEL(X) mempunyai harga integer. Untuk antrean X = [X1,X2,X3…, XN], maka NOEL(X) = N.
           


Prinsip antreannya ada dua, yaitu FIFO (First In First Out), dan satunya lagi FCFS (First Come First Serve).

Berikut contoh pendeklarasiannya



Operasi pada queue :
1.      Create () adalah untuk menciptakan atau menganalisis queue dengan cara membuat head dan tail = -1



2.      IsEmpty () adalah untuk memeriksa apakah antrean sudah penuh atau belum, dengan cara memeriksa nilai Tail. Jika tail = -1, maka empty. Kita tidak perlu memeriksa head, karena head adalah tanda untuk kepala antrian (elemen pertama dalam antrian).



3.      IsFull () adalah untuk mengecek apakah antrean sudah penuh atau belum dengan cara mengecek nilai Tail. Jika tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh.



4.      Enqueue () digunakan untuk menambahkan elemen ke dalam antrean penambahan akan dilakukan pada elemen paling belakang. Penambahan elemen selalu menggerakkan variabel Tail dengan cara increment counter Tail terlebih dahulu.



5.      Dequeue berfungsi untuk menghapus elemen di depan atau pertama (head) dari antrean dengan menggeser semua elemen antrean ke depan dan mengurangi Tail dengan 1 penggeseran dilakukan dengan menggunakan looping.



6.      Clear () digunakan untuk penghapusan pada elemen – elemen antrean dengan membuat tail dan head = -1. Penghapusan elemen – elemen antrean sebenarnya tidak menghapus array nya, namun hanya men-set indeks pengaksesannya ke nilai -1 sehingga elemen – elemen antrean tidak lagi terbaca.



7.      Tampil () digunakan untuk menampilkan nilai dari elemen antrean menggunakan looping dari head sampai tail.



Contoh Programnya :
1.    #include <iostream>
2.    #include <conio.h>
3.    #ifdef __cplusplus__
4.    #include <cstdlib>
5.    #else
6.    #include <stdlib.h>
7.    #endif
8.     
9.    #define max 6    //Mendeklarasikan max data pada queue
10.   
11.  int value[max];
12.  int awal = -1, akhir = -1, i;
13.   
14.  //membuat fungsi IsEmpty
15.  bool IsEmpty(){
16.          if (awal == -1 && akhir == -1)
17.                  return true;
18.          else
19.                  return false;
20.  }
21.   
22.  //membuat fungsi IsFull
23.  bool IsFull(){
24.          if (akhir == max - 1)
25.                  return true;
26.          else
27.                  return false;
28.  }
29.   
30.  //membuat enqueue, untuk memasukkan data kedalam queue / antrian
31.  void Enqueue(){
32.          if (IsFull())
33.          {
34.                  cout << "Queue sudah terlalu banyak, silahkan sabar menunggu ";
35.          }
36.          else {
37.                  if (IsEmpty()){
38.                          awal = akhir = 0;
39.                          cout << "inputkan value : "; cin >> value[akhir];
40.                  }
41.                  else {
42.                          akhir++;
43.                          cout << "inputkan value : "; cin >> value[akhir];
44.                  }
45.          }
46.  }
47.   
48.  //Membuat fungsi Dequeue
49.  void Dequeue(){
50.          if (IsEmpty()){
51.                  cout << "Queue tidak ada data! ";
52.                  getch();
53.          }
54.          else {
55.                  cout << "Value yang diambil : " << value[awal];
56.                  for (= awal; i <= akhir - 1; i++)
57.                          value[i] = value[+ 1];
58.                  akhir--;
59.                  if (akhir == -1)
60.                          awal = -1;
61.                  getch();
62.          }
63.  }
64.   
65.  //Membuat Prosedur clear
66.  void Clear(){
67.          awal = akhir = -1;
68.          cout << "Queue sudah dikosongkan ! "; getch();
69.  }
70.   
71.  //Membuat Prosedur View
72.  void View(){
73.          if (IsEmpty()){
74.                  cout << "Queue tidak ada data ! ";
75.                  getch();
76.          }
77.          else {
78.                  for (= awal; i <= akhir; i++)
79.                  cout << "Value pada indeks ke- " << i << " = " << value[i] << endl;
80.                  getch();
81.          }
82.  }
83.   
84.  int main(){
85.          int jawab;
86.          do{
87.                  if (system("CLS")) system("clear");
88.                  cout << "=========================================" << endl;
89.                  cout << "            PROGRAM QUEUE                                              " << endl;
90.                  cout << "=========================================" << endl;
91.                  cout << "1. Enqueue " << endl;
92.                  cout << "2. Dequeue " << endl;
93.                  cout << "3. Clear " << endl;
94.                  cout << "4. View " << endl;
95.                  cout << "5. keluar " << endl;
96.                  cout << "inputkan pilihan kamu : ";
97.                  cin >> jawab;
98.                  switch (jawab){
99.                  case 1:
100.                         Enqueue(); break;
101.                 case 2:
102.                         Dequeue(); break;
103.                 case 3:
104.                         Clear(); break;
105.                 case 4:
106.                         View(); break;
107.                 }
108.         } while (jawab != 5);
109. }

Tampilan program akhir :




Collision
Collision adalah apabila nilai atau key-nya sama dan bertubrukan, cara menanggulanginya dapat dengan menggunakan Linear Probing atau Chaining.
Linear Probing adalah apabila ada key hash yang sama maka akan ditempatkan di tempat index kosong yang terdekat.
Chaining adalah apabila ada key hash yang sama maka akan ditempatkan  disampingnya sehingga membentuk rantai atau Linked list.


  • Share:

You Might Also Like

0 comments