Antrian (Queue)
description
Transcript of Antrian (Queue)
![Page 1: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/1.jpg)
Antrian (Queue)
I Ketut Resika Arthana, S.T., [email protected] | http://www.rey1024.com
Desain dan Analisis Algoritma
Jurusan Pendidikan Teknik InformatikaFTK - UNDIKSHA
![Page 2: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/2.jpg)
Warming Up
• Buat program untuk menampilkan bilangan 0 sampai 10. Jika bilangan tersebut adalah kelipatan 3, maka disamping bilangan tersebut ditulis *
• Output– 0*– 1– 2– 3*– 4– 5– 6*– 7– 8– 9*– 10
![Page 3: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/3.jpg)
Warming Up
• Buat program untuk menghitung akar-akar persamaan kuadrat dari Ax2+Bx+C=0– A, B dan C diinputkan oleh user– Hitung nilai D = B2 -4*A*C– Jika D<0 maka tampilkan “Akar AX2 + BX +C=0 adalah imajiner”– Jika D=0 maka hitung :
• AKar1= -B / (2*A )• Akar2=Akar 1• Tampilkan tulisan nilai akar1 dan akar2
– Jika D>0• AKar1= -B + Akar(D)/ (2*A )• Akar2= -B - Akar(D)/ (2*A )• Tampilkan tulisan nilai akar1 dan akar2
![Page 4: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/4.jpg)
Type data struct
typedef struct{ char data[MAX]; int head; //posisi kepala int tail; //posisi ekor } Queue;Queue antrian;
![Page 5: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/5.jpg)
Materi Array
• SCELE FASILKOM-UI
![Page 6: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/6.jpg)
Pengenalan
• Struktur data antrian dalam kehidupan nyata :– Antrian dikasir supermarket– Antrian di SPBU– Antrian Tiket Kereta Api
• Karakteristik :– Penambahan data : dibelakang (tail)– Penghapusan data : didepan (head)
• Prinsip : FIFO ( First In First Out )
![Page 7: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/7.jpg)
Implementasi Antrian
• Array (Larik)• Linked List (Senarai Berantai)
Implementasi dengan linked list akan memberikan ketersediaan ruang yang dinamis, yaitu sesuai dengan kebutuhan penggunaan ruang yang tidak dapat ditentukan dengan pasti
![Page 8: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/8.jpg)
Implementasi dengan Larik
CA DB E
Depan Antrian
Keluar Antrian Masuk Antrian
Belakang Antrian
![Page 9: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/9.jpg)
Cara 1
• Kondisi awal (antrian kosong) dinyatakan dengan posisi depan=0, belakang=-1;
• Banyaknya elemen : Belakang -Depan + 1• Jika terjadi penghapusan antrian maka posisi depan
ditambah dengan 1• Jika terjadi penambahan elemen baru ke dalam
antrian maka posisi belakang ditambah dengan 1, lalu dimasukkan elemen baru– Belakang = Belakang + 1;– Antrian[Belakang] = X;
![Page 10: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/10.jpg)
A B C D E
Cara 1
0 1 2 3 4
Head
Tail
![Page 11: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/11.jpg)
Prosedur yang harus dipersiapkan
• Init : Inisiasi posisi head dan tail• isEmpty : mengecek apakah antrian kosong• isFull : mengecek apakah antrian penuh• Enqueue : Menambah elemen dalam antrian• Dequeue : Menghapus elemen awal• CountElement : MenghitungJumlahElemen
![Page 12: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/12.jpg)
Cara1 : Deklarasi
* Deklarasikan array dngn nama data, panjangnya : MAX* Deklarasikan variable head dan tail bertipe integer
• Tampilkan tulisan “Program Antrian di inisialisasi• Inisisialisasi head antrian dengan 0• Inisialisasi tail antrian dengan -1
![Page 13: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/13.jpg)
Cara1: funct isEmpty isFull
Jika tail antrian lebih kecil dari head antrian maka kembalikan nilai 1 untuk menandakan bahwa antrian kosong. Sebaliknya kembalikan nilai 0 untuk menandakan bahwa antrian tidak kosong
Antrian disebut penuh jika posisi tail saat ini sama dengan nilai (max-1)Kembalikan nilai 1 jika penuh, sebaliknya kembalikan nilai 0 jika antrian tidak penuh
![Page 14: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/14.jpg)
Cara1 : enqueue dequeue
•Jika Antrian tidak penuh maka geser posisi tail kekanan;•Isi data pada antrian sesuai posisi saat ini dengan karakter D•Jika ternyata antrian penuh, tampilkan tulisan bahwa antrian penuh
•Jika Antrian tidak kosong maka simpan karakter yang ada pada posisi kepala ke variabel bertipe char dengan nama c•Geser posisi head antrian kekanan•Tampilkan tulisan bahwa data tersebut keluar dari antrian•Jika ternyata antrian kosong, tampilkan pesan bahwa antrian kosong
![Page 15: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/15.jpg)
Cara1 : countElement Print
•Hitung jumlah elemen dengan dengan cara mencari selisih posisi tail dengan posisi head ditambah dengan 1•Tampikan jumlah antrian saat ini
•Tampilkan posisi head dan tail antrian saat ini
•Tampilkan isi antrian secara horishontal
![Page 16: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/16.jpg)
Cara1 : Main, TestCase
•Bangun test case dengan memasukkan karakter A,B,C,D, kemudian keluarkan data dari dalam antrian sebanyak 5 kali.•Masukkan karakter E dan F•Disetiap testcase, tampilkan isi antrian, jumlah elemen dan posisi head dan tail antrian
![Page 17: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/17.jpg)
Cara1: Output
![Page 18: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/18.jpg)
Permasalahan Cara 1?
• False Alarm : Dalam antrian masih ada tempat yang kosong, tetapi tidak diijinkan untuk mengantri baru
![Page 19: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/19.jpg)
A B C D
Cara 2
0 1 2 3 4
Head
Tail
![Page 20: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/20.jpg)
Modif Coding Dequeue
•Modifikasi function dequeue sehingga terjadi pergeseran ketika terjadi penghapusan dari antrian
![Page 21: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/21.jpg)
Permasalahan Cara 2
• Dalam jumlah data besar, terjadi banyak geseran sehingga menyebabkan biaya komputasi yang besar
![Page 22: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/22.jpg)
Solusi dari masalah kedua
• menyimpan elemen antrian sebagai larik yang memutar (circular), bukan lurus (straight),
• membuat elemen pertama larik terletak berdekatan langsung dengan elemen terakhir larik
![Page 23: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/23.jpg)
Solusi Array Cilcular
![Page 24: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/24.jpg)
Array Circullar
Tail
4
3
2
1
0
D
C
Head
E
Tail
Penambahan Elemen Baru (E) :(jika antrian blm penuh)
antrian.tail = antrian.tail +1
Bagaimana jika menambah lagi? tail sudah di posisi max
antrian.data[antrian.tail] = ‘E’
antrian.tail = (antrian.tail + 1) % 5
Penghapusan : Jika antrian tidak kosong
Kondisi awal :head =0, tail =-1
![Page 25: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/25.jpg)
Deklarasi
* Deklarasikan array dngn nama data, panjangnya : MAX* Deklarasikan variable head , tail dan count bertipe integer
![Page 26: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/26.jpg)
Inisialisasi dan hitung elemen
•Inisialisasi head antrian menjadi 0, •tail menjadi -1•status menjadi 0
![Page 27: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/27.jpg)
Antrian dan penghapusan
•Data diantrikan jika antrian kosong atau jumlah elemen di antrian tidak sama dengan maksimal array. Jika tidak maka tampilkan info bahwa antrian penuh•Tail antrian di geser sekali kekanan, memutar kembali jika sudah diujung•Masukkan data sesuai dengan posisi tail saat ini.•Tampikan informasi bahwa antrian telah dimasukkan
![Page 28: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/28.jpg)
•Data pada antrian dihapus jika antrian sudah terisi, jika tidak tampilkan tulisan bahwa antrian kosong•Tampung nilai yang akan dihapus ke variabel karakter •Pindahkan head kekanan, memutar kembali jika sudah penuh•Tampilkan info bahwa data c keluar dari antrian•Tampilkan jumlah antrian saat ini
![Page 29: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/29.jpg)
Posisi dan isi antrian
•Tampilkan posisi head dan tail saat ini
•Tampilkan antrian, antrian hanya ditampilkan jika ada elemen didalam antrian
![Page 30: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/30.jpg)
Program utama : testcase
•Test case dengan mengantrikan karakter A sampai F•Keluarkan sebanyak 4 kali•Antrikan karakter G dan H•ANALISA
![Page 31: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/31.jpg)
Tugas
• Modifikasi program tersebut agar bisa interaktif menggunakan menu
• Pilihan : 1. Antrikan Data2. Hapus dari Antrian3. Keluar
![Page 32: Antrian (Queue)](https://reader038.fdocuments.net/reader038/viewer/2022102707/568143ae550346895db03734/html5/thumbnails/32.jpg)
Sekian