Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

QUEUE (Antrian).

Presentasi serupa


Presentasi berjudul: "QUEUE (Antrian)."— Transcript presentasi:

1 QUEUE (Antrian)

2 definisi Antrian (Queue) dpt diartikan kumpulan data dengan penambahan data(elemen) hanya melalui satu sisi saja, yaitu belakang (tail) dan penghapusan data (elemen) hanya melalui sisi depan (head) Hal ini membuat antrian bersifat FIFO (First In First Out), yaitu data masuk pertaman akan keluar pertama dan yang terakhir akan keluar terakhir.

3 Gambar ilustrasi antrian
C D E F

4 lanjut Elemen pertama kali masuk disebut elemen depan (front/head of queue), yg terakhir disebut elemen belakang (rear/tail of queue). Antrian dapat dibuat baik dengan array maupun dengan struct. Pada pembuatan antrian dengan array, antrian yang disajikan bersifat statis, karena jumlah maksimal array sudah ditentukan sejak deklarasi awal.

5 Contoh : Penjualan karcis kereta, bioskop
Penjadualan pencetakan (spooling system) Penjadualan pemakaian CPU Pemakaian I/O pada sistem komputer Penyimpan barang di Apotek

6 Operasi standar queue Membuat queue atau inisialisasi
Mengecek apakah queue penuh atau full Mengecek apakah queue kosong atau empty Memasukkan elemen ke dalam queue atau InQueue (insert Queue) Menghapus elemen atau DeQueue (Delete Queue)

7 Implementasi Queue dengan Linear Array
Implementasi Queue dengan Linear Array atau disebut model fisik (physical Model) yaitu bagian depan queue selalu menempati posisi pertama array

8 MODEL ANTRIAN / QUEUE D C B A A Kosong 1 Elemen 4 Elemen Belakang
1 4 C B Depan Depan Depan A A 1 1

9 TAMBAH ELEMEN A B C D Depan = 0 Belakang = 0 Depan = 1 Depan = 1

10 AMBIL ELEMEN A B C D Ambil 1 elemen Geser antrian Depan = 1
Belakang = 3

11 AMBIL ELEMEN B C D Ambil 1 elemen Geser antrian Depan = 1 Belakang = 2

12 AMBIL ELEMEN C D Ambil 1 elemen Geser antrian Depan = 1 Belakang = 1

13 AMBIL ELEMEN D Ambil 1 elemen Depan = 0 Belakang = 0

14 KAMUS DATA Kamus Data : Q : array [1..4] of Char Depan : Integer
Belakang : Integer Q Belakang Depan

15 Deklarasi umum //deklarasi queue menggunakan array # define MAX 50
# define true 1 # define false 0 Struct queue { int data[MAX]; int head; int tail; }; Struct queue antri;

16 Algoritma PUSH Salah satu algoritma untuk proses memasukkan data (PUSH) adalah sebagai berikut: Masukkan inputan (x) Jika variabel cek = max (Nilai maksimal array), kerjakan langkah 3 Jika tidak, kerjakan langkah 4. Cetak “ANTRIAN PENUH” lalu selesai. Selama cek kurang dari max, maka c  c +1 dan data [c]  x.

17 Algoritma POP Salah satu algoritma untuk proses mengeluarkan data (POP) adalah sebagai berikut: Jika cek = 0, cetak “ANTRIAN KOSONG” kemudian selesai. Jika tidak, lakukan langkah 3. mulai x=0, selama x kurang dari cek, lakukan langkah 3 dan 4. data[x]  data [x+1]. data[cek-1]  NULL. cek  cek – 1

18 Operasi-operasi: 1. Fungsi init
Digunakan utk menciptakan queue yg baru atau kosong, yaitu cara memberi nilai awal (head) dan nilai akhir(tail) dengan nol (0) void init (void) { antri.awal=0; antri.akhir=0; }

