Ilustrasi penggunaannya adalah sebagai berikut :

skema-linked-list

Deklarasi inked List dengan Pointer


type

tipeinfo = record

nim : string;

nilai : integer;

<strong>end;</strong>

tipeptr = ^tienode;

tipelist = tipeptr;

tipenode = record

info : tipeinfo;

next : tipeptr;

end;var list : tipelist;

Elemen-elemen list berupa record yang memuat field berisi informasi data serta sebuah field bertipe pointer yang berisi alamat elemen berikutnya.

Operasi pada Linked List

  1. Membuat List

Prosedur ini untuk membuat list pertama kali, yaitu mengalokasikan pointer untuk head. Nilai awal dari list adalah kosong (nil).


procedure inisialisasi (var list : tipelist);

begin
new(list);
list := nil;
end; 

Mengetahui Panjang List (Jumlah Elemen)

Mengetahui panjang list dilakukan dengan menghitung seluruh node. Caranya adalah mengunjungi setiap node dan menaikkan nilai counter sehingga dijumpai node terakhir. Contoh fungsinya adalah:


<strong>function</strong> size (list : tipelist) : integer;

<strong>var</strong> i : integer;

<strong>begin</strong>

i := 0;

<strong>while</strong> list <> nil <strong>do</strong>

<strong>            begin</strong>

i := i + 1;

list := list^.next;

<strong>end;</strong>

size := i;

<strong>end; </strong>

<strong>

 

  1. Menyisipkan Node Baru

Menyisipkan node baru pada ist diakukan dengan cara mencari lokasi tempat node baru akan disisipkan, kemudn menyisipkan node baru tersebut. Hal ini dapat dilakukan menggunakan bantuan sebuah pointer untuk mecari sebuah node yang akan tersambung langsung dengan node baru. Kemudian, nade baru dapat disisipkan pada lokasi sebelum atau sesudah node terseut. Swebagai contoh, prosedur berikut adalah untuk menyisispkan node baru sebelum node:


<strong>procedure</strong> sisipnode (<strong>var</strong> list : tipelist; IB : tipeinfo);

<strong>var</strong>

NB, ptr : tipeptr;

ketemu : boolean;

<strong>begin</strong>

<strong>new</strong>(NB);

NB^.info := IB;

NB^.next := nil;

<strong>if</strong> list = nil <strong>then</strong> list := NB

<strong>else</strong>

<strong>            if</strong> IB.nim <= list^.info.nim <strong>then</strong>

<strong>begin</strong>

NB^.next := list;

list := NB;

<strong>end</strong>

<strong>            else</strong>

<strong>begin</strong>

ketemu := false;

ptr := list;

<strong>while</strong> (ptr^.next <> nil) <strong>and not</strong> (ketemu) <strong>do</strong>

<strong>begin</strong>

<strong>if</strong> ptr^.next^.info.nim >= IB.nim <strong>then</strong>

ketemu := true'

<strong>else</strong>

ptr := ptr^.next

<strong>end;</strong>

NB^.next := ptr^.next;

ptr^.next := NB

<strong>end</strong>

<strong>end;</strong>

  1. Mengganti Nilai Informasi pada Suatu Node dalam List

Mengganti nilai inormasihanya akan menggan info pada suatu node tanpa menghapus node tersebut. Hal ini dapat dilakukan dengan mencari node yang sesuai dengan nilai yang akan diganti, selanjutnya mengganti nilai lama dengan nilai yang baru.

Berikut ini contoh prosedur untuk mengganti nilai pada suatu list:

  1. Mengganti nilai mahasiswa berdasarkan nomor mahasiswa,
  2. Mengganti semua node yang mempunyai nilai tertentu (niai lama) dengan nilai yang baru.

<strong>procedure </strong>gantinode1 (<strong>var</strong> list : tipelist; kunciGanti :

string; nilaibaru : integer;);

<strong>var</strong> ptr : tipeptr;

<strong>begin</strong>

<strong>new</strong>(ptr);

ptr := list;

