• Tidak ada hasil yang ditemukan

MODUL PRAKTIKUM STRUKTUR DATA QUEUE ANTR

N/A
N/A
Protected

Academic year: 2018

Membagikan "MODUL PRAKTIKUM STRUKTUR DATA QUEUE ANTR"

Copied!
9
0
0

Teks penuh

(1)

MODUL PRAKTIKUM

STRUKTUR DATA

QUEUE (ANTRIAN)

Oleh :

Muhammad Riza Hilmi, ST.

rizahilmi@gmail.com

(2)

BAB III

QUEUE (ANTRIAN)

1.

PENGERTIAN

a. Queue

Queue (antrian) adalah salah satu list linier dari struktur data yang beroperasi dengan cara

First In First Out (

FIFO

) yaitu elemen pertama yang masuk merupakan elemen yang

pertama keluar. Untuk penyisipan (

INSERT

) hanya dapat dilakukan pada satu sisi yaitu sisi

belakang (

REAR

), sedangkan untuk penghapusan (

REMOVE

) pada sisi depan (

FRONT

) dari

list.

hapus elemen

1 2 ……..

ke – n

sisip elemen

front

rear

Akan terjadi ketidakefisienan bila penambahan elemen sudah pada posisi index N (Rear =

N) maka tidak dapat lagi dilakukan penambahan elemen, sedangkan dilokasi memori yang

lain (nilai di bawah N) masih terdapat memori array yang kosong. Untuk mengatasi hal

tersebut maka kita bayangkan bahwa memori dari queue tersebut berbentuk melingkar

dimana kedua ujungnya saling bertemu atau disebut juga dengan

Circular Queue.

b. Circular Queue

Front

Q(1) Q(2)

...

Q(f)

Q(f+1)

...

Q(r)

...

Q(m)

Q(m)

Q(1)

Q(2)

. . .

Q(f)

Q(f+1)

. . .

(3)

2.

DEKLARASI

Bentuk deklarasi queue terdiri dari masing-masing fungsi :

a. AWAL(Inisialisasi)

Dituliskan dalam bentuk fungsi :

b. INSERT(Sisip, Masuk, Simpan, Tulis)

R maju dulu satu langkah (R=R+1), Kemudian isi ditempat yang

ditunjuk oleh R, atau Q[R] = X.

c. DELETE(Hapus, Keluar, Ambil atau Dilayani, Baca)

Ambil dulu yang ditunjuk oleh F, simpan di X Kemudian F maju

satu langkah (F = F+1).

d. RESET(Kembali ke keadaan awal)

Kembali ke keadaan dimana F = 0, dan R = 0.

3.

OPERASI-OPERASI

Adapun operasi pada antrian diantaranya adalah :

a. Create

membuat antrian baru atau menginisialisasi/mendefinisikan antrian yang

kosong.

b. IsEmpty

mengecek apakah antrian dalam kedaan kosong atau tidak.

c. IsFull

mengecek apakah antrian sudah penuh atau belum.

d. Enqueue

m

enambah elemen baru pada antrian yang berisi info baru (IB) pada posisi

paling belakang (REAR).

Syarat awal : Queue tidak penuh (jika penuh akan terjadi overflow).

Syarat akhir : Queue bertambah satu elemen.

F = 0; R = 0;

void AWAL () {

F = 0; R = 0; }

void INSERT() {

R = R + 1; Q[R] = X; }

void DELETE() {

X= Q[F]; F = F + 1;

}

