Anda di halaman 1dari 20

LAPORAN HASIL PRAKTIKUM

STRUKTUR DATA

NAMA

: ALI FAHRUDDIN

NIM

: DBC 113 046

KELAS

:B

MODUL

: II ( QUEUE )

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA

2014
BAB I
TUJUAN DAN LANDASAN TEORI
1.1

Tujuan Praktikum
1. Mahasiswa mampu memahami konsep queue
2. mahasiswa mampu mengimplementasikan queue untuk memecahkan
masalah tertentu

1.2 Landasan Teori


Queue (antrian adalah kumpulan objek data yang tipenya sama, tersusun sebagai
sebuah barisan linear. Elemen pertama disebut sebagai front/head dan elemen
terakhir disebut real/tail. Penambahan data yang dilakukan pada akhir elemen,
sedangkan penghapusan data dilakukan pada elemen pertama. Sifat queue tersebut
dikenal dengan istilah FIFO ( First In First Out ).
Queue dikenal dapat dideklarasikan dengan sebuah record yang mempunyai
elemenelemen sebagi berikut : variabel front untuk menunjuk elemen pertama,
variabel rear untuk menunjuk elemen terakhir, dan sebuah array tabelemen untuk
menyimpan elemen queue. Deklarasi selengkapnya sebagai berikut :
Const
NMAX = ...;
NULL = 0;
Type
tipedata = ....;
queue = record
tabelemen : array[1..NMAX] of tipedata
front,rear : NULL...NMAX;
End;
Berdasarkan sifatnya, maka ada 2 operasi terhadap queue, yaitu :
1. Penambahan data pada elemen akhir queue, disebut Enqueue
2. Penghapusan data pada elemen pertama queue, disebut Dequeue
Proses untuk membuat queue dalam keadaan kosong dapat didefinisikan sebagai
berikut :
procedure Inisialisasi (var Q : queue);

begin
Q.front := NULL;
Q.rear := NULL;
End;
Proses untuk mengetahui status queue dalam keadaan kosong atau tidak dapat
didefinisikan sebagai berikut:
Function EmptyQ (Q :queue) : Boolean;
Begin
Empty := ((Q.front = Null) and (Q.rear=Null));
End;
Pada saat penambahan data apabila mengetahui apakah queue sudah penuh atau
belum, maka perlu diperhitungksn jumlah elemen data pada queue. Sebuah queue
penuh jika Q.rear = NMAX. Namun demikian tidak selamanya kondisi Q.rear =
NMAX menunjukkan bahwa queue telah penuh. Kondisi Q.rear = NMAX akan
menunjukkan queue telah penuh bila selama proses pengoperasian queue belum
pernah ada data yang keluar ( Dequeue ).
Bila telah pernah terjadi operasi Dequeue maka akan terjadi pergeseran penanda
front sebanyak data yang telah keluar. Hal ini terjadi karena operasi Dequeue
dengan array hanya memindahkan index penanda front ke index yang di atasnya.
Dalam hal ini penghapusan elemen di depan mengakibatkan array pada index
awal menjadi kosong dan tidak terpakai. Jika hal ini terjadi maka perlu dilakukan
setup ulang index front ( consolidate ) dengan memindahkan semua data ke
bagian 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.rear 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 Empty(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
if not Empty(Q) then
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
A. Tugas Praktikum
1. Sebuah plasa mempunyai ruang yang hanya bisa diisi sampai 5 mobil saja
pada satu jalur. Mobil yang datang lewat salah satu jalur ( sebut saja A ),
sedang mobil yang keluar lewat jalur lainnya ( sebut saja B ). Jika ada
sebuah mobil yang keluar dan kebetulan berada ditengah, maka mobilmobil lain yang berada didepannya harus dipindahkan dulu, setelah mobil
tersebut keluar maka mobil-mobil yang dipindahkan tadi disusun kembali
seperti semula. Jika mobil yang akan masuk, tetapi jalur parkir sudah
penuh maka ada pesan Parkir penuh!.
Buatlah progam dari kasus diatas.

BAB III
PEMBAHASAN
Queue (antrian) adalah kumpulan objek data yang tipenya sama, tersusun
sebagai sebuah barisan linier. Elemen pertama disebut sebagai front/head dan
elemen terakhir disebut rear/tail. Maka dalam implementasi program dalam
program pascal adalah sebagai berikut:
Pertama kali dalam pembuatan program pascal adalah memberi nama program
disini kita tuliskan program antrian_parkir dengan uses crt.

Untuk konstanta adalah nilai tetap yang tidak bisa di ubahkan dalam soal
maksimal 5 mobil yang dapat masuk maka kita tuliskan MAX=5, dan
sedengkan untuk parkir mobil kosong maka kita tuliskan NULL=0,

Untuk tipe data baru kita membuat type tipedata dengan string, serta
membuat record antrian dengan isi Data bertipe array[1..MAX]of tipedata
nilai MAX disini adalah 5 karena sudah dideklarasikan dalam constanta
diatas, serta rear yang bertipedata integer.

Selanjutnya kita membentuk prosedure inisialisasi dengan parameter Q yang


bertipedata antrian, yang terdiri dari variabel X bertipe integer dengan
Q.rear adalah bernilai 0, serta untuk X yang bernilai 1 sampai MAX atau (5)
maka Q.Data adalah kosong. Karena gunanya adalah hanya untuk memberi
nilai awal antrian kosong.

Kemudian kita membuat function kosong dengan parameter Q:antrian yang


bertipe boolean, didalam function ini terdapat pilihan apakah Q.rear=NULL
(kosong atau masih ada ruang kosong) atau Q.rear<MAX (masukkan sudah
mencapai MAX). Function ini digunakan untuk memeriksa apakah antrian
masih ada ruang kosong atau tidak

Prosedure selanjutnya adalah procedure SreenOut dengan parameter Q


bertipe antrian dan Tukang_parkir bertipe string. Procedure ini digunakan
untuk mencetak tampilan simulasi antrian parkir. Didalam prosedure ini
terdapat variabel X bertipe integer, terdapat beberapa kata string untuk
tampilan output, dan terdapat pemilihan if..then apabila Q.rear=Null maka
data yang dinput adalah kosong, apabila x:=1 to MAX maka akan ditulisakan
Q.data[x] dimana x disini adalah data yang dimasukkan.

Selanjutnya kita membuat function cekQueue dengan parameter Q:antrian


dan Data:tipedata yang bertipe data boolean, function ini digunakan untuk
memeriksa data yang ada pada antrian. Dimana terdapat variabel x bertipe

integer dengan cekQueue adalah false (salah) dan untuk x=1 sampai MAX(5)
maka jika Q.Data[x] adalah Data maka cekQueue tersebut adalah true
(benar).

Selanjutnya

Procedure

Enqueue

dengan

parameter

Q:antrian

dan

Data:tipedata adalah sifat yang terdapat pada queue yang digunakan untuk
penambahan data pada elemen akhir queue. Proscedure ini berisi apabila
kosong(Q) (dimana kosong adalah sebuah function yang telah kita buat tadi
dan Q adalah antrian) maka Q.rear adalah Q.rear+1, dan Q.data[Q.rear]
adalah Data tersebut.

Selanjutnya procedure Dequeue adalah sifat yang terdapat pada queue juga
yaitu untuk melakukan pengulangan sampai menemukan data yang cocok
kemudian menghapusnya. Procedure ini mempunyai parameter Q:antrian dan
Data:tipedata dan memiliki beberapa variabel yang terdiri dari: temp bertipe
tipedata;

x,y,rear_temp bertipe integer; serta hapus bertipe boolean.

Procedure ini memiliki beberapa pemilihan dan pengulangan antara lain:

Apabila cekQueue(Q.Data) maka rear-temp adalah Q.rear

Untuk x=1 sampai rear_temp maka terjadi pengulangan adalah:

Hapus=false (data tidak dihapus)

Apabila Q.data[1] adalah Data maka terdapat pemilihan:


o Q.data[1] adalah kosong
o Q.rear adalah Q.rear-1

o Maka yang terakhir adalah hapus=true (Data dihapus)

Apabila hapus maka data tersebut dihapus terdapat pemilihan:


o Temp adalah Q.data[1]
o Untuk y=1 sampai dengan Q.rear maka yang dilakukan adalah
Q.Data[y] adalah Q.Data[y+1]
o Q.Data[rear_temp] adalah temp
o rear_temp adalah rear_temp-1

Apabila semua pilihan salah maka yang dilakukan adalah:


o temp adalah Q.Data[1]
o Untuk y=1 sampai dengan rear_temp-1 yang dilakukan adalah
Q.Data[y] adalah Q.Data[y+1]
o Q.Data[y+1] adalah temp

ScreenOut(Q,Mengganti posisi) digunakan untuk mengganti


posisi pada hasil output setelah data tersebut dihapus.

Procedure yang terakhir adalah procedure OutputMenu yang digunakan


untuk menampilkan menu pada program ini. Procedure ini mempunyai
parameter Q:antrian dan variabel pil dengan tipedata char. Dimana
didalamnya terdapat variabel inputMobil bertipe string dan x bertipe integer,
pada procedure ini terdapat beberapa pemilihan diantaranya:
1. Mobil masuk
2. Mobil keluar
3. Exit

Untuk program utama apabila kosong(Q) (dimana data masih


belum kosong atau belum penuh) terdapat 2 pilihan yaitu:
1. Mobil masuk
2. Mobil keluar

Apabila tidak kosong atau sudah penuh maka terdapat output


bertuliskan PARKIR PENUH dan pilihan pada nomor 2 saja
yang muncul karena mobil tidak bisa masuk dan hanya bisa keluar
saja pada pilihan yang ke-2, serta terdapat pilihan 3. Exit adalah
digunakan untuk menutup program ini.

Untuk pemilihan kita gunakan pilihan dengan pil sebagai pilihan kita
dengan tipe char pada parameternya. Apabila kita memilih pilihan 1 atau
2 maka terdapat output silahkan masukkan no. Antrian Mobil
Anda... dan terdapat output no. Antrian : dimana disini kita disuruh
untuk menginputkan nomor antrian mobil.
Apabila kita menginputkan pilihan 1 maka akan terjadi Enqueue yaitu
proses dimana akan terjadi penambahan data yaitu no. Antrian mobil dan
muncul output yang bertuliskan Mobil anda telah saya masukkan.
Apabila kita menginputkan pilihan 2 maka akan terjadi Dequeue yaitu
proses diman akan terjadi penghapusan pada data yang cocok saja pada no.
Antrian mobil dan muncul output yang bertuliskan Mobil anda telah saya
keluarkan

Untuk pada program utama ini kita menggunakan variabel Q dengan tipe data
antrian dan pil dengan tipe data char. Program utama kita terdiri dari
procedure inisialisasi(Q) yang telah kita buat diatas, kemudian prosedure
ScreenOut(Q) yang telah kita buat diatas dengan menambahkan output yang
bertuliskan Parkiran Siap Dipakai, Silakan Masukan Mobil... , kemudian
kita memakai perulangan menggunakan repeat..until pada procedure
OutputMenu yang digunakan untuk mengulang statement tersebut dan
apabila pilihan yang dipilih adalah nomor 3 maka pengulangan akan berhenti
dan program akan ditutup. Selanjutnya untuk readkey digunakan untuk
menampilkan output terlebih dahulu sebelum program ditutup, serta fungsi
End. (End menggunakan tanda titik) adalah digunakan menutup program
utama.

Untuk menjalankan program ini dalam pascal maka kita harus run program
dengan menekan CTRL+F9 maka program yang akan tampil adalah:

BAB IV
KESIMPULAN
Queue (antrian) adalah kumpulan objek data yang tipenya sama, tersusun
sebagai sebuah barisan linier. Elemen pertama disebut sebagai front/head dan
elemen terakhir disebut rear/tail. Penambahan data dilakukan pada akhir elemen,
dikenal dengan istilah FIFO (First In First Out).
Terdapat 2 operasi pada Queue yaitu Enqueue dan Dequeue.

Pada operasi Enqueue digunakan untuk penambahan pada elemen


akhir pada queue (pada rear/tail), maksudnya apabila kita ingin
menambahkan data pada queue data tersebut akan masuk pada
rear/tail pada elemen akhir.

Sedangkan pada operasi Dequeue digunakan untuk penghapusan


data pada elemen pertama queue (pada front/head), maksudnya
apabila kita ingin menghapus data pada queue maka data yang
pertama kali dikeluarkan adalah elemen pertama pada queue (pada
front/head) sampai pada data yang ingin kita hapus cocok maka
data tersebut dihapus.

Queue dikenal dapat dideklarasikan dengan sebuah record yang


mempunyai elemenelemen sebagi berikut : variabel front untuk menunjuk
elemen pertama, variabel rear untuk menunjuk elemen terakhir, dan sebuah array
tabelemen untuk menyimpan elemen queue.
Pada antrian kita tidak menentukan batasan seberapa banyak antrian itu
akan berakhir tapi jika kita menggunakan array untuk mengimplementasikan
queue/tumpukan kita harus membatasi jumlah antrian yang dapat masuk. Ini
dikarenakan array memiliki batasan (upperbound) yang menjadi penghambat jika
kita menggunakan antrian.

BAB V
DAFTAR PUSTAKA
Teknik informatika, 2014. Modul Struktur data. Universitas Palangkaraya:
Palangkaraya.
http://yoga-ordinary.blogspot.com/2013/07/program-antrian-queue-padapascal.html

BAB VI
LAMPIRAN
o Coding:

o Output

Tampilan output yang pertama kali muncul, kemudian kita masukkan mobil
dengan menggunakan pilihan (1) kemudian tekan Enter

Setelah itu muncul pesan untuk menginputkan No. Antrian, kita masukkan
No.Antrian 1 kemudian tekan Enter.

Maka dalam data parkir terdapat No.Antrian 1 masuk parkiran, mobil tersebut
masuk dari Tail menuju pada ujung parkiran. Kemudian kita ingin
memasukkan mobil lagi maka inputkan pilihan (1) tekan Enter.

Kemudian kita masukkan beberapa mobil sampai mobil antrian ke-5 dalam
parkiran.

Setelah parkiran penuh diisi oleh 5 mobil maka ada pesan PARKIR
PENUH dan program hanya memiliki dua pilihan mobil keluar atau exit
karena pilihan mobil masuk tidak dapat digunakan karena parkiran penuh.
Dan kita memilih pilihan nomor (2) untuk mobil keluar.

Muncul pesan No.Antrian berapa yang ingin keluar, kita tuliskan 4 tekan
Enter.

Maka mobil dengan No.Antrian 4 keluar, sedangkan mobil-mobil lain masih


tetap berada di parkiran dan merapat, mobil No.Antrian 5 maju kedepan agar
apabila ada mobil lain yang ingin masuk dapat dimasukkan.