Antrian (Queue)

Download Report

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