strukdat-06[linked list]

Download Report

Transcript strukdat-06[linked list]

Rahmady Liyantanto
[email protected]
liyantanto.wordpress.com
Struktur Data
S1 Teknik Informatika Universitas Trunojoyo
Array  Statis, Pasti, Alokasi variabel digunakan
saat program dijalankan sampai selesai.
 Pointer  Dinamis, Ukuran, sesuai kebutuhan,
Alokasi variabel dapat diatur sesuai kebutuhan



Dikembangkan tahun 1955-1956 oleh Allen
Newell, Cliff Shaw dan Herbert Simon di RAND
Corporation sebagai struktur data utama untuk
bahasa Information Processing Language (IPL).
IPL dibuat untuk mengembangkan program
artificial intelligence
Linked List adalah salah satu bentuk struktur data,
berisi kumpulan data (node) yang tersusun secara
sekuensial, saling sambung-menyambung dan
dinamis.
Linked List saling terhubung dengan bantuan variabel
pointer
 Masing-masing data dalam Linked List disebut dengan node
(simpul) yang menempati alokasi memori secara dinamis
dan biasanya berupa struct yang terdiri dari beberapa field.
 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.

•
ARRAY :
–
–
–
–
•
Statis
Terbatas dalam menambah / menghapus data
Random access
Penghapusan data tidak mungkin
LINKED LIST :
–
–
–
–
Dinamis
Tidak terbatas dalam menambah / menghapus data
Sequential access
Penghapusan data mudah
- Ada dua hal yang menjadi kerugian dengan representasi
suatu data dengan linked list ini, yaitu :
1. Diperlukan ruang tambahan untuk menyatakan/tempat field
pointer.
2. Diperlukan waktu yang lebih banyak untuk mencari suatu
node dalam linked list.
- Sedangkan keuntungannya adalah :
1. Jenis data yang berbeda dapat di-link.
2. Operasi REMOVE atau INSERT hanya dilakukan dengan
mengubah pointer-nya saja.
Aturan 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 :
1. Test apakah sama dengan NULL.
2. Test untuk kesamaan dengan variabel pointer lain.
3. Menetapkan sama dengan NULL.
4. Menetapkan menuju ke node lain.
Notasi yang didefinisikan sehubungan dengan operasi diatas
adalah :
1. NODE(P), artinya node yang ditunjuk oleh pointer P.
2. INFO(P), artinya nilai INFO dari node yang ditunjuk pointer P.
3. NEXT(P), artinya hubungan (link) selanjutnya dari node yang
ditunjuk oleh pointer P.

Single Linked List
10
15
head

20
dapat juga ditulis NULL
Double Linked List
10
head
15
prev
20
next
Pengertian:
 Single : artinya field pointer-nya hanya satu buah saja dan
satu arah serta pada akhir node, pointernya menunjuk NULL
10
NULL

data
pointer
Linked List : artinya node-node tersebut saling terhubung
satu sama lain.
10
15
20
10
data


15
pointer
20
NULL
Setiap node pada linked list mempunyai field
yang berisi pointer ke node berikutnya, dan
juga memiliki field yang berisi data.
Node terakhir akan menunjuk ke NULL yang
akan digunakan sebagai kondisi berhenti
pada saat pembacaan isi linked list.

Single linked list dengan HEAD
10
15
20
head

Single linked list dengan HEAD dan TAIL
10
head
15
20
tail


LIFO(Last In First Out)-> Stack
Data yang masuk paling akhir adalah data
yang keluar paling awal.
FIFO(First In First Out)-> Queue
Data yang masuk paling awal adalah data
yang keluar paling awal juga.


Bentuk Umum
var <NamaVar>:<^TipeData>
Contoh
type
Point = ^Rec Point;
Rec Point = record
isi:TipeData;
Next:Point;
end;
Var
Head, Tail, Now: Point;
Procedure INSERT(elemen:TipeData);
Var Now:Point;
begin
New(Now);
Now^.Isi:=elemen;
if Head=Nil then
Now^.Next:=Nil
else
Now^.Next:=Head;
Head:=Now;
end;
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;
Tail^.Isi:=elemen
end;
Procedure Create;
begin
Head:=Nil;
Tail:=Nil;
end;
Function Empty:boolean;
begin
if Head=Nil then
empty:=true
else
empty:=false;
end;
Procedure UPDATE(u:TipeData);
begin
Now^.isi:=u;
end;
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;
Procedure Clear;
begin
while Head<>Nill do
begin
Head:=Now;
Head:=Head^.Next;
Dispose(Now);
end;
end;