SOAL
Berikan
contoh ilustrasi dari kasus antrian berikut :
a)
Diketahui suatu antrian / queue dengan max = 6
b)
Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah
posisi Head dan Tail .
c)
Kemudian lakukan Dequeue 2 elemen dari antrian, maka
dimanakah posisi Head dan Tail ?
d)
Dari keadaan diatas, bagaimanakah kondisi IsFull dan
IsEmptynya ?
ILUSTRASI
KONDISI KASUS PERTAMA
Deklarasi
Awal Queue
Variabel
yang akan digunakan adalah data (array sebagai tempat queue), head, tail.
Sama seperti Stack, Nilai dari head dan tail dimulai dari -1 yang menandakan
queue kosong. sebagai contohnya kita akan membuat queue dengan data maksimal
sebanyak 6 data.
ILUSTRASI
KONDISI KASUS KEDUA TENTANG ENQUEUE
ENQUEUE
Digunakan
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.
Contoh
:
Lakukan
Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail .
ILUSTRASI
KONDISI KASUS KETIGA TENTANG DEQUEUE
DEQUEUE
Digunakan
untuk menghapus elemen terdepan/pertama (head) dari Antrian.
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail
dengan 1.
Contoh
:
Berdasarkan
ilustrasi pertama, lakukan Dequeue 2 elemen dari antrian, maka dimanakah posisi
Head dan Tail ?
ILUSTRASI
KONDISI KASUS KEEMPAT TENTANG IsEMPTY
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.
ILUSTRASI
KONDISI KASUS TENTANG IsFull
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.
CONTOH
APABILA DI BUAT DALAM BENTUK PROGRAM
Program
antrian_array_statis;
Uses
wincrt;
Const
Max_queue
= 6;
Type
Queue
= array[1..Max_queue] of char;
Var
Antrian
: queue;
I : integer;
Depan : integer;
Belakang : integer;
Pilih : char;
Elemen
: char;
{***************************************
* Procedure menampilkan antrian data. *
***************************************}
Procedure tampilkan( x :integer);
Var
I : integer;
Begin
For i := 1 to x do
Begin
Gotoxy(18 + 4 * i, 19);
Write(antrian[i]);
End;
END; {*procedure TAMPILAKAN*}
Procedure
clear;
Var
I : integer;
Begin
For
i := 1 to 10 do
Begin
Gotoxy(62
- 4 * i, 19);writeln(' ');
end;
END;
{*procedure HUPUS*}
{****************************************************************
*
Fungsi untuk menge-cek keadaan antrian ( penuh atau kosong )
*****************************************************************}
Function
kosong(belakang:integer):boolean;
Begin
Kosong := false;
If (belakang = 0) then
Kosong := true;
End;
Function
penuh(belakang:integer):boolean;
Begin
Penuh
:= false;
If
(belakang = max_queue) then
Penuh
:= true;
End;
{*******************************************************************
*
Procedure untuk menambah elemen baru selama antrian belum penuh.*
*
Jika antrian sudah penuh. Program akan menampilkan suatu pesan. *
*******************************************************************}
PROCEDURE
TAMBAH_ELEMEN (VAR DEPAN, BELAKANG: INTEGER; ELEMEN: CHAR);
BEGIN
IF
( PENUH(BELAKANG)) THEN
BEGIN
GOTOXY(32,16);
WRITE('ANTRIAN SUDAH PENUH');
END
Else
Begin
Gotoxy(49,15);writeln(' ');
gotoxy(31,15);write('isikan elemennya : ');
readln(elemen);
Gotoxy(49,15);writeln(' ');
if (kosong(belakang)) then
Begin
Depan := 1;
Belakang := 1;
Antrian[belakang] := elemen;
End
Else
Begin
Belakang := belakang + 1;
Antrian[belakang] := elemen;
End;
Tampilkan(belakang);
End;
Gotoxy(31,15);write(' ');
end;
{*******************************************************************
* Procedure untuk menghapus elemen dari
antrian yang belum kosong.*
* Jika antrian kosong, program akan
menampilkan suatu pesan. *
*******************************************************************}
PROCEDURE HAPUS (VAR DEPAN, BELAKANG : INTEGER);
VAR
I : INTEGER;
BEGIN
IF (NOT KOSONG(BELAKANG)) THEN
BEGIN
ELEMEN := ANTRIAN[DEPAN];
FOR I := DEPAN TO (BELAKANG - 1) DO
Begin
Antrian[i] := antrian[i+1];
End;
Belakang := belakang - 1;
Clear;
End
Else
Begin
Gotoxy(33,16); writeln('antrian
kosong...!');
End;
Tampilkan(belakang);
END; {*procedure hapus*}
{*******************************************************************
* procedure pembukaan program, nama : TARKIMAN
NIM : 10110738. *
*******************************************************************}
Procedure tarkiman;
Var
S,t : string;
I,x : integer;
Begin
S := 'tugas struktur data - program
antrian ( queue )';
for i := 1 to length(s) do
Begin
For x := 1 to 5 do
Begin
Gotoxy(17+i,x+1);write(copy(s,i,1));
Gotoxy(17+i,x);write(' ');
end;
End
T := 'tarkiman ( 10110738 )';
for i := 1 to length(t) do
Begin
Gotoxy(30,10);write(copy(t,1,i));
End;
End;
{*******************************************************************
* Procedure menu program, bingkai tampilan pilihan
menu. *
* Dan
ilustrasi kotak-kotak antrian. *
*******************************************************************}
Procedure
menuprogram;
Begin
Gotoxy(12,2); writeln('8*******************************************************8');
Gotoxy(16,3); writeln('menu program antrian data (
queue )BY SITI HAJAR');
gotoxy(12,4);
writeln('=========================================================');
Gotoxy(12,3);writeln('|');gotoxy(68,3);writeln('|');
Gotoxy(12,4);writeln('|');gotoxy(68,4);writeln('|');
Gotoxy(12,5);writeln('|');gotoxy(68,5);writeln('|');
Gotoxy(12,6);writeln('|');gotoxy(68,6);writeln('|');
Gotoxy(12,7);writeln('|');gotoxy(68,7);writeln('|');
Gotoxy(12,8);writeln('|');gotoxy(68,8);writeln('|');
Gotoxy(12,9);writeln('|');gotoxy(68,9);writeln('|');
Gotoxy(12,10);writeln('|');gotoxy(68,10);writeln('|');
Gotoxy(12,11);writeln('|');gotoxy(68,11);writeln('|');
Gotoxy(13,11);writeln('=======================================================');
Gotoxy(12,12);writeln('|');gotoxy(68,12);writeln('|');
Gotoxy(24,12);writeln('ilustrasi tampilan antrian (
queue )');
gotoxy(12,13);writeln('|');gotoxy(68,13);writeln('|');
Gotoxy(13,13);writeln('=======================================================');
Gotoxy(12,14);writeln('|');gotoxy(68,14);writeln('|');
Gotoxy(12,15);writeln('|');gotoxy(68,15);writeln('|');
Gotoxy(12,16);writeln('|');gotoxy(68,16);writeln('|');
Gotoxy(12,17);writeln('|');gotoxy(68,17);writeln('|');
Gotoxy(12,18);writeln('|');gotoxy(68,18);writeln('|');
Gotoxy(12,19);writeln('|');gotoxy(68,19);writeln('|');
Gotoxy(12,20);writeln('|');gotoxy(68,20);writeln('|');
Gotoxy(12,21);writeln('|');gotoxy(68,21);writeln('|');
Gotoxy(12,22);writeln('|');gotoxy(68,22);writeln('|');
Gotoxy(12,22);writeln('8*******************************************************8');
Gotoxy(20,21);writeln('f i
f o ATAU f c f s');
Gotoxy(20,18);writeln('*************************');
Gotoxy(20,19);writeln('|');gotoxy(24,19);writeln('|');gotoxy(28,19);writeln('|');
Gotoxy(32,19);writeln('|');gotoxy(36,19);writeln('|');gotoxy(40,19);writeln('|');
Gotoxy(44,19);writeln('|');
Gotoxy(20,20);writeln('*************************');
Gotoxy(16,18);writeln('out');gotoxy(47,18);writeln('in');
Gotoxy(16,19);writeln('<==');gotoxy(47,19);writeln('<==');
Gotoxy(25,6);writeln('1. Menambah elemen baru
(enqueue)');
Gotoxy(25,7);writeln('2. Menghapus elemen
(dequeue)');
Gotoxy(25,9);writeln('0. Exit');
Gotoxy(7,24);writeln('silahkan tekan tombol 1 atau 2
pada keyboard anda dan 0 untuk exit');
Gotoxy(29,24);writeln('1');gotoxy(36,24);writeln('2');gotoxy(61,24);writeln('0');
End;
{*********************************************************************
* Procedure pilihan menu, sesuai tombol yang di
tekan pada keyboard *
* 1. Menambahkan elemen antrian ( proses enqueue ) *
* 2. Menghapus elemen antrian ( proses dequeue
) *
* 0. Exit ( mengakhiri program ) *
*********************************************************************}
PROCEDURE MENU( PILIH:CHAR);
Begin
Case pilih of
'1' : begin
Gotoxy(30,16);writeln(' ');
gotoxy(25,6);writeln('1. Menambah elemen baru
(enqueue)');
Tambah_elemen(depan,belakang,elemen);
End;
'2' : begin
Gotoxy(30,16);writeln(' ');
gotoxy(25,7);writeln('2. Menghapus elemen
(dequeue)');
Hapus(depan,belakang);
End;
'0' : begin
Gotoxy(25,9);writeln('0. Exit');
Clrscr;
End;
End;
End;
{*******************************************************************
* Program
utama...................................................*
*******************************************************************}
Begin
Clrscr;
Tarkiman;
Clrscr;
depan := 0;
Belakang :=
0;
Clrscr;
Repeat
Menuprogram;
Pilih:=readkey;
Menu(pilih);
Until
pilih='0'
End.
TAMPILAN OUTPUT
Tidak ada komentar:
Posting Komentar