Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Antrian (Queue) I Ketut Resika Arthana, S.T., M.Kom | I Ketut Resika Arthana, S.T., M.Kom

Presentasi serupa


Presentasi berjudul: "Antrian (Queue) I Ketut Resika Arthana, S.T., M.Kom | I Ketut Resika Arthana, S.T., M.Kom"— Transcript presentasi:

1 Antrian (Queue) I Ketut Resika Arthana, S.T., M.Kom | I Ketut Resika Arthana, S.T., M.Kom | Desain dan Analisis Algoritma Jurusan Pendidikan Teknik Informatika FTK - UNDIKSHA Jurusan Pendidikan Teknik Informatika FTK - UNDIKSHA

2 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

3 Warming Up • Buat program untuk menghitung akar-akar persamaan kuadrat dari Ax 2 +Bx+C=0 – A, B dan C diinputkan oleh user – Hitung nilai D = B 2 -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

4 Type data struct typedef struct { char data[MAX]; int head; //posisi kepala int tail; //posisi ekor } Queue; Queue antrian;

5 Materi Array • SCELE FASILKOM-UI SCELE FASILKOM-UI

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

7 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

8 Implementasi dengan Larik C AD B E Depan Antrian Keluar Antrian Masuk Antrian Belakang Antrian

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

10 ABCDE Cara Head Tail

11 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

12 Cara1 : Deklarasi * Deklarasikan array dngn nama data, panjangnya : MAX * Deklarasikan variable head dan tail bertipe integer * 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 • Tampilkan tulisan “Program Antrian di inisialisasi • Inisisialisasi head antrian dengan 0 • Inisialisasi tail antrian dengan -1

13 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 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 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

14 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 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 • 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

15 Cara1 : countElement Print • Hitung jumlah elemen dengan dengan cara mencari selisih posisi tail dengan posisi head ditambah dengan 1 • Tampikan jumlah antrian saat ini • 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

16 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 • 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

17 Cara1: Output

18 Permasalahan Cara 1? • False Alarm : Dalam antrian masih ada tempat yang kosong, tetapi tidak diijinkan untuk mengantri baru

19 ABCD Cara Head Tail

20 Modif Coding Dequeue • Modifikasi function dequeue sehingga terjadi pergeseran ketika terjadi penghapusan dari antrian

21 Permasalahan Cara 2 • Dalam jumlah data besar, terjadi banyak geseran sehingga menyebabkan biaya komputasi yang besar

22 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

23 Solusi Array Cilcular

24 Array Circullar Tail D C Head E Tail Penambahan Elemen Baru (E) : (jika antrian blm penuh) antrian.tail = antrian.tail +1 menambah lagi? Bagaimana jika menambah lagi? tail sudah di posisi max tail sudah di posisi max antrian.data[antrian.tail] = ‘E’ antrian.tail = (antrian.tail + 1) % 5 1) % 5 Penghapusan : Jika antrian tidak kosong Kondisi awal : head =0, tail =-1

25 Deklarasi * Deklarasikan array dngn nama data, panjangnya : MAX * Deklarasikan variable head, tail dan count bertipe integer * Deklarasikan array dngn nama data, panjangnya : MAX * Deklarasikan variable head, tail dan count bertipe integer

26 Inisialisasi dan hitung elemen • Inisialisasi head antrian menjadi 0, • tail menjadi -1 • status menjadi 0 • Inisialisasi head antrian menjadi 0, • tail menjadi -1 • status menjadi 0

27 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 • 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

28 • 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 • 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

29 Posisi dan isi antrian • Tampilkan posisi head dan tail saat ini • Tampilkan antrian, antrian hanya ditampilkan jika ada elemen didalam antrian

30 Program utama : testcase • Test case dengan mengantrikan karakter A sampai F • Keluarkan sebanyak 4 kali • Antrikan karakter G dan H • ANALISA • Test case dengan mengantrikan karakter A sampai F • Keluarkan sebanyak 4 kali • Antrikan karakter G dan H • ANALISA

31 Tugas • Modifikasi program tersebut agar bisa interaktif menggunakan menu • Pilihan : 1.Antrikan Data 2.Hapus dari Antrian 3.Keluar

32 Sekian


Download ppt "Antrian (Queue) I Ketut Resika Arthana, S.T., M.Kom | I Ketut Resika Arthana, S.T., M.Kom"

Presentasi serupa


Iklan oleh Google