<strong>while</strong> (ptr <> nil) and (ptr^.info.nim <> kunciganti) <strong>do</strong>

ptr := ptr^.next;

<strong>if</strong> ptr <> nil <strong>then</strong>

ptr^.info.nilai := nilai baru

<strong>end;</strong>

<strong>procedure</strong> gantinode2(<strong>var</strong> list : tipelist; nlama, nbaru : integer);

<strong>var</strong> ptr : tipeptr;

<strong>begin</strong>

<strong>new</strong>(ptr);

ptr := list;

<strong>while</strong> (ptr <> nil) <strong>do</strong>

<strong>begin</strong>

<strong>if</strong> ptr^.info.nilai := nlama <strong>then</strong>

ptr^.info.nilai := nbaru;

ptr := ptr^.next

<strong>end;</strong>

<strong>end;</strong>

  1. Menghapus Node dari Suatu List

Menghapus node adalah menghapus sebuah elemen dari list. Hal ini dapat dilakukan dengan mencari/menandai node yang akan dihapus, yaitu node yang memuat nilai seperti yang akan dihapus, kemudian mengarahkan pointer pada node sebelumnya ke arah node sesudah node yang akan dihapus, dan kemudian menghapus node yang dimaksud.

</p>
<strong>procedure</strong> hapusnode (<strong>var</strong> list : tipelist; kuncihapus : string);

<strong>var</strong> ptr1, ptr2 : tipeptr;

<strong>begin</strong>

<strong>new</strong>(ptr1);

<strong>new</strong>(ptr2);

ptr1 := <strong>nil</strong>;

ptr2 := <strong>nil</strong>;

<strong>while</strong> (ptr2^.info.nim <> kuncihapus) <strong>do</strong>

<strong>begin</strong>

ptr1 := ptr2;

ptr2 := ptr2^.next;

<strong>end;</strong>

<strong>if</strong> ptr1 = nil <strong>then</strong>

list := list^.next

<strong>else</strong>

ptr1^.next := ptr2^.next

<strong>dispose</strong> (ptr2)

<strong>end;</strong>

Linked List

Linked list merupakan struktur data yang memiliki kelebihan dalam efisiensi memori dan kecepatan dalam menyisipkan data. Linked list berguna untuk menyimpan beberapa data dalam memori. Pada pemrograman pascal menyediakan prosedur standar untuk membuat dan menghapus sebuah variabel dinamis, yaitu new dan dispose. Jika P telah dideklarasikan sebagai sebuah variabel pointer bertipe node, maka pernyataan new(P) akan menciptakan sebuah variabel dinamis baru bertipe node dan menandai lokasinya dengan pointer P. Sedangkan pernyataan dispose(p) akan mengembalikan ruang yang digunakan pada lokasi yang ditunjuk P ke sistem komputer. Silakan download slide materi linked list

Contoh Program Linked List :


Program linked_list;
Uses crt;
Var pil,i,n,j : integer;
nm : array[1..20] of string;
nim : array[1..20] of string;

Procedure menu(var pilih:integer);
Begin
Clrscr;
Textcolor(LightRed);
Writeln('----------------------------------------------------------');
Writeln('--- PROGRAM LINKED LIST ---');
Writeln('----------------------------------------------------------');
Textcolor(Yellow);
Writeln('--- 1. Tambah Data ---');
Writeln('--- 2. Urut Data ---');
Writeln('--- 3. Cetak Data ---');
Writeln('--- 4. Hapus Data ---');
Writeln('--- 5. Keluar ---');
Textcolor(LightGreen);
Writeln('----------------------------------------------------------');
Writeln('');
Write('Pilihan Anda [1/2/3/4/5] : '); Readln(pilih);
End;

