LINKED LIST
Pendahuluan
Dalam suatu linear list kita dapat melakukan operasi
penyisipan atau penghapusan atas elemen-elemennya
pada sembarang posisi.
Misalkan ada 1500 item yang merupakan elemen dari
suatu linear list.
Jika elemen ke-56 akan kita keluarkan, maka elemen
ke-1 s/d elemen ke-55 tidak akan berubah posisinya
pada linear list tersebut. Tetapi elemen ke-57 akan
menjadi elemen ke-56, elemen ke-58 akan menjadi
elemen ke-57 dst. Selanjutnya, jika kita sisipkan satu
elemen pada posisi setelah elemen ke-41, maka
elemen ke-42 s/d elemen ke-1500 akan berubah
posisinya.
Pendahuluan ….
Untuk menyatakan keadaan diatas diperlukan suatu
konsep yang berbeda dengan konsep sekuensial
sebelumnya.
Linked list
merupakan suatu cara non-sekuensial
yang digunakan untuk merepresentasikan suatu
data.
Apabila setiap kali anda ingin menambahkan data
selalu dengan menggunakan variabel pointer yang
baru, anda akan membutuhkan banyak sekali
variabel pointer(penunjuk).
Oleh karena itu ada baiknya jika anda hanya
menggunakan satu variabel pointer saja untuk
menyimpan banyak data dengan metode yang kita
sebut
Linked List.
Jika diterjemahkan, maka berarti suatu daftar isi
yang saling berhubungan.
Pendahuluan ….
Dalam pembuatan Single Linked List dapat
menggunakan 2 Metode :
LIFO ( Last In First Out ), aplikasinya : Stack (Tumpukan)
FIFO ( First In First Out ), aplikasinya : Queue (Antrian)
Definisi
Linked list (one way list) adalah suatu kumpulan
elemen data (yang disebut sebagai node) dimana
urutannya ditentukan oleh suatu pointer.
Setiap elemen (node) dari suatu linked list terdiri
atas dua bagian, yaitu :
INFO , berisi informasi tentang elemen data yang
bersangkutan.
NEXT (link field/next pointer field), berisi alamat dari
Definisi ….
Berikut ini sebuah contoh linked list yang terdiri atas
4 node :
Pada node ke-4 field NEXT-nya berisi NULL, artinya
node ke-4 tsb. adalah node terakhir.
info next info next info next info next start
node ke-1 node ke-2 node ke-3 node ke-4 null
Definisi ….
Kerugian dengan representasi suatu data dengan
linked list ini, yaitu :
Diperlukan ruang tambahan untuk menyatakan/tempat field
pointer.
Diperlukan waktu yang lebih banyak untuk mencari suatu
node dalam linked list.
Keuntungannya adalah :
Jenis data yang berbeda dapat di-link.
Operasi REMOVE/DELETE atau INSERT hanya dilakukan
Operasi Dasar Linked List
Ada beberapa aturan yang didefinisikan pada operasi
didalam linked list, yaitu :
- Jika P adalah suatu variabel pointer, maka nilainya
adalah alamat atau lokasi dari variabel lain yang
dituju.
- Operasi yang didefinisikan pada suatu variabel
pointer adalah :
Test apakah sama dengan NULL.
Test untuk kesamaan dengan variabel pointer lain.
Menetapkan sama dengan NULL.
Operasi Dasar Linked List ….
Notasi yang didefinisikan sehubungan dengan
operasi diatas adalah :
NODE(P), artinya node yang ditunjuk oleh pointer P.
INFO(P), artinya nilai INFO dari node yang ditunjuk
pointer P.
NEXT(P), artinya hubungan (link) selanjutnya dari node
Operasi Dasar Linked List ….
NODE(P) = node yang ditunjuk oleh P yaitu node pertama.
INFO(P) = A
NEXT(P) = node ke-dua
INFO(NEXT(NEXT(P))) = C
A B C D start info info info info next next next next null P node ke-1 node ke-2 node ke-3 node ke-4Insert (LIFO)
LIFO (
last in first
out) adalah suatu metode
pembuatan Linked List dimana data yang masuk
paling akhir adalah data yang keluar paling awal.
Input data di awal list
Hal ini dapat dianalogikan dengan menumpukan
Insert LIFO ….
Pembuatan simpul pada suatu linked list disebut
dengan istilah INSERT.
Jika linked list dibuat dengan Metode FIFO maka
Insert LIFO ….
Procedure Insert
Istilah INSERT berarti menambahkan sebuah simpul
baru ke dalam suatu linked list.
Berikut adalah deklarasi tipe data dan variabel yang
dapat digunakan sebagai deklarasi awal dan
procedure InsertFirst.
Insert LIFO ….
program linklist_insert; uses crt; Type SLL=^data; data=record info:integer; next:SLL; end; list=SLL; node=SLL; var L:list; sum,ElmIn:Integer; jawab:char;Insert LIFO ….
procedure CreateList (Var L:List); begin
L:=nil; end;
Insert LIFO ….
Procedure InsertFirst (Var L:List; elm:integer); var P:Node; begin New(P); P^.info:=Elm; if L = nil then Begin L:=P; P^.next:=Nil; end else begin P^.next:=L; L:=P; end; end;
LIFO ….
Procedure Tampil (Var L:List); Var P:Node; Begin clrscr; if L<> Nil then begin P:=L; write (P^.info); write (' '); P:=P^.next; while P<>nil do begin write (p^.info); write (' '); p:=P^.next; end; end; writeln; end;
Insert LIFO ….
label ulang;
begin {PROGRAM UTAMA} createlist(L);
ulang: clrscr; tampil(L); writeln;
write('Masukkan elemen linked list = '); readln (ElmIn);
InsertFirst(L,ElmIn); tampil(L);
writeln;
write('Apakah akan menginput ulang Y/N) ?');readln(jawab); if (jawab='y') or (jawab='Y') then goto ulang;
readln; end.
Insert (FIFO)
FIFO adalah suatu metode pembuatan Linked List
dimana data yang masuk paling awal adalah data
yang keluar paling awal.
Insert LIFO ….
Procedure InsertFirst (Var L:List; elm:integer); var P:Node; begin New(P); P^.info:=Elm; if L = nil then Begin L:=P; P^.next:=Nil; end else begin P^.next:=L; L:=P; end; end;
Insert LIFO ….
Procedure InsertLast (Var L:list;elm:integer); Var Pt,P : Node; begin new(P); P^.info:=elm; if L=Nil then begin L:=P; P^.next:=nil; end else begin Pt:=L;
while (Pt^.next<>Nil) do Pt:=Pt^.next; P^.next:=Nil;
Pt^.next:=P; end;
Remove/Delete
procedure DeleteFirst(var L:List); var P : Node;
begin
if (L<>Nil) then begin
if L^.next = nil then begin P:=L; dispose(P); L:=nil; end else begin P:=L; L:=L^.next; P^.next:=Nil; dispose(P); end; end; end;
Remove/Delete ….
procedure DeleteLast(var L:List); var Prec,Pt : Node;
begin if (L<>Nil) then begin Pt:=L; Prec:=Nil; while (Pt^.next<>Nil) do begin Prec:=Pt; Pt:=Pt^.next; end; if (Prec=Nil) then begin dispose(pt); L:=nil; end else begin Prec^.next:=Nil; dispose(Pt); end; end; end;
Program Lengkap
Program SingleLinkList; uses CRT; Type SLL=^data; data=record info:integer; next:SLL; end; List=SLL; Node=SLL; var L:list; pilih:char; sum,ElmIn:Integer;Procedure CreateList (Var L:List); begin
L:=nil; end;
Procedure InsertFirst (Var L:List; elm:integer); var P:Node; begin New(P); P^.info:=Elm; if L = nil then Begin L:=P; P^.next:=Nil; end else begin P^.next:=L; L:=P; end; end;
Procedure InsertLast (Var L:list;elm:integer); var Pt,P : Node; begin new(P); P^.info:=elm; if (L=Nil) then begin L:=P; P^.next:=nil; end else begin Pt:=L; while (Pt^.next<>Nil) do Pt:=Pt^.next; P^.next:=Nil; Pt^.next:=P; end; end;
procedure DeleteFirst(var L:List); var P : Node;
begin
if (L<>Nil) then begin
if L^.next = nil then begin P:=L; dispose(P); L:=nil; end else begin P:=L; L:=L^.next; P^.next:=Nil; dispose(P); end; end; end;
procedure DeleteLast(var L:List); var Prec,Pt : Node;
begin if (L<>Nil) then begin Pt:=L; Prec:=Nil; while (Pt^.next<>Nil) do begin Prec:=Pt; Pt:=Pt^.next; end; if (Prec=Nil) then begin dispose(pt); L:=nil; end else begin Prec^.next:=Nil; dispose(Pt); end; end; end;
Procedure penjumlahan(var L:List; var sum: integer); var pt: node; begin Sum:=0; Pt:= L; Sum:=Sum+Pt^.info; while Pt^.next<>nil do begin Pt:=Pt^.next; Sum:=Sum+Pt^.info; end; writeln;
write ('Hasil penjumlahan elemen single link list adalah ',sum,'');
writeln; end;
Procedure Tampil (Var L:List); Var P:Node; Begin clrscr; if L<> Nil then begin P:=L; write (P^.info); write (' '); P:=P^.next; while P<>nil do begin write (p^.info); write (' '); p:=P^.next; end; end; writeln; end;
label ulang; begin createlist(L); ulang: clrscr; tampil(L); writeln; writeln;
writeln ('========= Program Single Linked List ======='); writeln;
writeln('1. Insert First'); writeln('2. Insert Last'); writeln('3. Delete Fisrt'); writeln('4. Delete Last'); writeln('5. Penjumlahan'); writeln('0. Exit');
write('Pilih = '); readln(pilih);
case pilih of '1' : begin
write('Masukkan Elemen Single Linked List = '); Readln (ElmIn);
InsertFirst(L,ElmIn); tampil(L);
end; '2' : begin
write('Masukkan Elemen Single Linked List = '); Readln (ElmIn); insertlast(L,ElmIn); tampil(L); end; '3' : begin deletefirst(L); tampil(L); end; '4' : begin deletelast(L); tampil(L); end;
'5' : begin penjumlahan(L, sum); end; '0':exit; end; writeln;
writeln ('Tekan Enter Untuk Mengulang Program'); readln;
goto ulang; end.