Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

QUEUE (antrian).

Presentasi serupa


Presentasi berjudul: "QUEUE (antrian)."— 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 Inisialisasi queue : jumlah=0, depan =0, belakang=0 depan
2. Insert ‘A’ jumlah=1, depan =0, belakang=1 B 3. Insert ‘B’ jumlah=2, depan =0, belakang=2 C 4. Insert ‘C’ jumlah=3, depan =0, belakang=3

8 Contoh 5. remove jumlah=2, depan =1, belakang=3 depan belakang
7. Insert ‘D’ jumlah=2, depan =2, belakang=4 E 8. Insert ‘E’ jumlah=3, depan =2, belakang=5

9 Visualisasi Jumlah ? Depan ? Belakang ? D K P O T R W Y a b c d e f g

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;
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); remove(my_queue, x); remove (my_queue, x); remove(my_queue, x); }

24 Queue menggunakan array
depan belakang Q U E depan belakang depan belakang Q U E A Q U E depan belakang Lanjutkan sampai belakang = maxsize Apakah Queue full?

25 Queue menggunakan array
depan belakang A Q U E Isi queue di shift ke awal array Tidak Efisien !!!

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

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

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

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

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

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

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

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

34 1 2 3 4 5 MaxSize = 6 A B Head Tail Add to Q

35 1 2 3 4 5 MaxSize = 6 A B C Head Tail Add to Q Add data at tail

36 1 2 3 4 5 MaxSize = 6 A B C Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1)

37 1 2 3 4 5 MaxSize = 6 A B C Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize

38 1 2 3 4 5 MaxSize = 6 A B C Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (4 + 1) mod 6

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

40 1 2 3 4 5 MaxSize = 6 A B C Head Tail 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

41 1 2 3 4 5 MaxSize = 6 A B C Head Tail 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

42 1 2 3 4 5 MaxSize = 6 A B C Head Tail Add to Q

43 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail

44 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1)

45 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) tail = 5 + 1 tail = 6 !

46 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1)

47 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize

48 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6

49 1 2 3 4 5 MaxSize = 6 A B C D Head Tail Add to Q Add data at tail Increment tail tail = (tail + 1) mod MaxSize tail = (5 + 1) mod 6 tail = 6 mod 6

50 1 2 3 4 5 MaxSize = 6 A B C D Head Tail 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

51 1 2 3 4 5 MaxSize = 6 A B C D Tail Head 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

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 { int jumlah; int depan; int belakang; 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<q->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<q->belakang; i++) if(q->priority[ind]<q->priority[i+1]) ind=i+1; } *index=ind;

63 Fungsi Main void main() { queue *my_queue, q; char item, *x;
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); remove(my_queue, x); remove (my_queue, x); remove(my_queue, x); }


Download ppt "QUEUE (antrian)."

Presentasi serupa


Iklan oleh Google