• 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.

[email protected]

(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

tersebut akan menempati ruang yang kosong dan data tersebut menempati posisi sebagai data. terakhir

Array atau sering disebut juga sebagai larik adalah sebuah struktur data yang menyimpan sekumpulan elemen dengan tipe yang sama dan disimpan dalam memori computer

Queue (antrian) adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan

- aset – otherset Mengembalikan himpunan baru dengan semua item dari set pertama yang tidak ada di set kedua. &lt;= aset &lt;= otherset Menanyakan apakah semua elemen

menggeser elemen [l1..4] ke kanan bila L[1..4] lebih besar dari L[4] Misalkan posisi elemen yang tepat adalah K sisipkan pada L[4] pada K. Langkah N-1 L[N] harus dicari tempatnya

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

Untuk menyisipkan sebuah elemen baru ke dalam sebuah linked list pada posisi tertentu kita harus menemukan terlebih dahulu alamat memori dari elemen yang akan disisipi..

Definisi array diatas berarti kita mendeklarasikan sebuah variabel dengan tipe array yang mempunyai nama variabel nilai, yang memiliki elemen sejumlah 10 buah