Procedure tambah;
Var
inputlagi : char;
Begin
Textcolor(LightRed);
Writeln('');
Writeln('----------------------------------------------------------');
Textcolor(Yellow);
Writeln('--- Data Masuk ---');
Textcolor(LightGreen);
Writeln('----------------------------------------------------------');
Writeln;
Begin
Repeat
inputlagi:='Y';
n:=n+1;
Textcolor(LightRed);
Writeln('Data Ke .',n);
Writeln;
Textcolor(Yellow);
Write('Nama Mahasiswa : ');readln(nm[n]);
Write('NIM : ');readln(nim[n]);
Writeln;
Textcolor(LightGreen);
Write('Mau Input Lagi Y/T ? ');read(inputlagi);
Writeln('----------------------------------------------------------');
Delay(400);
Readln;
Until (inputlagi ='T') or (inputlagi = 't');
End;
End;

Procedure urutkan;
Var pil2: integer;
pos : byte;
d1 : string;
d2 : string;
Begin
Clrscr;
Textcolor(LightRed);
Writeln('---------------------------------------------------------');
Textcolor(Yellow);
Writeln('--- Mengurutkan Data ---');
Textcolor(LightGreen);
Writeln('---------------------------------------------------------');
Writeln;
Textcolor(LightRed);
Writeln('Terdapat ', n,' data pada LINGKED LIST');
Writeln;
if n=0 then
Begin
Textcolor(Yellow);
Write('Data masih kosong, Tekan ENTER ke MENU'); Readln;
End else
Begin
For i:=1 to n-1 do
For j:=i+1 to n do
Begin
If nim[i]>nim[j] then
Begin
d1:=nm[i];
d2:=nim[i];
nm[i]:=nm[j];
nim[i]:=nim[j];
nm[j]:=d1;
nim[j]:=d2;
End;
End;

For i:=1 to n do
Begin
Textcolor(Yellow);
Writeln('Data Ke .',i);
Writeln('Nama Mahasiswa : ',nm[i]);
Writeln('NIM : ',nim[i]);
Writeln;
End;
Writeln;
Writeln;
Textcolor(LightGreen);
Writeln('Tekan ENTER ke MENU'); Readln;
End;
Textcolor(LightGreen);
Writeln('----------------------------------------------------------');
Delay(400);
End;
Procedure cetakdata(pos: byte; teks : string);
begin
clrscr;
Textcolor(LightRed);
writeln('----------------------------------------------------------');
Textcolor(Yellow);
writeln(teks);
Textcolor(LightGreen);
writeln('----------------------------------------------------------');
writeln;

if n=0 then
begin
Textcolor(Yellow);
writeln('Data Masih Kosong, tekan ENTER ke MENU');
end else
begin
for i:=1 to n do
begin
Textcolor(LightRed);
writeln('Data Ke .',i);
Textcolor(Yellow);
writeln('Nama Mahasiswa : ',nm[i]);
writeln('NIM : ',nim[i]);
writeln;
end;
end;
Writeln;
if n=1 then
Writeln('Tekan ENTER ke MENU');
Textcolor(LightGreen);
Writeln('----------------------------------------------------------');
Delay(400);
readln;
end;

procedure hapus;
var
bil,i : integer;
begin
cetakdata(5,'--- Hapus Data ---');
if (n>0) then
begin
write('Data yang di hapus urutan Ke.');readln(bil);

if (bil>0) and (bil<=n) then
begin
for i:=bil to n-1 do
begin
nm[i]:=nm[i+1];
nim[i]:=nim[i+1];
end;
n:=n-1;
writeln;
Textcolor(Yellow);
write('Data telah dihapus, Tekan ENTER ke MENU');
readln;
end
else
begin
writeln;
Textcolor(Yellow);
write('Nomor urut Data tidak ada, Tekan ENTER ke MENU');
readln;
end;
end;
end;

begin
repeat
menu(pil);
case pil of
5 : Begin
Writeln(''); Delay(300);
Textcolor(Yellow);
Gotoxy(32,12);Write('Terima Kasih...');
Delay(4300);
End;
1 : tambah;
2 : urutkan;
3 : cetakdata(3,'--- Cetak Data ---');
4 : hapus;

else
writeln;
textcolor(lightRed);
write('Pilihan yang anda masukkan salah, Pijet ENTER nek arep mlebu neng MENU');
readln;
end;
until pil=5;
end.

 

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *