Algoritma pengurutan (sorting algorithm) · LIFO (last in first out) adalah suatu metode pembuatan...

Post on 10-Mar-2019

310 views 1 download

Transcript of Algoritma pengurutan (sorting algorithm) · LIFO (last in first out) adalah suatu metode pembuatan...

LINKED LIST

Altien Jonathan Rindengan, S.Si, M.Kom

Pendahuluan

Dalam suatu linear list kita dapat melakukan operasipenyisipan atau penghapusan atas elemen-elemennyapada sembarang posisi.

Misalkan ada 1500 item yang merupakan elemen darisuatu linear list.

Jika elemen ke-56 akan kita keluarkan, maka elemenke-1 s/d elemen ke-55 tidak akan berubah posisinyapada linear list tersebut. Tetapi elemen ke-57 akanmenjadi elemen ke-56, elemen ke-58 akan menjadielemen ke-57 dst. Selanjutnya, jika kita sisipkan satuelemen pada posisi setelah elemen ke-41, makaelemen ke-42 s/d elemen ke-1500 akan berubahposisinya.

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 sekalivariabel pointer(penunjuk).

Oleh karena itu ada baiknya jika anda hanyamenggunakan satu variabel pointer saja untukmenyimpan banyak data dengan metode yang kitasebut Linked List.

Jika diterjemahkan, maka berarti suatu daftar isiyang saling berhubungan.

Pendahuluan ….

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

elemen (node) selanjutnya yang dituju.

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 info infonext next nextstart

node ke-1 node ke-2 node ke-3 node ke-4

null

Definisi ….

Kerugian dengan representasi suatu data denganlinked list ini, yaitu :

Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.

Diperlukan waktu yang lebih banyak untuk mencari suatunode dalam linked list.

Keuntungannya adalah :

Jenis data yang berbeda dapat di-link.

Operasi REMOVE/DELETE atau INSERT hanya dilakukandengan mengubah pointer-nya saja.

Operasi Dasar Linked List

Ada beberapa aturan yang didefinisikan pada operasididalam linked list, yaitu :

- Jika P adalah suatu variabel pointer, maka nilainyaadalah alamat atau lokasi dari variabel lain yang dituju.

- Operasi yang didefinisikan pada suatu variabelpointer adalah :

Test apakah sama dengan NULL.

Test untuk kesamaan dengan variabel pointer lain.

Menetapkan sama dengan NULL.

Menetapkan menuju ke node lain.

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

yang ditunjuk oleh pointer P.

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

startinfo

info

info

info

next

next

next

next

null

P

node ke-1

node ke-2

node ke-3

node ke-4

Insert (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

barang pada kehidupan sehari‐hari.

Insert LIFO ….

Pembuatan simpul pada suatu linked list disebut

dengan istilah INSERT.

Jika linked list dibuat dengan Metode FIFO maka

penambahan/insert simpul dilakukan di BELAKANG.

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;

Tipe data pointer-record

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.

Input data di akhir list

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;

end;

Insert FIFO ….

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.