Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

QUEUE (antrian). Materi Mempelajari tipe data queue dan bagaimana menggunakan fungsi insert, remove, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan.

Presentasi serupa


Presentasi berjudul: "QUEUE (antrian). Materi Mempelajari tipe data queue dan bagaimana menggunakan fungsi insert, remove, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan."— Transcript presentasi:

1 QUEUE (antrian)

2 Materi Mempelajari tipe data queue dan bagaimana menggunakan fungsi insert, remove, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan queue dengan array.

3 Konsep Queue adalah tipe data abstrak (ADT) yang bersifat FIFO (First In First Out); FIFO = data yang pertama kali masuk akan dikeluarkan yang pertama kali juga. Data baru akan dimasukkan lewat ujung belakang, sedangkan data lama dikeluarkan lewat ujung depan. Queue bisa diimplementasikan dengan menggunakan array atau linked list. Model queue ada yang single direction dan ada yang circular track

4 Aplikasi  Untuk mengatur proses dalam sebuah system sesuai dengan urutannya  proses dalam sistem computer, printer job spooler, winamp file play list  Simulasi dan modeling  Air port, traffic/ lalu lintas, client – server, bank  Predicting performance berdasar model dan simulasi  kasir swalayan, toko

5 Fungsi Dasar Inisialisasi queue menjadi empty queue. Menentukan apakah queue dalam keadaan Kosong, Is_Empty. Menentukan apakah queue dalam keadaan Penuh, Is_Full. Jika queue belum penuh, Insert data baru ke bagian ujung pangkal queue. Jika queue tidak kosong, Remove data dari bagian ujung depan queue.

6 Implementasi Queue dengan Array

7 Contoh 1.Inisialisasi queue : jumlah=0, depan =0, belakang=0 depan belakang A 2. Insert ‘A’ jumlah=1, depan =0, belakang=1 depan belakang BA 3. Insert ‘B’ jumlah=2, depan =0, belakang=2 depan belakang CBA 4. Insert ‘C’ jumlah=3, depan =0, belakang=3 depanbelakang

8 Contoh CB 5. remove jumlah=2, depan =1, belakang=3 depan belakang C 6. remove jumlah=1, depan =2, belakang=3 depan belakang DC 7. Insert ‘D’ jumlah=2, depan =2, belakang=4 depan belakang EDC 8. Insert ‘E’ jumlah=3, depan =2, belakang=5 depanbelakang

9 Visualisasi D K D K P D K P O K P O P O OO T O T R O T R W O T R W Y abcdefg hij Jumlah ? Depan ? Belakang ?

10 Algoritma Inisialisasi Inisialisasi digunakan untuk membuat queue dengan cara memberikan nilai awal dari setiap komponen queue. Inisialisasi set jumlah=0 set depan=0 set belakang=0

11 Algoritma Insert Bertujuan untuk memasukkan data ke queue. Data yang dimasukkan disimpan di posisi belakang queue Remove jika jumlah==ukuran maksimum queue cetak ERROR : queue sudah penuh else letakkan data ke queue posisi belakang increment belakang increment jumlah

12 Algoritma Remove Bertujuan untuk mengeluarkan data dari queue. Data yang dikeluarkan adalah data di posisi depan. Remove jika jumlah==0 cetak ERROR : queue sudah kosong else x = data queue pada indeks depan increment depan decrement jumlah

13 Algoritma Is_Empty Menyatakan apakah queue dalam keadaan kosong, dapat diketahui dari variabel jumlah. Is_Empty if jumlah=0 return TRUE else return FALSE

14 Algoritma Is_Full Menyatakan apakah queue dalam keadaan kosong, dapat diketahui dari variabel jumlah. Is_Full if jumlah == ukuran maksimum queue return TRUE else return FALSE

15 Deklarasi Struktur Data #define maxsize 100 // mendefinisikan maks ukuran data // dlm queue typedef struct { int jumlah; int depan; int belakang; char items [ maxsize ]; // array } queue; // nama tipe data baru yg dibuat adalah queue

16 Deklarasi Fungsi Queue void initialize (queue *q) void remove(queue *q, char *x ) void insert(queue *q, char x ) void show (queue *q) int Is_Empty(queue *q) int Is_Full(queue *q)