19 LANJUT.. 2.Fungsi Full Untuk mengecek apakah queue sdh penuh atau blm.
jika nilai akhir (tail) = nilai max, maka fungsi akan mengembalikan nilai 1 jika tidak sama dengan maksimum, maka fungsi akan mengembalikan nilai 0 if full (void) { If (antri.akhir==MAX) return (true); Else return (false) }

20 Lanjut.. 3. Funsi Empty If Empty (void) {
Untuk mencek apakah queue masih kosong atau sudah berisi data Dgn cara mencek nilai akhir (tail) bernilai nol atau tidak Jika nilai akhir (tail) = 0, maka fungsi akan mengembalikan nilai 1 Jika tidak 0, maka funsi akan mengembalikan nila If Empty (void) { If (antri.akhir==0) return(true) Else return(false); }

21 Lanjut.. 4. Fungsi InQueue Untuk memasukkan elemen ke dalam queue
Jika queue masih koson, maka nilai awal(head) dan nilai akhir(tail) diubah menjadi 1 Jika tidak kosong dan antrian belum penuh, maka nilai akhir (tail) akan ditambah 1(increment)

22 Void inQueue (char elemen) { if (Empty()==true) antri. awal=1; antri
Void inQueue (char elemen) { if (Empty()==true) antri.awal=1; antri.akhir=1; antri.info[antri.awal]=elemen; } Else If(full()!=true) antri.akhir++ Antri.info[antri.akhir]=elemen; printf(“Queue Overflow,,,\n”);

23 Lanjut 5. Fungsi DeQueue Untuk mengambil elemen dari queue, dgn cara memindah suatu elemen satu langkah ke posisi depannnya, sehingga elemen yang paling depan tertimpa

24 lanjut Char deQueue (void) { char isi; int i; if (empty()!=true) isi=antri.info[antri.awal]; for (i=antri.awal;i<=antri.akhir-1;i++) antri.info[i]=antri.info[i+1]; Antri.akhir –- Return(isi); } Else Printf(“Queue underflow…\n”);

25 6. Fungsi Clear Void clear (void) { while (empty()==0 dequeue(); }

26

27 Lanjut.. void create( ) { head=tail= -1}

28 Lanjut.. 2. IsEmpty() Untuk memeriksa apakah Antrian sudah penuh atau belum Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail

29 Lanjut.. Int IsEmpty ( ) { if(tail= = -1) return 1; else return 0; }

30 Lanjut.. Untuk mengecek apakah Antrian sudah penuh atau belum
3. Fungis IsFull Untuk mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh int IsFull ( ) { if(tail = = MAX-1) return 1; else return 0;}

31 Lanjut.. 4. Inqueue Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu

32 Lanjut..

33 //dengan array void Enqueue ( int data) { if(IsEmpty()= =1) { head=tail=0; data[tail]=data; printf(“%d masuk!”, data[tail])}; else if(IsFull() = = 0) { tail++; printf(“%d masuk!”, data[tail]);} }

34 Queue (9) Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping

35 Lanjut..

36 int Dequeue( ){ int i; int e = data[head]; for (i=head;i<=tail-1;i++) { data[i] = data [i+1};} tail - -; return e; }

37 Queue (11) Clear() Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca

38 Queue (12) void Clear ( ) { head = tail =-1; printf (“data clear”); }

39 Queue (13) Tampil() Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail void Tampil( ){ if(IsEmpty( )= = 0) { for(int i=head; i<= tail; i++) { printf (“%d”, data[i]);} } else pritf(“data kosong!\n”);

40 Soal Tambahkanlah function untuk mencari suatu elemen dalam queue & stack Tambahkan function untuk mengedit suatu elemen dalam queue & stack Carilah nilai total, rata-rata, terbesar dan terkecil dari elemen-elemen queue dalam function tersendiri NEXT : Pengenalan Pointer dan Function by Ref.


Download ppt "QUEUE (Antrian)."

Presentasi serupa


Iklan oleh Google