Struktur Data Modul 2 (Queue)
Struktur Data Modul 2 (Queue)
STRUKTUR DATA
Nama
: YOPI LALA
NIM
Kelas
: G
Modul
: II (QUEUE)
MODUL II
QUEUE
A. Tujuan Praktikum
1. Mahasiswa mampu memahami konsep queue.
2. Mahasiswa mampu mengimplementasikan queue untuk memecahkan masalah
tertentu.
B. Landasan Teori
Queue (antrian) adalah kumpulan objek data yang tipenya sama, tersusun
sebagai sebuah barisan linier. Elemen pertama di sebut sebagi Front/head dan
elemen terakhir disebut rear/tail. Penambahan data di lakukan pada akhir elemen,
sedangkan penghapusan elemen dilakukan pada elemen pertama. Sifat queue
tersebut di kenal dengan istilah FIFO (First In First Out).
pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk akan
keluar terakhir. Berikut ini adalah gambaran struktur data queue.
Jika ada elemen baru yang akan masuk pada gambar (a), maka ia akan
diletak kan disebelah kanan F (gambar (b)). Jika ada elemen yang akan dihapus,
maka A akan dihapus lebih dulu (gambar (c)).
adany
aoverflow,
maka
penambahan
elemenbaru
yang
Pada gambar (a) posisi depan = 1 dan belakang = 0. Pada gambar (b)
keadaan setelah penambahan empat buah elemen dimana posisi depan = 1 dan
Pada gambar (a) posisi depan = 1 dan belakang = 0. Pada gambar (b)
keadaan setelah penambahan empat buah elemen di mana posisi depan = 1 dan
belakang = 4. Padagambar(c) keadaan setelah penghapusan dua buah elemen
dimana posisi depan = 1 dan belakang= 2. Pada gambar (d) keadaan setelah
penambahan dua buah elemen di mana posisi depan =1 dan belakang = 4.Cara
penggeseran elemen tidak efisien untuk larik berukuran besar.Oleh karena itu
dilakukan dengan larik yang menyimpan elemen antrian sebagai larik memutar
(circular).
b. Dengan Menggunakan Circular Array
Salah satu variasi array adalah array melingkar (circular array), artinya
array dapat diakses mulai dari sembarang indeks (indeksawal) kearah indeks
4. Front telah mencapai elemen terakhir array, maka akan menuju elemen
pertama jika antrian masih berisi elemen.
Keunggulan representasi circular adalah seluruh kapasitas antrian bisa terpakai
seleruhnya.Berdasarkan ilustrasi sebelumnya dapat disusun prosedur untuk
menambah dan menghapus elemen antrian sebagai berikut ini :
Constmax_elemen = 5;
Type antri = array [1..max_elemen] of char;
Varantrian :antri;
depan, belakang : integer;
Nilai awal untuk depan dan belakang masing-masing 0.
Depan := 0; Belakang := 0;
Proses dequeue hanya bisa dilakukan jika queue dalam keadaan tidak kosong.Ada
beberapa kondisi yang harus diperhatikan ketika dequeue elemen queue yaitu :
Kondisi ketika posisi depan sama dengan posisi belakang (queue hanya
memiliki 1elemen) maka nilai depan dan belakang di isi dengan 0 (queue
kosong).
Jika posisi depan sama dengan posisi maks_queue maka posisi depan
berpindah ke 1.
lakukan setup ulang index front (consolidate) dengan memindahkan semua data
kebagian awal dari tabel.
Procedure consolidate (var Q : queue);
{IS : Q.rear = NMAX dan Q.front <>1}
{FS : Q.front = 1 dan Q.rear = banyaknya data }
Var
I, j : integer ;
Begin
j:=1;
for i:= Q.front to Q.reae do
begin
Q.tabelemen [j] := Q.tabelemen [i];
j := j+1;
end;
Q.front := 1;
Q.rear :=j;
End;
Procedure Enqueue (var Q : queue; data : tipedata);
Begin
If emptyQ(Q) then
Q.front := 1;
If Q.rear <> NMAX then
Begin
Q.rear := Q.rear+1;
Q.tabelemen [Q.rear] :=data;
End;
Else
If Q.front <> 1 then
Begin
Consolidate (Q);
Q.rear := Q.rear+1;
Q.tabelemen[Q.rear] := data;
End;
End;
Procedure Dequeue (Var Q : queue; var data : tipedata);
Begin
Data := Q.tabelemen [Q.front];
Q.front := Q.front+1;
If (Q.front > Q.rear) then
Begin
Q.front := NULL;
Q.rear := NULL;
End;
Else
data := . . . . ;
End;
BAB II
LANGKAH KERJA
1. Sebuah plaza mempunyai ruang parkir yang hanya bisa diisi sampai 5
mobil saja pada satu jalur. Mobil yang datang lewat salah satu jalur (sebut
saja jalur A), sedangkan mobil yang akan keluar lewat jalur lainya (sebut
saja B). Jika ada sebuah mobil yang akan keluar dan kebetulan berada di
tengah, maka mobil- mobil lain yang berada di depannya harus di
pindahkan dulu, setelah mobil tersebut keluar maka mobil-mobil yang di
pindahkan tadi disusun kembali seperti semula. Jika mobil yang akan
masuk, tetapi jalur parker sudah penuh maka ada pesan Parkir penuh!.
Buatlah program dari kasus di atas.
Coding Program :
program Antrian;
uses crt;
const
nmax = 5;
null = 0;
type
tipedata = string;
queue
= record
tabelemen:array[1..nmax] of tipedata;
front,rear:null..nmax;
end;
var a,b,c,i,jum : integer;
antri
mobil
: queue;
: tipedata;
q.rear:=null;
end;
function emptyQ (q:queue):boolean;
begin
emptyQ:=((q.front=null) and (q.rear=null));
end;
procedure consolidate(var q:queue);
var
i,j:integer;
begin
j:=1;
for i:=q.front to q.rear do
begin
q.tabelemen[j]:=q.tabelemen[1];
j:=j+1;
end;
q.front:=1;
q.rear:=j;
end;
procedure enqueue (var q:queue;data:tipedata);
begin
if emptyQ(q) then
q.front:=1;
if q.rear <> nmax then
begin
q.rear:=q.rear+1;
q.tabelemen[q.rear]:=data;
end
else
Isi Parkiran :
]');
writeln('[=============================================]');
for jum:=q.front to q.rear do
write(jum,' : ',q.tabelemen[jum],' => ');
writeln;
end
else
writeln('Parkiran Kosong');
writeln;
end;
procedure urut;
var p:char;
begin
for b:=antri.front to antri.rear do write(antri.tabelemen[b],' => ');
writeln;
writeln('Mobil yang keluar : ',antri.tabelemen[antri.front]);
write('Status (Y/T) : ');readln(p);
writeln('=========================');
if (p='Y') or (p='y') then
begin
dequeue(antri,mobil);
consolidate(antri);
antri.rear:=antri.rear-1;
a:=a-1;
if a=0 then writeln('Antrian Habis.....!!!')
else urut;
end
else
begin
consolidate(antri);
antri.tabelemen[antri.rear]:=antri.tabelemen[antri.front];
dequeue(antri,mobil);
consolidate(antri);
antri.rear:=antri.rear-1;
urut;
end;
end;
procedure MenuUtama;
var pilih: integer;
p: char;
begin
repeat
clrscr;
writeln('[=============================================]');
writeln('[
MENU UTAMA
]');
writeln('[=============================================]');
writeln('[
1. Mobil Masuk
]');
writeln('[
2. Keluarkan Mobil
]');
writeln('[
3. Keluar Program
]');
writeln('[=============================================]');
write('Pilih Menu(1/2/3) : ');readln(pilih);
case pilih of
1: begin
tampilAntri(antri);
write('Parkirkan Mobil : '); readln(mobil);
if jum>4 then
writeln('Parkir Penuh')
else
begin
jum:=0;
antri.tabelemen[jum]:=mobil;
enqueue(antri,mobil);
jum:=jum+1;
end;
end;
2: begin
tampilAntri(antri);
gotoxy(1,14);
writeln('Mobil terdepan akan dikeluarkan!');
writeln;
dequeue(antri,mobil);
tampilAntri(antri);
gotoxy(1,16); clreol;
gotoxy(1,14); clreol;
end;
3: halt;
end;
writeln;writeln;
gotoxy(1,22);
write('Kembali ke Menu(Y/T) : ');readln(p);
until upcase (p) <> 'Y';
end;
begin
a:=5;
inisialisasi(antri);
MenuUtama;
readkey;
end.
BAB III
PEMBAHASAN
program Antrian;
uses crt;
const
nmax = 5;
null = 0;
type
tipedata = string;
queue = record
tabelemen:array[1..nmax] of tipedata;
front,rear:null..nmax;
end;
var a,b,c,i,jum : integer;
antri
mobil
: queue;
: tipedata;
Const berfungsi untuk memeberi nilai tetap pada pascal, pada coding di
atas nilai const nmax di beri 5 dan nilai constanta null di beri 0.
Type berfungsi untuk mendeklarasikan type data pada pascal, pada
program di atas tipedata di beri string artinya tipedata tersebut hanya menampung
data yang berupa kata dan queue di beri tipe record ini berfungsi untuk merecord
semua data yang berhubungan dengan queue.
procedure inisialisasi (var q:queue);
begin
q.front:=0;
q.rear:=null;
end;
]]]]]
Procedur inisialisasi berfungsi untuk mendefinisikan bahwa keadaan
masih kosong pada program.
function emptyQ (q:queue):boolean;
begin
emptyQ:=((q.front=null) and (q.rear=null));
end;
else
consolidate(q);
q.rear:=q.rear+1;
q.tabelemen[q.rear]:=data;
end;
end;
procedure tampilAntri(q:queue);
begin Procedure enqueue berfungsi untuk menambah atau menyisipkan
antrian,
di emptyQ(q)
mana antrian
if not
thenakan di tambahkan apa bila function empty terpenuhi,
yaitubegin
q.front dan q.rear sama dengan null.
writeln;dequeue(var q:queue;var data:tipedata);
procedure
writeln('[=============================================]');
begin
Isi Parkiran :
]');
ifwriteln('[
not emptyQ(q) then
writeln('[=============================================]');
begin
for
jum:=q.front to q.rear do
data:=q.tabelemen[q.front];
write(jum,' : ',q.tabelemen[jum],' => ');
q.front:=q.front+1;
writeln;
end;
end
if (q.front>q.rear) then
else
begin
writeln('Parkiran
q.front:=null; Kosong');
writeln;
q.rear:=null;
end;end;
procedure
urut;
end;
var p:char;
begin
forProcedure
b:=antri.front
to antri.rear
do write(antri.tabelemen[b],'
'); pertama di
dequeue
berfungsi
untuk menghapus data =>
yang
masukan,
hal ini terjadi karena prinsip antrian atau queue bersifat FIFO ( FIRST
writeln;
IN FIRST OUT) artinya data yang pertama masuk itu yang pertama kali di
writeln('Mobil yang keluar : ',antri.tabelemen[antri.front]);
keluarkan, hal ini lah yang mebedakan antrian dengan tumpukan di mana
write('Status
(Y/T)
: ');readln(p);
tumpukan
data yang
terakhir
masuk itu yang akan di keluarkan pertama kali.
writeln('=========================');
if (p='Y') or (p='y') then
begin
dequeue(antri,mobil);
consolidate(antri);
antri.rear:=antri.rear-1;
a:=a-1;
if a=0 then writeln('Antrian Habis.....!!!')
else urut;
end
else
begin
consolidate(antri);
antri.tabelemen[antri.rear]:=antri.tabelemen[antri.front];
dequeue(antri,mobil);
consolidate(antri);
antri.rear:=antri.rear-1;
urut;
end;
end;
Pada program simulasi parkir di atas jika kita memilih menu 1, maka kita
di suruh memasukan sebuah mobil di mana mobil yang kita masukan nanti tidak
lebih dari 5 mobil, jika lebih dari 5 mobil maka program akan memberitahukan
kepada kita bahwa parkiran sudah penuh dan apabila kita memilih menu 2 maka
program akan mengeluarkan mobil yang paling depan atau yang paling pertama
masuk akan di keluarkan terlebih dahulu.
BAB IV
KESIMPULAN
disebut front/head.
Queue bersifat FIFO (First In, First Out) artinya di mana data yang
duluan masuk itu yang terlebih dahulu keluar
BAB V
DAFTAR PUSTAKA
BAB VI
LAMPIRAN
OUTPUT :