MODUL 8
FIFO (First In First Out)
FIFO adalah suatu metoda pembuatan Linked List dimana data yang masuk paling awal adalah data yang keluar paling awal juga. Hal ini dapat dianalogikan (dalam kehidupan sehari-hari) misalkan saat sekelompok orang yang datang (ENQUEUE) mengantri hendak membeli tiket di loket.
Jika Linked List dibuat dengan metode FIFO, maka terjadi penambahan/Insert simpul di depan.
Procedure INSERT(elemen:TipeData); Var Now:Point; Begin New(Now); If head = nil then Head:=now else Tail^.next:=now; Tail:=Now; Tail^.next:=nil; Now^.isi:=elemen; End;
PROCEDURE INSERT
Head
Penggalan procedure INSERT untuk FIFO
{head mula-mula selalu diidentifikasikan sebagai nil}
Now Head Tail
Now
Head Tail
Now
Head Tail
Head Tail Now
Head Now Tail
Head Now Tail
Head Now Tail
Procedure dan Function Linked List Lainnya
Selain procedure insert di atas, pada linked list juhga terdapat procedure serta function lainnya.
Di bawah ini diberikan procedure-procedure serta function umum dalam aplikasi Linked List.
v Create : Membuat sebuah linked list yang baru dan masih kososng. (ket: procedure ini wajib dilakukan sebelum menggunakan linked list)
Head Tail
v Empty : Function untuk menentukan apakah linked list kosong atau tidak.
Function Empty : Boolean; Begin If head = nil then Empty:= true else empty:= false; end;
v Find First : Mencari elemen pertama dari linked list
Head Now Tail
v Find Next : Mencari elemen sesudah elemen yang ditunjuk now.
Procedure Find_Next; Begin If Now^.next <> nil then Now:= Now^.next; End;
Head Now Tail
(ket: gambar lanjutan dari sebelumnya)
v Retrieve : Mengambil elemen yang ditunjuk oleh now. Elemen tersebut lalu ditampung pada suatu variabel (di bawah dicontohkan variabel r).
Procedure Retrieve(var r: TipeData ); Begin R:= Now^.isi; End;
v Update : Mengubah elemen yang ditunjuk oleh now dengan isi dari suatu variabel (di bawah dicontohkan variabel u).
Head Now Tail
v Delete Now : Menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list(head), maka head akan berpindah ke elemen berikut.
Procedure DeleteNow; Var x : point; Begin If now<>head then Begin x:=head; while x^.next<>now do x:=x^.next; x^.next:=now^.next; end else head:= head^.next; dispose(Now); Now:= head; End;
Head x Now Tail
Head x Now Tail
v Delete Head : Menghapus elemen yang ditunjuj head. Head berpindah ke elemen sesudahnya.
Procedure DeleteHead; Begin If head<>nil then Begin Now:=head; Head:=Head^.next; Dispose(Now); Now:=Head; End; End;
Now Head Tail
Head Now Tail
v Clear : Untuk menghapus linked list yang sudah ada.wajib dilakukan bila ingin mengakhiri program yang menggunakan linked list. Jika tidak data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.
Procedure Clear; Begin While head <> nil do Begin Now:=head; Head:=head^.next; Dispose(Now); End; End;
Latihan Soal beserta jawaban (Listing Program) dan penjelasan
Buatlah sebuah program untuk mendeteksi password/ kata sandi. Gunakan metode single linked list. Jika passwordnya benar, program akan selesai, jika salah maka user akan diminta memasukkan password kembali. (passw.pas)
Enter Your Password:
Jawaban :
Uses crt;
Type
Point = ^Rec;
Rec = record
Isi : char;
Next : point;
End;
Const
Password = ‘pascal’; {password yang harus dimasukkan}
Var
i : byte;
Tekan : char;
Passwd : Boolean;
Head, Tail, Now : Point;
Procedure Create;
Begin
Head:=nil;
Tail:=nil;
End;
Procedure Push(isi:char);
Var Now:point;
Begin
New(now); {membuat simpul baru}
If Head=Nil then {mendeteksi simpul awal}
Begin
Head:=Now;
Tail:=Head;
end else
begin {menyambung simpul yang baru pada simpul yang sudah ada}
Tail^.next:=Now;
Tail:=Tail^.Next;
end;
Now^.isi:=isi; {mengisi simpul yang baru}
Now^.next:=Nil;
end;
Function Check:Boolean; {function untuk mencheck input}
Var Temp : string[15];
Begin
Temp:=’ ‘; Now:=Head;
While Now <> nil do
Begin
Temp:=temp + Now^.isi;
Now:=Now^.next;
End;
If temp <> Password then check:=False;
End;
Procedure BuatBingkai(x1,y1,x2,y2:byte); {tampilan aplikasi}
Var i : byte;
Begin
GotoXY (x1,y1); write(‘ ’); GotoXY (x2,y1); write (‘ ‘);
GotoXY (x1,y2); write(‘ ’); GotoXY (x2,y2); write (‘ ’);
For i := x1+1 to x2-1 do
Begin
GotoXY (i,y1); write (‘-‘);
GotoXY (i,y2); write (‘-’);
End;
For i := y1+1 to y2-1 do
Begin
GotoXY(x1, i); write(‘ ‘);
GotoXY(x2, i); write (‘ ‘);
End;
End;
Procedure Pop; {procedure penghapus simpul}
Begin
Now:=head;
head:=head^.next;
While Now <> nil do
Begin
Dispose(Now);
Now:=head;
Head:=head^.next;
End;
End;
Begin {program utama}
Repeat
Create; I:=0;
Repeat
Tekan:=ReadKey;
Write(Tekan);
If Tekan <>#13 then Push(Tekan); inc(i);
Until (Tekan= #13) or (I=10); {enter ditekan atau panjang = 10}
Passwd:=check; Pop;
Until Passwd;
End.
0 komentar:
Posting Komentar