I. JUDUL PRAKTIKUM : ANTRIAN (`QUEUE)
II. TUJUAN PRAKTIKUM :
1. Mengetahui apa pengertian dari antrian
2. Mengetahui prinsip dari pengerjaan antrian
3. Mengetahui operasi-operasi dasar pada antrian
4. Mengetahui pengertian front dan tail pada antrian
5. Mengetahui bagaimana cara membuat procedure tambah,procedure hapus dan procedure tulis pada antrian
6. Dapat membuat program sederhana menggunakan antrian
III. DASAR TEORI
Antrian Secara umum adalah daftar elemen yang sedang menunggu proses. Di dalam routing LAN dan WAN, adalah merupakan paket yang sedang dalam antrian untuk dikirimkan ke interface router.
Queue / Antrian adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain (disebut dengan sisi depan atau front).
Antrian menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga membentuk antrian. 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. Oleh sebab itu kita akan mengimplementasikan antrian ini dengan menggunakan link list. Dengan menggunakan link list tepatnya Single Link List maka elemen dapat dimasukkan secara tidak terbatas. Kita menggunakan Header Single Link List yang seperti Stack pada posisi Header dapat kita pergunakan untuk menyimpan informasi mengenai banyaknya elemen dalam Queue.
Notasi Pada Queue
Notasi yang dapat digunakan didalam Queue Q adalah :
1. FRONT(Q) menunjukkan posisi terdepan dari suatu antrian.
Contoh jika kita mempunyai antrian Q = [A,B,C,D,E] maka FRONT(Q) = A.
2. REAR(Q) menunjukkan posisi terakhir dari suatu antrian.
Contoh jika kita mempunyai antrian Q = [A,B,C,D,E] maka REAR(Q) = E.
3. NOEL(Q) menunjukkan jumlah elemen di dalam Antrean Q.
Contoh jika kita mempunyai antrian Q = [A,B,C,D,E] maka NOEL(Q) = 5.
Deklarasi Queue Dalam Link List
Pendeklarasian Queue di dalam link list sama seperti kita mendeklarasikan link list. Menggunakan pointer sebagai variabel yang menunjuk ke elemen antrian selanjutnya.
Deklarasi Queue menggunakan Linked List di dalam Pascal :
Type
Queue = ^Simpul
Simpul = Record
Info : Char;
Next : Queue;
End;
Var
Head, Tail : Queue;
Max : Byte;
Link list yang kita gunakan ialah jenis Header Single Link List. Kita menggunakan jenis link list ini karena pada bagian header dapat kita manfaatkan untuk menyimpan informasi mengenai banyaknya elemen dalam Antrian (NOEL(Q)).
Operasi Dasar Pada Queue
Ada 4 operasi dasar yang dapat dilakukan pada struktur data antrian, yaitu:
1. CREATE(Q)
CREATE(Q) adalah suatu operator yang digunakan untuk membentuk dan menunjukkan suatu antrian hampa. Contoh :
NOEL(CREATE(Q)) = 0
FRONT(CREATE(Q)) = Tidak Terdefinisi
REAR(CREATE(Q)) = Tidak Terdefinisi
Berikut ini merupakan procedure CREATE simpul pada Pascal :
Procedure CREATE(Var Head, Tail : Queue);
Begin
New(Head);
Head^.Info := 0;
Head^.Next := Head;
Tail := Head;
End;
2. ISEMPTY(Q)
ISEMPTY(Q) adalah operator yang menentukan apakah antrian Q hampa atau tidak. ISEMPTY(Q) di terapkan di dalam pascal menjadi sebuah function yang bertipe boolean sehingga hasil dari function ini akan bernilai True jika antrian dalam keadaan kosong / hampa (NOEL(Q) = 0) dan akan bernilai False jika antrian dalam keadaan terisi / tidak kosong (NOEL(Q) > 0).
Contoh :
ISEMPTY(CREATE(Q)) = True
Berikut ini merupakan procedure ISEMPTY simpul pada Pascal :
Function ISEMPTY(Head : Queue);
Begin
ISEMPTY := (Head^.Next = Head);
End;
3. INSERT(E,Q)
INSERT(E,Q) adalah operator yang digunakan untuk memasukkan elemen E pada antrian Q di posisi depan dari antrian. Hasil dari operator ini adalah antrian yang lebih panjang.
Berikut ini merupakan procedure INSERT simpul pada Pascal :
Procedure INSERT(Elemen : Byte; Var Head, Tail : Queue);
Var Temp : Queue;
Begin
New(Temp);
Temp^.Info := Elemen;
Temp^.Next := Head;
Tail := Temp;
Inc(Head^.Info);
End;
4. REMOVE(Q)
REMOVE(Q) adalah operator yang menghapus elemen bagian depan dari antrian Q. Hasilnya merupakan antrian yang lebih pendek. Pada setiap operasi ini, harga dari NOEL(Q) berkurang satu, dan elemen kedua dari Q menjadi elemen terdepan. Jika NOEL(Q) = 0, maka REMOVE(Q) memberikan suatu kondisi erroe, yakni suatau UNDERFLOW. Contoh :
REMOVE(CREATE(Q)) = UNDERFLOW.
Berikut ini merupakan procedure REMOVE simpul pada Pascal :
Procedure REMOVE(Var Head : Queue);
Var Temp : Queue;
Begin
If Not (ISEMPTY(Head)) Then
Begin
Temp := Head^.Next;
Head^.Next := Temp^.Next;
Dispose(Temp);
Dec(Head^.Info);
End;
End;
Untuk memahami pengertian antrian sekaligus penerapan operator-operator queue dan notasi-notasinya perhatikan ilustrasi berikut :
CREATE(Q) = Membuat Antrian Baru
ISEMPTY(Q) = Apakah Antrian dalam keadaan kosong ?
REMOVE(Q) = Mengeluarkan elemen terdepan dari dalam antrian.
INSERT(1,Q) = Memasukkan elemen 1 kedalam antrian.
INSERT(2,Q) = Memasukkan elemen 2 kedalam antrian.
INSERT(3,Q) = Memasukkan elemen 3 kedalam antrian.
REMOVE(Q) = Mengeluarkan elemen terdepan dari dalam antrian.
INSERT(4,Q) = Memasukkan elemen 3 kedalam antrian.
ISEMPTY(Q) = Apakah Antrian dalam keadaan kosong ?
Untuk operasi-operasi selanjutnya menggunakan prinsip yang sama seperti ilustrasi diatas ini.
Jenis-jenis Antrian
Selain antrian yang telah kita bahas di atas, masih ada dua tipe antrian lagi yang penggunaannya juga banyak di dalam kehidupan sehari hari atau dalam dunia komputer itu sendiri, diantaranya adalah :
1. DEQUE
DEQUE adalah antrian dimana elemennya bisa masuk dan keluar lewat kedua ujungnya (berbeda dengan queue yang hany bisa masuk lewat ujung belakang dan keluar lewat ujung depan). Biasanya DEQUE disajikan dengan menggunakan Double link list yang memiliki dua buah pointer yang menunjuk ke posisi sebelumnya dan sesudahnya. Gambar 5.1 menunjukkan struktur umum dari sebuah DEQUE.
DEQUE juga mempunyai dua jenis variasi yaitu :
a. Deque input terbatas : suatu deque yang membatasi pemasukkan elemen hanya pada satu ujung dari list, sementara penghapusan elemen boleh dilakukan pada kedua ujung list.
b. Deque output terbatas : merupakan kebalikan dari deque input terbatas yaitu suatu deque yang membatasi penghapusan elemen hanya pada satu ujung dari list, sementara pemasukkan elemen boleh dilakukan pada kedua ujung list.
2. ANTRIAN BERPRIORITAS
Antrian berprioritas adalah suatu queue yang setiap elemennya telah diberikan sebuah prioritas, dan urutan proses penghapusan elemen adalah berdasarkan aturan berikut :
a. Elemen yang prioritasnya lebih tinggi, diproses lebih dahulu dibandingkan dengan elemen yang prioritas lebih rendah.
b. Dua elemen dengan prioritas yang sama, diproses sesuai dengan urutan mereka sewaktu dimasukkan ke dalam priority queue. Salah satu contoh antrian berprioritas ini adalah sistem berbagi waktu (time sharing system), dimana program yang mempunyai prioritas tinggi akan dikerjakan lebih dahulu dan program-program yang berprioritas sama akan membentuk antrian yang biasa.
Salag satu contoh program antrian yaitu:
program animation_queue;
uses wincrt;
const max_elemen =10;
type antri = array [1..max_elemen] of char;
var
antrian : antri;
q : antri;
d : char;
isi : antri;
depan, belakang, pilih : integer;
elemen : char;
procedure kotak;
var
i: integer;
begin
gotoxy(20,15);
for i:= 1 to max_elemen * 4 + 1 do
write('-');
gotoxy(20,16);
for i:= 1 to max_elemen do
write('| ');
writeln('|');
gotoxy(20,17);
for i:= 1 to max_elemen * 4 +1 do
write('-');
gotoxy(8,16);writeln('<---- Out');
gotoxy(22+max_elemen*4+1,16);
writeln('<---- In');
end;
procedure letakkan(x: char; r:integer);
begin
gotoxy(18+4*r,16);
write(x);
end;
function kosong(q: antri): boolean;
begin
kosong:=(depan=belakang)
end;
procedure tambah(var antrian: antri;x:char);
begin
if belakang=max_elemen then belakang:=1
else belakang:=belakang+1;
if not (kosong(antrian)) then
begin
antrian[belakang]:=x;
letakkan(x,belakang);
end
else
begin
gotoxy(40,9);
write('OVERFLOW');
repeat
{menunggu sampai ada tombol ditekan}
until keypressed;
gotoxy(40,9);
write(' ':30);
belakang:=belakang-1;
if belakang=0 then
belakang:=max_elemen
end
end;
function qkosong(q:antri):boolean;
begin
qkosong:= (depan = belakang);
end;
procedure Dequeue(var q:antri; ed:char);
begin
if not(qkosong(q)) then
begin
if depan = max_elemen then depan :=1
else depan := depan+1;
ed := isi[depan];
end;
end;
procedure tampil(q: antri);
var i,awal : integer;
begin
CLRSCR;
writeln('Queue to Data');
if depan = max_elemen then awal :=1
else awal := depan +1;
for i:=awal to belakang do
writeln(i:3,' ':5,isi[i],' ');
READLN;
end;
function hapus(var antrian: antri):char;
begin
if depan=max_elemen the
depan:=1
else
begin
depan:=depan+1;
hapus:=antrian[depan]
end
end;
{program utama}
begin
clrscr;
kotak;
depan:=0;
belakang:=0;
repeat
for pilih:=5 to 9 do
begin
gotoxy(40,pilih);write(' ':39);
end;
gotoxy(1,1);
writeln(' MENU ');
writeln('===================');
writeln;
writeln(' 1. Add a New Element (Enqueue)');
writeln(' 2. Vanish An Element (Dequeue) ');
writeln(' 3. FINISH and EXIT');
writeln;writeln;
writeln(' YOURS CHOICE:');
writeln;
write ('-------THANK YOU FOR USING THIS PROGRAM---------');
writeln;
write (' THE PROGRAM CREATED BY ');
writeln;
write (' RAHMAD KURNIAWAN ');
writeln;
write (' http://rahmad.co.nr ');
writeln;
repeat
gotoxy(22,9);writeln(' ');
gotoxy(22,9);readln(pilih);
until (pilih>=1) and(pilih<=3);
case pilih of
1 : begin
gotoxy(40,4);
writeln ('--------------');
gotoxy(40,5);
writeln('ADD AN ELEMENT');
gotoxy(40,6);
writeln('---------------');
gotoxy(40,8);
write('ENTER AN ELEMENT:');
readln(elemen);
tambah(antrian,elemen);
end;
2 : begin
if not(kosong(antrian)) then
begin
Dequeue(q,d);
tampil(q);
end
else
begin
gotoxy (30,9);
writeln ('UNDER FLOW');
elemen:=readkey;
gotoxy (30,9);write (' ':30);
end
end
end;
until pilih=3
end.
DAFTAR PUSTAKA
http://Google.com/antrian.
Akses : Selasa , 25 Oktober 2010 21: 19.
http://google.com/ Modul Praktikum Struktur Data – IT045329 .
Akses : Selasa ,25 oktober 2010. 13.00.
http://wikipedia.co.id/Antrian pada pascal.
Akses : Senin, 11 Oktober 2010 21: 15.
Tim Asisten. 2010. Modul Praktikum Pemrograman Komputer II. Inderalaya : Mitra Kharisma.
Terkadang orang takut bermimpi terlalu jauh karena takut terjatuh,padahal mimpi tak mengharuskan kita menggapai semua apa yang kita inginkan,minimal kita telah berusaha dari hal yang kecil untuk mewujudkan mimpi itu dan hasilnya biarlah Tuhan yang mengatur. Tetap semangat kawan,selalu ada jalan selama masih ada kemauan.
Selasa, 26 April 2011
Maafkan Aku
Oleh : Musthopa Kemal Ibrahim
Maafkan aku yang tak pernah paham mau mu
Maafkan aku yang tak pernah tahu ingin mu
Maafkan aku yang tak pernah mengerti maksud mu
Maafkan aku yang tak pernah hiraukan mu
Maafkan aku yang selalu acuh pada mu
Maafkan aku yang tak tanggap akan cinta mu
Dan Maafkan aku yang tak pernah inginkan mu
Sebenarnya yang ku inginkan hanyalah keindahan
Tanpa peduli akan arti dari sebuah ketulusan
Yang ku tahu dulu ku tak inginkan mu
Dan yang ku tahu sekarang aku begitu menyesal karena itu
Sebuah pengorbanan yang kau berikan tapi tak pernah ku hiraukan
Jujur aku menyesal
Menyesal karena kelakuan ku
Menyesal karena ego ku
Menyesal karena Keangkuhan ku
Dan aku menyesal karena kemunafikan ku
Tapi itu terlambat bagi ku
Yang ada hanyalah rintihan yang tak akan pernah kau dengar
Aku sadar mungkin aku layak mendapatkan nya
Karena sifat ku aku begitu
Yang ku ingin sekarang ...
Tetaplah kau terbang bersama sayap mu
Arungi samudera bersama cinta mu
Dan tinggalkan aku yang merintih dan mungkin tak berarti untukmu
Dan aku mohon jangan pernah hiraukan aku.
Maafkan aku yang tak pernah paham mau mu
Maafkan aku yang tak pernah tahu ingin mu
Maafkan aku yang tak pernah mengerti maksud mu
Maafkan aku yang tak pernah hiraukan mu
Maafkan aku yang selalu acuh pada mu
Maafkan aku yang tak tanggap akan cinta mu
Dan Maafkan aku yang tak pernah inginkan mu
Sebenarnya yang ku inginkan hanyalah keindahan
Tanpa peduli akan arti dari sebuah ketulusan
Yang ku tahu dulu ku tak inginkan mu
Dan yang ku tahu sekarang aku begitu menyesal karena itu
Sebuah pengorbanan yang kau berikan tapi tak pernah ku hiraukan
Jujur aku menyesal
Menyesal karena kelakuan ku
Menyesal karena ego ku
Menyesal karena Keangkuhan ku
Dan aku menyesal karena kemunafikan ku
Tapi itu terlambat bagi ku
Yang ada hanyalah rintihan yang tak akan pernah kau dengar
Aku sadar mungkin aku layak mendapatkan nya
Karena sifat ku aku begitu
Yang ku ingin sekarang ...
Tetaplah kau terbang bersama sayap mu
Arungi samudera bersama cinta mu
Dan tinggalkan aku yang merintih dan mungkin tak berarti untukmu
Dan aku mohon jangan pernah hiraukan aku.
Langganan:
Postingan (Atom)