NAMA : SITI HAJAR NIM : 1405020040 UNIT : B NO.HP : 0852 – 2000 – 3786
SOAL Berikan contoh ilustrasi dari kasus antrian berikut : Diketahui suatu antrian / queue dengan max = 6 Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail . Kemudian lakukan Dequeue 2 elemen dari antrian, maka dimanakah posisi Head dan Tail ? 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. MAX = 6 HEAD = -1 TAIL = -1
ILUSTRASI KONDISI KASUS KEDUA TENTANG 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 .
GAMBAR ILUSTRASI ENQUEUE MAX = 6 1 2 3 4 HEAD = 0 TAIL = 3
ILUSTRASI KONDISI KASUS KETIGA TENTANG 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 ?
GAMBAR ILUSTRASI DEQUEUE Kondisi ilustrasi sebelum di DEQUEUE 1 2 3 4 HEAD = 0 TAIL = 3
GAMBAR ILUSTRASI DEQUEUE Ilustrasi sesudah di DEQUEUE sebelum terjadi pergeseran 3 4 HEAD = 0 TAIL = 3
GAMBAR ILUSTRASI DEQUEUE Kondisi ilustrasi DEQUEUE setelah terjadi pergeseran posisi yang maju 1 posisi ke depan HEAD = 0 3 4 POSISI HEAD TAIL = 1 POSISI TAIL
ILUSTRASI KONDISI KASUS KEEMPAT TENTANG 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.
GAMBAR ILUSTRASI IsEMPTY 3 4 Kondisi IsEmpty Masih Ada Yang Kosong karena nilai TAIL tidak bernilai -1
ILUSTRASI KONDISI KASUS TENTANG 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.
GAMBAR ILUSTRASI IsFull 3 4 Kondisi IsFull = Belum Penuh Masih ada tempat yang belum terisi karena setelah dilakukan pengecekan, nilai TAIL belum mencapai max >= -1
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 Gotoxy(18 + 4 * i, 19); Write(antrian[i]); End; END; {*procedure TAMPILAKAN*}
Procedure clear; Var I : integer; Begin For i := 1 to 10 do 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; Penuh := false; If (belakang = max_queue) then Penuh := true;
{******************************************************************* * 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 GOTOXY(32,16); WRITE('ANTRIAN SUDAH PENUH'); END
Else Begin Gotoxy(49,15);writeln(' '); gotoxy(31,15);write('isikan elemennya : '); readln(elemen); if (kosong(belakang)) then Depan := 1; Belakang := 1; Antrian[belakang] := elemen; End
Else Begin Belakang := belakang + 1; Antrian[belakang] := elemen; End; Tampilkan(belakang); 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 ELEMEN := ANTRIAN[DEPAN]; FOR I := DEPAN TO (BELAKANG - 1) DO
Begin Antrian[i] := antrian[i+1]; End; Belakang := belakang - 1; Clear; End Else Gotoxy(33,16); writeln('antrian kosong...!'); 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 For x := 1 to 5 do 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
Gotoxy(30,10);write(copy(t,1,i)); 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(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; {******************************************************************* * Program utama...................................................* *******************************************************************}
Begin Clrscr; Tarkiman; depan := 0; Belakang := 0; Repeat Menuprogram; Pilih:=readkey; Menu(pilih); Until pilih='0' End.
TAMPILAN OUTPUT PROGRAM KONDISI KASUS PERTAMA HEAD = -1 POSISI HEAD MAX = 6 TAIL = -1 POSISI TAIL
TAMPILAN OUTPUT PROGRAM KONDISI KASUS KEDUA ( ENQUEUE ) HEAD = 0 POSISI HEAD TAIL = 3 POSISI TAIL
TAMPILAN OUTPUT PROGRAM KONDISI KASUS KETIGA ( DEQUEUE ) HEAD = 0 POSISI HEAD TAIL = 1 POSISI TAIL
TAMPILAN OUTPUT PROGRAM KONDISI KASUS UNTUK ISFULL & ISEMPTY Kondisi IsFull belum penuh terisi Kondisi IsEmpty masih ada yang kosong belum terisi
THANK YOU SEE YOU NEXT TIME ….