Transcript Antrian (Queue)
Slide 1
Desain dan Analisis Algoritma
I Ketut Resika Arthana, S.T., M.Kom
[email protected] | http://www.rey1024.com
Jurusan Pendidikan Teknik Informatika
FTK - UNDIKSHA
Slide 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
Slide 3
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
Slide 4
Type data struct
typedef struct
{
char data[MAX];
int head; //posisi kepala
int tail; //posisi ekor
} Queue;
Queue antrian;
Slide 5
Materi Array
• SCELE FASILKOM-UI
Slide 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 )
Slide 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
Slide 8
Implementasi dengan Larik
Depan Antrian
Keluar Antrian
Masuk Antrian
A
B
C
D
E
Belakang
Antrian
Slide 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;
Slide 10
Cara 1
Head
0
A
Tail
1
B
2
C
3
D
4
E
Slide 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
Slide 12
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
Slide 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
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
Slide 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 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
Slide 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
•Tampilkan posisi head dan tail antrian saat ini
•Tampilkan isi antrian secara horishontal
Slide 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
Slide 17
Cara1: Output
Slide 18
Permasalahan Cara 1?
• False Alarm : Dalam antrian masih ada
tempat yang kosong, tetapi tidak diijinkan
untuk mengantri baru
Slide 19
Cara 2
Head
0
A
Tail
1
B
2
C
3
D
4
Slide 20
Modif Coding Dequeue
•Modifikasi function dequeue sehingga terjadi pergeseran ketika
terjadi penghapusan dari antrian
Slide 21
Permasalahan Cara 2
• Dalam jumlah data besar, terjadi banyak
geseran sehingga menyebabkan biaya
komputasi yang besar
Slide 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
Slide 23
Solusi Array Cilcular
Slide 24
Array Circullar
Kondisi awal :
head =0, tail =-1
Penambahan Elemen Baru (E) :
0
4
(jika antrian blm penuh)
E
antrian.tail = antrian.tail +1
antrian.data[antrian.tail] = ‘E’
Bagaimana jika menambah lagi?
tail sudah di posisi max
antrian.tail = (antrian.tail +
1) % 5
Penghapusan : Jika antrian
tidak kosong
D
1
C
2
3
Slide 25
Deklarasi
* Deklarasikan array dngn nama data, panjangnya : MAX
* Deklarasikan variable head , tail dan count bertipe integer
Slide 26
Inisialisasi dan hitung elemen
•Inisialisasi head antrian menjadi 0,
•tail menjadi -1
•status menjadi 0
Slide 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
Slide 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
Slide 29
Posisi dan isi antrian
•Tampilkan posisi head dan tail saat ini
•Tampilkan antrian, antrian hanya ditampilkan jika ada elemen didalam antrian
Slide 30
Program utama : testcase
•Test case dengan mengantrikan karakter A
sampai F
•Keluarkan sebanyak 4 kali
•Antrikan karakter G dan H
•ANALISA
Slide 31
Tugas
• Modifikasi program tersebut agar bisa
interaktif menggunakan menu
• Pilihan :
1. Antrikan Data
2. Hapus dari Antrian
3. Keluar
Slide 32
Sekian
Desain dan Analisis Algoritma
I Ketut Resika Arthana, S.T., M.Kom
[email protected] | http://www.rey1024.com
Jurusan Pendidikan Teknik Informatika
FTK - UNDIKSHA
Slide 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
Slide 3
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
Slide 4
Type data struct
typedef struct
{
char data[MAX];
int head; //posisi kepala
int tail; //posisi ekor
} Queue;
Queue antrian;
Slide 5
Materi Array
• SCELE FASILKOM-UI
Slide 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 )
Slide 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
Slide 8
Implementasi dengan Larik
Depan Antrian
Keluar Antrian
Masuk Antrian
A
B
C
D
E
Belakang
Antrian
Slide 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;
Slide 10
Cara 1
Head
0
A
Tail
1
B
2
C
3
D
4
E
Slide 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
Slide 12
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
Slide 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
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
Slide 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 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
Slide 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
•Tampilkan posisi head dan tail antrian saat ini
•Tampilkan isi antrian secara horishontal
Slide 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
Slide 17
Cara1: Output
Slide 18
Permasalahan Cara 1?
• False Alarm : Dalam antrian masih ada
tempat yang kosong, tetapi tidak diijinkan
untuk mengantri baru
Slide 19
Cara 2
Head
0
A
Tail
1
B
2
C
3
D
4
Slide 20
Modif Coding Dequeue
•Modifikasi function dequeue sehingga terjadi pergeseran ketika
terjadi penghapusan dari antrian
Slide 21
Permasalahan Cara 2
• Dalam jumlah data besar, terjadi banyak
geseran sehingga menyebabkan biaya
komputasi yang besar
Slide 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
Slide 23
Solusi Array Cilcular
Slide 24
Array Circullar
Kondisi awal :
head =0, tail =-1
Penambahan Elemen Baru (E) :
0
4
(jika antrian blm penuh)
E
antrian.tail = antrian.tail +1
antrian.data[antrian.tail] = ‘E’
Bagaimana jika menambah lagi?
tail sudah di posisi max
antrian.tail = (antrian.tail +
1) % 5
Penghapusan : Jika antrian
tidak kosong
D
1
C
2
3
Slide 25
Deklarasi
* Deklarasikan array dngn nama data, panjangnya : MAX
* Deklarasikan variable head , tail dan count bertipe integer
Slide 26
Inisialisasi dan hitung elemen
•Inisialisasi head antrian menjadi 0,
•tail menjadi -1
•status menjadi 0
Slide 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
Slide 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
Slide 29
Posisi dan isi antrian
•Tampilkan posisi head dan tail saat ini
•Tampilkan antrian, antrian hanya ditampilkan jika ada elemen didalam antrian
Slide 30
Program utama : testcase
•Test case dengan mengantrikan karakter A
sampai F
•Keluarkan sebanyak 4 kali
•Antrikan karakter G dan H
•ANALISA
Slide 31
Tugas
• Modifikasi program tersebut agar bisa
interaktif menggunakan menu
• Pilihan :
1. Antrikan Data
2. Hapus dari Antrian
3. Keluar
Slide 32
Sekian