Antrian Dengan Array Ika Menarianti
Mengenal Struktus Data Antrian Antrian (queue) adalah struktur data yang mempunyai sifat bahwa data yang masuk duluan akan diproses lebih dulu. Struktur data ini mempunyai sifat FIFO (First-In-First-Out). Antrian kosong Depan A B C Depan Belakang B C Depan Belakang B C D E Belakang
Operasi dalam antrian Insert menyatakan operasi untuk memasukkan data kedalam antrian. Dinyatakan dengan Insert(A, d) atau Insert(d). A menyatakan antrian dan d menyatakan item data yang dimasukkan ke dalam antrian. Remove menyatakan operasi untuk mengambil data dari antrian. Dinyatakan dengan Remove(A). Penggunaan Remove dituangkan dalam bentuk pernyataan Data:= Remove(A);
Implementasi Antrian dengan array Pilih menu File dan Save project As.. Simpan unit dengan nama FAntrian Simpan project dengan nama Pantrian atur properti form sebagai berikut: Name : FormAntrian Caption: Antrian
Menambahkan kode untuk mendeklarasikan tipe dan variabel Ketikkan kode berikut diatas kata type const Makselemen = 10; Di bawah baris type, sisipkan kode berikut: TQueue = record Data : array [1..Makselemen] of String; Depan, Belakang : 0 ..Makselemen; end; Buat baris kosong dibawah {private declarations} dan ketikkan: Antrian : TQueue;
const Makselemen = 10; Untuk membuat konstanta bernama Makselemen yang bernilai 10. TQueue = record Data : array [1..Makselemen] of String; Depan, Belakang : 0 ..Makselemen; end; Digunakan untuk membuat tipe Tqueue yang menyatakan struktur data tumpukan. Tipe ini mengandung tiga buah field yait Data, Depan dan Belakang. Data berupa array yang mengandung Makselemen buah elemen. Depan menyatakan posisi depan antrian dan Belakang menyatakan posisi belakan antrian. Antrian : TQueue; Dimaksudkan untuk membuat variabel instan bernama antrian yang bertipe Tqueue.
Berikut variabel antrian dan field yang terkandung didalamnya 1 2 3 4 5 6 7 8 9 10 Antrian Data Menyatakan data paling depan Depan Belakang Menyatakan data paling belakang
Nilai Depan dan Belakang yang sama menyatakan bahwa antrian dalam keadaan kosong, tidak peduli sedang menunjuk posisi apapun. 1 2 3 4 5 6 7 8 9 10 Depan 1 Belakang 1 Nilai yang sama pada Depan dan Belakang menyatakan antrian kosong
Contoh berikut menunjukkan keadaan setelah dua data dimasukkan ke dalam antrian: Data paling depan 1 2 3 4 5 6 7 8 9 10 Depan 1 Nara Fadhilah Data paling belakang Belakang 3 Dua data setelah ditambahkan
Menambahkan komponen string grid, edit dan button
Komponen Properti Nilai String Grid Name StringGridAntrian ColCount 1 (lebarkan sesuai grid) ScrollBars ssVertical (hanya scrollbar vertikal yang ditampilkan) Edit EditAntrian Text Kosongkan Button 1 ButtonInsert Caption &Insert Button 2 ButtonRemove &Remove Button 3 ButtonKeluar &Keluar
Menambahkan prosedur untuk menampilkan data Tambahkan baris berikut di atas kata private procedure TampilkanData; Tuliskan kode berikut di atas end. yang paling bawah. procedure TFormAntrian.TampilkanData; var i : integer; Ket: String; begin StringGridAntrian.RowCount:= Makselemen + 1; StringGridAntrian.Cells[0,0] := 'Isi Antrian'; for i:=1 to Makselemen do
begin //keterangan tambahan if Antrian. Belakang = Antrian begin //keterangan tambahan if Antrian.Belakang = Antrian.Depan then if Antrian.Belakang = i then Ket := '{Depan dan Belakang}' else Ket := '' if Antrian.Depan = i then Ket := '{Depan}' Ket := '{Belakang}' Ket := ''; end; StringGridAntrian.Cells[0,i] := Antrian.Data[i] + Ket; Pastikan tidak ada kesalahan dengan tekan F9 dan simpan
StringGridAntrian.Cells[0,i] := Antrian.Data[i] + Ket; Pernyataan if bertingkat digunakan untuk mengatur variabel Ket. Untuk setiap elemen dalam antrian akan di isi dengan string kosong ‘{Depan}’, ‘{Belakang}’ atau ‘{Depan dan Belakang}’ Isi variabel Ket selanjutnya ditambahkan ke setiap elemen dalam antrian melalui pernyataan: StringGridAntrian.Cells[0,i] := Antrian.Data[i] + Ket;
Menambahkan kode pada OnCreate Klik Event pada Object Inspector, pilih OnCreate dan klik ganda, kemudian ketikkan kode dibawah ini: procedure TFormAntrian.FormCreate(Sender: TObject); var i : Integer; begin Antrian.Depan := Makselemen; Antrian.Belakang := Makselemen; //kosongkan data for i := 1 to Makselemen do Antrian.Data[i] := ''; TampilkanData; end; Tambahkan kode yang berwarna merah pada baris program OnCreate
Tampilan setelah program di compile
Menambahkan prosedur Insert Diatas kata private ketikkan kode berikut procedure Insert(x : String); Di atas baris end. Paling bawah ketikkan kode berikut: procedure TFormAntrian.Insert(x:string); var PosisiBelakang : 1..Makselemen; begin //geser belakang ke posisi berikutnya
if Antrian.Belakang = Makselemen then PosisiBelakang := 1 else PosisiBelakang := Antrian.Belakang + 1; //cek belakang apa sama dengan depan if PosisiBelakang = Antrian.Depan then ShowMessage('Antrian Penuh') begin Antrian.Belakang := PosisiBelakang; //Masukkan data Antrian.Data[Antrian.Belakang] := x; end end; Pastikan tidak ada kesalahan dengan tekan F9 dan simpan
Tambahkan kode untuk menambahkan data ke dalam antrian Klik ganda pada tombol Insert dan secara otomatis kejadian OnClick akan diaktifkan jika tombol di klik. Tuliskan kode berikut: procedureTFormAntrian.ButtonInsertClick(Sender: TObject); begin //periksa kalau data kososng if Trim(EditAntrian.Text) = '' then ShowMessage('Data harap diisi'); Exit; end; Insert(EditAntrian.Text); TampilkanData;
Keterangan.. Isi EditAntrian akan di cek dulu, apakah dalam keadaan kosong atau tidak. Jika kosong maka pernyatan Exit membuat eksekusi terhadap prosedur diakhiri setelah muncul “Data Harap di isi”. Jika komponen edit tidak kosong maka perintah Insert(EditAntrian.Text); TampilkanData; Akan dijalankan. Pernyataan pertama memanggil prosedur Insert untuk memasukkan data pada antrian. Prosedur TampilkanData akan membuat data yang dimasukkan terlihat di String Grid.
Tampilan jika edit tidak di isi
Tampilan jika edit di isi Isikan data sebanyak 9 kali, dan lihat apa yang terjadi.
Menambahkan fungsi Empty Tambahkan kode berikut di atas private function Empty():Boolean; Ketikkan program berikut di tas end. Simpan program. function TFormAntrian.Empty():Boolean; begin if Antrian.Depan = Antrian.Belakang then Empty := True else Empty := False; end;
Menambahkan fungsi remove Tambahkan kode berikut diatas private function Remove(): String; Tulis kode berikut di atas end. function TFormAntrian.Remove():String; begin if Empty() then ShowMessage('Antrian Ksong'); Remove:= ''; Exit; end; if Antrian.Depan = Makselemen then Antrian.Depan := 1 else Antrian.Depan := Antrian.Depan + 1; Remove := Antrian.Data[Antrian.Depan];
Keterangan.. Pada awalnya dilakukan pemeriksaan terhadap isi antrian. Jika antrian kosong maka pesan “antrian kosong” akan ditampilkan. Apabila antrian tidak kosong, akan diperiksa apakah Depan bernilai sama dengan Makselemen. Kalau ya maka Depan diberi nilai 1 yang menyatakan bahwa data berada pada indeks 1. Jika tidak maka data yang dimasukkan berada satu posisi sesudahnya. Kemudian Remove := Antrian.Data[Antrian.Depan]; memberikan nilai balik pada fungsi remove.
Tambahkan kode pada tombol Remove Klik ganda pada tombol remove Ketikkan kode berikut: procedure TFormAntrian.ButtonRemoveClick(Sender: TObject); var Data : String; begin Data := Remove; TampilkanData; if Data <> '' then ShowMessage('Data yang diambil: ' + Data); end;
Uji program dengan menambahkan data ke dalam antrian dan kemudian ambil data dari antrian.
Tekan tombol remove Lakukan remove untuk semua data dan lihat apa yang terjadi.
Menampilkan data antrian dari depan ke belakang Ubah program pada prosedur TampilkanData dengan kode dibawah ini: procedure TFormAntrian.TampilkanData; var i, JumData, Nomor : integer; begin //Hitung jumlah data if Antrian.Depan = Antrian.Belakang then JumData := 0 else // kalau tidak nol if (Antrian.Depan < Antrian.Belakang) then JumData := Antrian.Belakang - Antrian.Depan else JumData := Makselemen - Antrian.Depan + Antrian.Belakang;
//tentukan jumlah baris dalam string grid dan judul StringGridAntrian //tentukan jumlah baris dalam string grid dan judul StringGridAntrian.RowCount:= JumData + 1; StringGridAntrian.Cells[0,0] := 'Isi Antrian'; //salin data ke string grid dari depan ke belakang if Antrian.Depan = Antrian.Belakang then for i:=1 to Makselemen do StringGridAntrian.Cells[0,i]:= '' else //kalau tidak nol if (Antrian.Depan < Antrian.Belakang) then begin Nomor:=1; for i:= Antrian.Depan + 1 to Antrian.Belakang do StringGridAntrian.Cells[0,Nomor] := Antrian.Data[i]; Nomor:= Nomor +1; end
else begin Nomor:=1; for i:=Antrian else begin Nomor:=1; for i:=Antrian.Depan + 1 to Makselemen do StringGridAntrian.Cells[0,Nomor] := Antrian.Data[i]; Nomor:= Nomor+1; end; for i := 1 to Antrian.Belakang do StringGridAntrian.Cells[0,Nomor]:=Antrian.Data[i]; Nomor:=Nomor+1; end
Evaluasi
Soal 1 Apa yag dimaksud dengan antrian? Mengapa antrian dikatakan mempunyai sifat FIFO?
Soal 2 Gambarkan keadaan antrian untuk setiap pemanggilan operasi berikut: Insert(‘A’) Insert(‘B’) Insert(‘C’) Remove Insert(‘X’) Insert(‘Y’) Insert(‘Z’)
Soal 3 Berdasarkan contoh program sebelumnya, jika suatu antrian terbentuk menggunakan array dengan 20 elemen maka hanya bisa digunakan 19 elemen saja. Benarkah? Mengapa begitu? Jelaskan!
Soal 4 Suatu antrian diimplementasikan dengan array yang mengandung 6 elemen dengan keadaan sebagai berikut: 7 1 2 3 4 5 6 10 12 Depan 5 3 Belakang 10
Berapa jumlah data dalam antrian tersebut? Bagaimana urutan antriannya? Bila terjadi sebuah operasi Remove, gambarkan keadaan akhirnya!