MODUL 8

|

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