QUEUE (antrian).

Slides:



Advertisements
Presentasi serupa
Antrian (Queue) Desain dan Analisis Algoritma
Advertisements

Queue (Antrian).
Pertemuan 5 Struktur Data
Pertemuan 5 STACK atau TUMPUKAN IMAM SIBRO MALISI NIM :
Queue.
Pertemuan (6) QUEUE (ANTREAN) IMAM SIBRO MALISI NIM :
STACK (TUMPUKAN).
Algoritma dan Struktur Data
STACK (Tumpukan).
STACK.
Struktur Data (Data Structure) – IS 2313
Pointer dalam Stack.
STRUKTUR DATA (4) Array Stack(Tumpukkan) dan Queue (Antrian)
Queue.
Struktur Data Stack.
Queue.
Struktur Data List Linear : Linked List (Double Linkedlist)
Algorithm and Data Structures.
Mempelajari tipe data queue dan bagaimana menggunakan fungsi insert, remove, is_empty dan is_full. Mempelajari bagaimana mengimplementasikan queue dengan.
Linear Data Structures (Queue)
Circular Queue.
STRUKTUR DATA (4) array stack dan queue
Struktur Data List Linear : Linked List (Single Linkedlist)
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
ANTRIAN ( QUEUE ) Fajrizal.
ANTRIAN Farid Wajdi Yusuf Pendidikan Teknik Informatika dan Komputer
Apakah Stack itu ?. Apakah Stack itu ? Pengertian STACK Secara sederhana diartikan dengan : sebagai tumpukan dari benda sekumpulan data yang seolah-olah.
Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus.
STRUKTUR DATA QUEUE.
STRUKTUR DATA Queue atau Antrian.
Pertemuan : Algoritma & Struktur Data
Algoritma dan Struktur Data
Pertemuan 8 Stack dengan Array
Universitas Budi Luhur
Stack.
BAB3 QUEUE 6.3 & 7.3 NESTED LOOP.
Sapta Candra Miarsa,S.T.,M.T.
Defri Kurniawan ADT STACK Defri Kurniawan
STRUKTUR DATA QUIZ.
Stack Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman Bersifat LIFO (Last In First Out) Benda yang terakhir masuk ke dalam.
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Defri Kurniawan QUEUE Defri Kurniawan
STRUKTUR DATA – Pertemuan 6
Queue (Antrian).
Struktur Organisasi Data 2
Queue.
STRUKTUR DATA QUEUE (Antrian)
STACK 6.3 & 7.3 NESTED LOOP.
STACK (Tumpukan).
QUEUE (ANTRIAN ) Disusun Oleh : Kelompok 2 Siti Hajar ( )
STRUKTUR DATA Chapt 5 : QUEUE Oleh : Yuli Praptomo PHS, S.Kom.
Algoritma dan Struktur Data
Struktur Data Khoiriya Latifa, M.Kom.
QUEUE Pertemuan ke-6 T 0026.
Circular QUEUE 6.3 & 7.3 NESTED LOOP.
STACK (Tumpukan).
STACK / TUMPUKAN Struktur Data.
Algoritme dan Stuktur Data
Queue(Antrian).
QUEUE (Antrian) #Kulia 6 Algoritma dan Struktur Data.
Pertemuan 6 Queue dengan Array
Algoritma dan Struktur Data
Algoritma dan Struktur Data
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
Algoritma dan Struktur Data
STRUKTUR DATA Teknik Informatika S1
Queue Algoritma dan Struktur Data.
QUEUE (Antrian).
Struktur Data Linear Created by Fifth Group, S3B TI Anggota
Defri Kurniawan ADT STACK Defri Kurniawan
Transcript presentasi:

QUEUE (antrian)

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

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

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

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.

Implementasi Queue dengan Array

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

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

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

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

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

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

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

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

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

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)

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

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 ); }

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 ); }

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

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

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"); }

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); }

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?

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

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

A queue using a circular array MaxSize - 1 belakang depan

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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 !

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)

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

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

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

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

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

PRIORITY QUEUE

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

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

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);

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

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 ); }

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 ); }

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

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

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"); }

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;

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); }