17 Fungsi Initialize void initialize ( queue *q ) { q -> jumlah = 0; // jumlah=0, queue dalam kondisi kosong q -> depan = 0; q -> belakang = 0; }

18 Fungsi Insert void insert (queue *q, char x ) { if ( q -> jumlah = = maxsize ) printf(“\nERROR: queue sudah penuh\”); else { // copy X ke array queue q -> data [ q -> belakang ] = x; q -> belakang = ( q -> belakang + 1 ); ++ ( q -> jumlah ); }

19 Fungsi Remove void remove ( queue *q, char *x ) { if ( q -> jumlah = = 0 ) printf(“\nERROR: queue sudah kosong\”); else { *x = q -> data [ q -> depan ]; q -> depan = ( q -> depan + 1 ); -- ( q -> jumlah ); }

20 Fungsi Is_Empty int Is_Empty ( queue *q ) { if( q -> jumlah == 0 ) // jumlah = 0  queue kosong return(1); else return(0); }

21 Fungsi Is_Full int penuh ( queue *q ) { if( q -> jumlah == maxsize ) // jumlah = maxsize  queue penuh return(1); else return(0); }

22 Fungsi Show void show (queue *q) { printf("\nISI QUEUE :\n"); for(int i=q->depan; i>=q->belakang; i++) printf("\t%c\n", q->data[i]); printf("\n"); }

23 Fungsi Main void main() { queue *my_queue, q; char item, *x; my_queue = &q; x = &item; initialize(my_queue); insert(my_queue, 'A'); insert(my_queue, 'R'); insert (my_queue, 'I'); insert(my_queue, 'F'); show(my_queue); remove(my_queue, x); show(my_queue); remove (my_queue, x); remove(my_queue, x); show(my_queue); }

24 Queue menggunakan array AQU depan belakang AQUE depan belakang QUE depan belakang Lanjutkan sampai belakang = maxsize Apakah Queue full? depan belakang QUEUE

25 Queue menggunakan array Isi queue di shift ke awal array Tidak Efisien !!! depan belakang AQUEUE

26 A circular array MaxSize - 1 MaxSize - 2 MaxSize - 3

27 A queue using a circular array MaxSize - 1 belakang depan 0

28 A queue using a circular array Tambah ‘T’ pada belakang belakang = belakang + 1 T MaxSize - 1 belakang depan 0

29 A queue using a circular array Tambah ‘H’ at belakang belakang = belakang +1 T H MaxSize - 1 belakang depan 0

30 A queue using a circular array Tambahkan ‘I’ at belakang belakang = belakang +1 T H MaxSize - 1 belakang depan 0 I

31 A queue using a circular array Lanjutkan sampai belakang MaxSize-1 MaxSize - 1 belakang depan 0 E U E U Q A MaxSize = 16

32 A queue using a circular array Tambah Z ke belakang belakang = belakang + 1 = 16 = MaxSize MaxSize - 1 belakang =? depan 0 E U E U Q A Z MaxSize = 16

33 A queue using a circular array Tambahkan ‘Z’ pada belakang belakang = (belakang +1) mod MaxSize MaxSize - 1 belakang depan 0 E U E U Q A Z MaxSize = 16

34 Add to Q Head AB Tail MaxSize = 6

35 Add to Q Add data at tail C Head AB Tail MaxSize = 6

36 Add to Q Add data at tail Increment tail tail = (tail + 1) C Head AB Tail MaxSize = 6

37 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize C Head AB Tail MaxSize = 6

38 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (4 + 1) mod 6 C Head AB Tail MaxSize = 6

39 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (4 + 1) mod 6 tail = 5 mod 6 C Head AB Tail MaxSize = 6

40 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (4 + 1) mod 6 tail = 5 mod 6 How many times does 6 go into 5? 5/6 = 0 rem 5 C Head AB Tail MaxSize = 6

41 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (4 + 1) mod 6 tail = 5 mod 6 How many times tail = 5 does 6 go into 5? 5/6 = 0 rem 5 C Head AB Tail MaxSize = 6

42 Add to Q C Head AB Tail MaxSize = 6

43 Add to Q Add data at tail CD Head AB Tail MaxSize = 6

44 Add to Q Add data at tail Increment tail tail = (tail + 1) CD Head AB Tail MaxSize = 6

45 Add to Q Add data at tail Increment tail tail = (tail + 1) tail = tail = 6 ! CD Head AB Tail MaxSize = 6

46 Add to Q Add data at tail Increment tail tail = (tail + 1) CD Head AB Tail MaxSize = 6

47 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize CD Head AB Tail MaxSize = 6

48 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6 CD Head AB Tail MaxSize = 6

49 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6 tail = 6 mod 6 CD Head AB Tail MaxSize = 6

50 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6 tail = 6 mod 6 How many times does 6 go into 6? 6/6 = 1 rem 0 CD Head AB Tail MaxSize = 6

51 Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6 tail = 6 mod 6 How many times tail = 0 does 6 go into 5? 5/6 = 0 rem 5 CD Head AB Tail MaxSize = 6

52 PRIORITY QUEUE

53 Priority Queue Pengembangan dari konsep queue, dimana setiap data dalam queue memiliki prioritas. Dikatakan “priority queue” karena dapat memberikan data tidak berdasarkan waktu insert, tetapi berdasarkan prioritas tertinggi. Aplikasi :  agenda kegiatan  kamus

54 Deklarasi Struktur Data #define maxsize 100 // mendefinisikan maks ukuran data // dlm queue typedef struct { intjumlah; intdepan; intbelakang; char data[maxsize]; int priority[maxsize]; }queue; // nama tipe data baru yg dibuat adalah queue

55 Deklarasi Fungsi Queue void initialize ( queue *q ); int kosong ( queue *q ); int penuh ( queue *q ); void insert ( queue *q, char X, int Y); void remove ( queue *q, char *X ); void show (queue *q); void CariMaxPriority(queue *q, int *index);

56 Fungsi Initialize void initialize ( queue *q ) { q -> jumlah = 0; // jumlah=0, queue dalam kondisi kosong q -> depan = 0; q -> belakang = 0; }

57 Fungsi Insert void insert ( queue *q,char X, int Y ) { if ( q -> jumlah == maxsize ) printf("\nERROR: queue sudah penuh"); else { // copy X ke array queue q -> data [ q -> belakang ] = X; // copy Y ke array queue q -> priority [ q -> belakang ] = Y; q -> belakang = ( q -> belakang + 1 ); ++ ( q ->jumlah ); }

58 Fungsi Remove void remove ( queue *q, char *X ) { if ( q -> jumlah = = 0 ) printf(“\nERROR: queue sudah kosong\”); else { *X = q -> data [ q -> depan ]; q -> depan = ( q -> depan + 1 ); -- ( q -> jumlah ); }

59 Fungsi Is_Empty int Is_Empty ( queue *q ) { if( q -> jumlah == 0 ) // jumlah = 0  queue kosong return(1); else return(0); }

60 Fungsi Is_Full int penuh ( queue *q ) { if( q -> jumlah == maxsize ) // jumlah = maxsize  queue penuh return(1); else return(0); }

61 Fungsi Show void show (queue *q) { printf("\nISI QUEUE :\n"); for(int i=q->depan; i belakang; i++) printf("%c\t%i\n", q->data[i], q->priority[i]); printf("\n"); }

62 Fungsi CariMaxPriority void CariMaxPriority(queue *q, int *index) { int i, ind; ind=q->depan; for (i=q->depan; i belakang; i++) { if(q->priority[ind] priority[i+1]) ind=i+1; } *index=ind; }

63 Fungsi Main void main() { queue *my_queue, q; char item, *x; my_queue = &q; x = &item; initialize(my_queue); insert(my_queue, 'A', 1); insert(my_queue, 'R', 18); insert (my_queue, 'I', 9); insert(my_queue, 'F', 6); show(my_queue); remove(my_queue, x); show(my_queue); remove (my_queue, x); remove(my_queue, x); show(my_queue); }


Download ppt "QUEUE (antrian). Materi Mempelajari tipe data queue dan bagaimana menggunakan fungsi insert, remove, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan."

Presentasi serupa


Iklan oleh Google