Struktur Organisasi Data 2 Bahan Ajar Perkuliahan Sistem informasi (S1) Manajemen Informatika (D3)
Queue Definisi: Suatu bentuk khusus dari linier list dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi saja dimana pengisian dan pengambilan datanya dirancang berdasarkan algorithma FIFO (First in First out) atau FCFS (First Come First Serve). Operasi pengisian hanya boleh dilakukan pada sisi belakang (Rear) / ekor (Tail); dan Operasi penghapusan hanya diperbolehkan pada sisi depan (Front) / kepala (Head). Queue adalah sebuah struktur data yang aksesnya bersifat sekuensial (berurutan).
Queue Analogi: Queue umumnya dianalogikan seperti sebuah antrian pada loket pembelian tiket. Front / Head Rear / Tail Masuk Keluar
Queue Struktur / Bagian Queue: FRONT / HEAD REAR / TAIL NOEL Merupakan index elemen paling depan dari queue. FRONT / HEAD dapat bertipe data integer dengan nilai -1 jika queue kosong atau bernilai ≥ 0 jika queue memiliki isi. Jika queue Q = [Q0, Q1, Q2, Q3, Q4, …, QT-1], maka FRONT / HEAD = 0 REAR / TAIL Merupakan index elemen paling belakang dari queue. REAR / TAIL dapat bertipe data integer dengan nilai -1 jika queue kosong atau bernilai ≥ 0 jika queue memiliki isi. Jika queue Q = [Q0, Q1, Q2, Q3, Q4, …, QT-1], maka REAR / TAIL = T-1 NOEL Merupakan jumlah elemen yang tersimpan di dalam queue. NOEL merupakan integer dengan nilai ≥ 0. Jika NOEL = 0, maka queue tersebut dianggap kosong. Jika queue Q = [Q0, Q1, Q2, Q3, Q4, …, QT-1], maka NOEL = T. Jika terdapat NOEL elemen di dalam queue, maka elemen ke NOEL-1 merupakan REAR atau Q [NOEL - 1] = REAR.
Queue Deklarasi Awal 0 1 2 3 4 5 6 7 NOEL = 0 MAX = 8 #define MAX 8 Typedef struct { int data [MAX]; int front; int rear; } Queue; Queue q; Deklarasi Awal FRONT / HEAD = -1 REAR / TAIL = -1 0 1 2 3 4 5 6 7 NOEL = 0 MAX = 8
Queue Fungsi pada Stack: Create () isEmpty () IsFull () Insert () / Enqueue () Remove () / Dequeue () Clear () Digunakan untuk menghapus seluruh elemen dari queue.
Queue Fungsi Create () Digunakan untuk membuat queue baru yang masih kosong. Keadaan setelah proses Create () NOEL = 0 FRONT = -1 REAR = -1 Front / Head Void Create() { q.front = q.rear = -1; } Rear / Tail
Queue Fungsi IsEmpty () Digunakan untuk menguji apakah queue kosong atau tidak kosong. Proses ketika fungsi dijalankan: Menguji kosong, yakni melihat apakah antrian tidak memiliki data atau tidak memiliki data. Front / Head bool IsEmpty() { if (rear == -1) return true; else return false; } REAR = -1 (terpenuhi) Rear / Tail
REAR = MAX - 1 (terpenuhi) Queue Fungsi IsFull () Digunakan untuk menguji apakah queue penuh atau tidak penuh. Proses ketika fungsi dijalankan: Menguji kosong, yakni melihat apakah REAR sudah mencapai MAX - 1 atau belum mencapai. (melihat apakah seluruh elemen array sudah terisi atau belum terisi). Front / Head bool IsFull () { If (q.rear == MAX - 1) return true; else return false; } MAX REAR = MAX - 1 (terpenuhi) Rear / Tail
Queue Fungsi Insert () / Enqueue () Digunakan untuk melakukan pengisian data ke dalam queue pada REAR / TAIL. Penambahan elemen selalu menggerakan variabel REAR dengan cara menambahkan REAR terlebih dahulu. Proses ketika fungsi dijalankan: Menguji overflow, yakni melihat apakah antrian sudah penuh atau belum dengan Fungsi IsFull (). Proses hanya dilanjutkan jika IsFull () bukan bernilai TRUE. Mengubah FRONT menjadi 0 jika keadaan IsEmpty () bernilai TRUE, atau tidak berubah jika IsEmpty () bernilai FALSE. Menambah NOEL dengan 1. Menambah REAR dengan 1. Mengisi Elemen REAR dengan nilai pada parameter Data.
Queue Fungsi Insert () / Enqueue () Front / Head MAX Rear / Tail IsFull () = false IsEmpty () = true Front / Head Fungsi Insert () / Enqueue () MAX Void Enqueue (int data) { If (!IsFull ()) { If (IsEmpty ()) { q.front = q.rear = 0; q.data [q.rear] = data; } else { q.rear ++; return false; Masuk Rear / Tail IsFull () = false IsEmpty () = false Front / Head MAX Rear / Tail Masuk
Queue Fungsi Remove () / Dequeue () Digunakan untuk mengeluarkan data yang tersimpan pada FRONT / HEAD pada queue. Pengurangan elemen selalu menggerakan variabel REAR dengan cara mengurangi REAR dengan 1. Proses ketika fungsi dijalankan: Menguji apakah queue kosong atau tidak kosong dengan IsEmpty (). Proses hanya dilanjutkan jika IsEmpty() bukan bernilai TRUE. Menggeser isi seluruh elemen setelah FRONT ke arah FRONT. Sehingga elemen setelah FRONT menjadi FRONT dan seterusnya, sampai dengan elemen terakhir (REAR). Mengubah FRONT menjadi -1 jika REAR bernilai 0. Mengurangi NOEL dengan 1. Mengurangi REAR dengan 1.
Queue Fungsi Remove () / Dequeue () Front / Head MAX Rear / Tail IsFull () = false IsEmpty () = false Front / Head Fungsi Remove () / Dequeue () MAX Void Dequeue () { if (!IsEmpty ()) { int I; Int e = q.data [q.front]; for (i = q.front; I <= q.rear = 1; i++) { q.data [i] = q.data[i+1]; } q.rear --; return e; Return false; Keluar Rear / Tail IsFull () = false IsEmpty () = false Front / Head MAX Keluar Rear / Tail