void RESET() {

F = 0; R = 0;

(4)

e. Dequeue

menghapus elemen dari antrian yang berada pada posisi paling depan

(FRONT) dan infonya disimpan dalam info dequeue (ID)

Syarat awal : Queue tidak kosong (jika kosong akan terjadi underflow).

Syarat akhir : Queue berkurang satu elemen.

f.

Clear

menghapus elemen-elemen Antrian.

g. Tampil

menampilkan nilai-nilai elemen Antrian.

4.

ILUSTRASI

a. QUEUE

CREATE (Q)

Front

: 0

Rear

: 0

1

2

3

4

5

6

7

...

N

INSERT (INSERT(INSERT(INSERT(A),B),C),D)

Front

: 1

Rear

: 4

1

2

3

4

5

6

7

...

N

REMOVE(Q)

Front

: 2

Rear

: 4

1

2

3

4

5

6

7

...

N

INSERT(INSERT(E),F)

Front

: 2

Rear

: 6

1

2

3

4

5

6

7

...

N

REMOVE(Q)

Front

: 3

Rear

: 6

1

2

3

4

5

6

7

...

N

Dapat dilihat bahwa setiap terjadi penghapusan elemen pada queue nilai (index) dari Front

bertambah satu (1) ; dapat ditulis FRONT := FRONT+1. Begitu pula bila terjadi penambahan

elemen pada queue nilai (index) Rear bertambah satu (1) ; dapat ditulis REAR := REAR + 1.

A

B

C

D

...

...

B

C

D

...

B

C

D

E

F

...

(5)

b. CIRCULAR QUEUE

Suatu queue akan menempati lokasi sebanyak 5 array memori, dengan urutan operasi

sebagai berikut :

1. Create(Q)

F = 0

R = 0

1

2

3

4

5

2. Insert A, B, C

F = 1

R = 3

3. Remove (Q)

F = 2

R = 3

4. Insert D dan E

F = 2

R = 5

5. Remove(Remove(Q))

F = 4

R = 5

6. Insert F

F = 4

R = 1

7. Remove(Q)

F = 5

R = 1

8. Insert G, H, K

F = 5

R = 4

9. Insert L

F = 5

(

OVERFLOW

)

R = 4

10. Remove(Remove(Q))

F = 2

R = 4

11. Insert L

F = 2

R = 5

12. Remove(Remove

F = 0

(Remove(Remove(Q))))

R = 0

13. Remove(Q)

F = 0

(

UNDERFLOW

)

R = 0

A B C

B C

B C D E

D E

F D E

F E

F G H K E

F G H K E

G H K

G H K L

(6)

5.

LATIHAN

Latihan 1. Program Implemantasi Queue Dalam Array (QueueArray.cpp)

#include <iostream> #include <stdio.h> #include <conio.h> #include <malloc.h> #define max 50 #define True 1 #define False 0

struct typequeue{int belakang; int elemen[max]; };

struct typequeue queue;

void buatqueue(); void cetakqueue(); void enqueue(int IB); void dequeue();

int queuekosong(); int queuepenuh();

int main() { buatqueue(); enqueue(12); enqueue(78); enqueue(5); enqueue(34); cetakqueue(); cout << "\n\n"; dequeue(); cetakqueue(); cout << "\n\n"; dequeue(); cetakqueue(); cout << "\n\n"; enqueue(89); cetakqueue(); getch(); }

void buatqueue() { queue.belakang=0; }

int queuekosong()

{ if(queue.belakang==0) return(True);

else

return(False); }

int queuepenuh()

{ if(queue.belakang==max) return(True);

else

(7)

void enqueue(int IB) { if(queuepenuh())

cout << "queue overflow\n"; else

{ queue.belakang++;

queue.elemen[queue.belakang]=IB; } }

void dequeue() { int ID, i;

if(queuekosong())

cout << "queue underflow\n"; else

{ ID=queue.elemen[1];

for (i=1; i<queue.belakang; i++) queue.elemen[i]=queue.elemen[i+1]; queue.belakang--; }

}

void cetakqueue() { int i=1;

while(i<=queue.belakang)

{ cout << " " << queue.elemen[i]; i++; }

}

Latihan 2. Program Implementasi Queue Melingkar (CircularQueue.cpp)

#include <iostream> #include <stdio.h> #include <conio.h> #include <malloc.h> #define max 5

#define True 1 #define False 0

typedef float typeinfo;

struct typequeue{int depan, belakang; typeinfo elemen[max]; };

struct typequeue queue;

void buatqueue(); void cetakqueue(); void enqueue(float IB); void dequeue();

int queuekosong(); int queuepenuh();

(8)

dequeue(); cetakqueue(); cout << "\n\n"; enqueue(89); enqueue(11); cetakqueue(); getch(); }

void buatqueue() { queue.depan=1; queue.belakang=1; }

int queuekosong()

{ if(queue.depan==queue.belakang) return(True);

else

return(False); }

int queuepenuh() { int next_belakang; if(queue.belakang==max) next_belakang=1; else

next_belakang=queue.belakang+1; if (queue.depan==next_belakang) return(True);

else

return(False); }

void enqueue(float IB) { if(queuepenuh())

cout << "queue overflow\n"; else

{ if(queue.belakang==max) queue.belakang=1;

else

queue.belakang++;

queue.elemen[queue.belakang]=IB; } }

void dequeue() { typeinfo ID; if(queuekosong())

cout << "queue underflow\n"; else

{ ID=queue.elemen[queue.depan+1]; if(queue.depan==max)

queue.depan=1; else

queue.depan++; } }

(9)

cout << "Queue kosong !"; else

{ if(queue.depan<queue.belakang) { i=queue.depan+1;

while(i<=queue.belakang)

{ cout << " " << queue.elemen[i]; i++; }

} else

{ for(i=queue.depan+1;i<=max;i++) cout << " " << queue.elemen[i]; for(i=1;i<=queue.belakang;i++) cout << " " << queue.elemen[i]; }

} }

6.

TUGAS

Modifikasi program di atas sehingga terdapat beberapa pilihan menu yaitu :

1. Mengisi antrian (dengan kondisi masih bisa diisi data/tidak full)

2. Menghapus antrian (dengan kondisi ada data/data tidak kosong)

3. Membaca antrian

Referensi

Dokumen terkait

ketentuan dalam Pasal 12 ayat (7) Peraturan Daerah Kabupaten Hulu Sungai Tengah Nomor 9 Tahun 2015 tentang Tata Cara Pencalonan, Pemilihan, Pengangkatan dan Pelantikan

Dalam ilmu matematika khususnya untuk kelas 1 dan 2 sekolah dasar diajarkan pengenalan bilangan asli hingga 99 dengan menggunakan benda sekitarnya,

Cakrawala Teknik Mandiri Indonesia mempunyai karyawan tidak terlalu banyak bahkan kurang dari 50 karyawan akan tetapi pengelolaan sumber daya manusia harus optimal

Dalam rancangan tampilan ini terdapat 2 button yang dapat dipilih oleh pengguna, yaitu button1 merupakan tombol informasi yang berfungsi untuk masuk ke dalam halaman

Penelitian ini bertujuan untuk (1) Mendeskripsikan saluran pemasaran dan fungsi-fungsi pemasaran beras organik di desa Sumber Suko Kecamatan Belitang Kabupaten OKU Timur,

Implikasi dari penelitian ini adalah kualitas tidur memiliki pengaruh terhadap kebahagiaan pada mahasiswa, sehingga mahasiswa dianjurkan untuk memperhatikan kualitas

Setelah elemen terbesar ditempatkan pada posisi elemen terbawah, maka elemen-elemen tabel yang belum terurut adalah dari elemen ke-1 sampai elemen ke( N-1). Diperinci dengan

Seperti yang telah kita pelajari pada praktikum 3, untuk menyimpan data yang umum, kita dapat memanfaatkan class Object yang dibuat dalam format generic.. Berikut