Defri Kurniawan defri.kurniawan@dsn.dinus.ac.id QUEUE Defri Kurniawan defri.kurniawan@dsn.dinus.ac.id
RENCANA KEGIATAN PERKULIAHAN SEMESTER W Pokok Bahasan 1 ADT Stack 2 ADT Queue 3 List Linear 4 5 6 Representasi Fisik List Linear 7 Variasi List Linear 8 Ujian Tengah Semester W Pokok Bahasan 9 Variasi List Linear 10 11 Stack dengan Representasi List 12 Queue dengan Representasi List 13 List Rekursif 14 Pohon dan Pohon Biner 15 Multi List 16 Ujian Akhir Semester
Queue Elemen List linear dimana penghapusan elemen dapat terjadi hanya di salah satu ujung, yang disebut FRONT (Head) dan penyisipan dapat terjadi hanya di ujung, yang disebut REAR (Tail) 2 5 1 6 9 Head Tail
people waiting to purchase tickets Queue Elemen pertama pada antrian akan menjadi yang pertama dihapus dari daftar FIFO (First In First Out) Example Queue people waiting to purchase tickets
Queue Menginisialisasi antrian kosong Menentukan jika antrian kosong atau tidak Menentukan jika suatu antrian penuh atau tidak Menambah elemen baru setelah elemen terakhir pada antrian (jika antrian tidak penuh) Mengambil elemen pertama dari suatu antrian (jika antrian tidak kosong) Retrieve the first element of a queue, if it is not empty Mengahapus elemen pertama pada antrian (jika antrian tidak kosong)
Queue - Array Representation of a Queue as an array X[0] X[1] X[2] 8 10 61 9 12 1 23 2 Head Tail
Queue dengan Linier Array 1 2 3 … n Head = -1 Tail = -1
Queue dengan Linier Array 1 2 3 … n Head Tail
Queue dengan Linier Array 1 2 3 … n Head Tail
Queue dengan Linier Array 1 2 3 … n Head Tail
Queue dengan Linier Array 1 2 3 … n Head Tail
Queue dengan Linier Array 1 2 3 … n Head Tail
Queue dengan Linier Array Create() inisialisasi Queue, Head dan Tail = -1
Queue dengan Linier Array Deklarasi Queque #define MAX 8 typedef struct { int data[MAX]; int head; int tail; }Queqe; Queqe antrian;
Queue dengan Linier Array inisialisasi Queue, Head dan Tail = -1 void Create() { antrian.head = antrian.tail = -1; }
IsEmpty Untuk memeriksa apakah antrian kosong atau tidak, dengan cara memeriksa Tail = -1 kita tidak memeriksa Head, karena Head adalah tanda sebagai kepala antrian yang tidak akan berubah
IsEmpty (Lanjutan) int IsEmpty() { if(antrian.tail==-1) return 1; else return 0; }
IsFull Apakah Antrian sudah penuh atau belum ? Tail = MAX-1
IsFull (Lanjutan) int IsFull() { if(antrian.tail==MAX-1) return 1; else return 0; }
Enqueue Menambahkan elemen ke dalam antrian Penambahan elemen menggerakkan variable Tail dengan cara increment counter tail
Enqueue (Lanjutan) void Enqueue(int data) { if(IsEmpty()==1) { antrian.head = antrian.tail=0; antrian.data[antrian.tail] = data; printf("%d masuk!", antrian.data[antrian.tail]); }else if(IsFull()==0) { antrian.tail++; antrian.data[antrian.tail]=data; printf("%d masuk!",antrian.data[antrian.tail]); }
Dequeue Menghapus elemen paling depan dari antrian Menggeser semua elemen ke depan dan mengurangi Tail dengan 1
Dequeue (Lanjutan) int Dequeue() { int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++) { antrian.data[i] = antrian.data[i+1]; } antrian.tail--; return e;
Clear Menghapus semua elemen antrian Tail dan head = -1
Tampil Menampilkan elemen antrian void Tampil() { if(IsEmpty()==0) { for(int i-antrian.head;i<=antrian.tail;i++) { printf("%d",antrian.data[i]); } }else printf("data kosong! \n");
TUGAS PERORANGAN Implementasikan konsep Stack dan Queue ke dalam bahasa C dengan panjang Larik 9 gunakan operasi: Pada Stack Push, Pop, IsEmpty, IsFull Pada Queue IsEmpty, IsFull, Enqueue, Dequeue, Tampil Isi data sesuai dengan nim masing-masing diambil dari data tahun. Ex: Nim A11.2015.01234 data = {2,0,1,5,0,1,2,3,4} 2 1 5 3 4
Terima Kasih