Anda di halaman 1dari 43

PERTEMUAN KE-5

Apa itu Linked List?

• Linked list (list bertaut) adalah salah satu struktur data


dasar yang sangat fundamental dalam bidang ilmu
komputer.
• Dengan menggunakan linked list maka programmer
dapat menimpan datanya kapanpun dibutuhkan.
• Linked list mirip dangan array, kecuali pada linked list
data yang ingin disimpan dapat dialokasikan secara
dinamis pada saat pengoperasian program (run-time).
• Linked List sering disebut juga Senarai Berantai
• 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.
• Elemen data yang dihubungkan dengan link pada
Linked List disebut Node. Biasanya didalam suatu
linked list, terdapat istilah head dan tail.
• Head adalah elemen yang berada pada posisi
pertama dalam suatu linked list
• Tail adalah elemen yang berada pada posisi
terakhir dalam suatu linked list
• Elemen (disebut dengan CELL, atau SEL dalam bahasa
Indonesia) yang mungkin terletak terpisah-pisah di
memory, disambungkan dengan pointer.
• Tiap sel berisi dua informasi : nilai dan pointer ke sel
berikutnya
Mengapa memakai Linked List ?

1. Mudah untuk menambahkan dan menghapus


elemen(pada array tidak mungkin menambahkan
elemen, karena banyaknya elemen sudah
ditentukan dari awal)
2. Panjang list bisa diubah dengan bebas (panjang
array fixed)
3. Mudah untuk menyambungkan beberapa list,
maupun memutuskannya (array tidak bisa)
4. Memungkinkan user mendesain struktur data
yang kompleks
 Node (elemen) linked list saling berkait melalui
pointer. Bagian next sebuah node menunjuk alamat
node selanjutnya
 pHead: pointer yang menunjuk node pertama
 Node terakhir menunjuk NULL
 Setiap node terdiri atas
 Isi data
 Next, yaitu pointer ke node selanjutnya pada list
Array vs linked list

 Banyaknya anggota
 Banyaknya elemen array ditentukan di awal &
jumlahnya tetap
 Elemen linked list dibuat di memori ketika
dibutuhkan (ingat Alokasi memory dinamis).
Jumlahnya dinamis, dapat bertambah dan
berkurang sesuai keperluan
 Cara mengakses elemen
 Elemen array diakses lewat indeks
 Untuk mengakses elemen linked list, harus dilakukan
penelusuran elemen list
Array vs Linked List

header
1 a[0]
13
2 a[1]

3 a[2]
address 13 address 18 address 24
1 18 2 24 3
value value next value next
Pointer ke sel berikutnya
(next)
(NULL)
int a[3];
int n;

Array Linked List

Address tiap sel berurutan Address tidak berurutan


Akses ke tiap sel dimulai dari header
LINEAR LIST (Daftar Linier)
• Daftar linier (Linear List) adalah suatu struktur data umum
yang terbentuk dari barisan hingga (yang terurut) dari
satuan data, atau pun dari record.
• Elemen dari daftar linier disebut simpul atau node.
• Daftar ini disebut linier karena susunan elemennya adalah
linier, yaitu bahwa bagi setiap elemen selalu ada elemen
setelah dan sebelumnya, kecuali pada elemen pertama dan
terakhir.

• Banyaknya simpul dalam suatu daftar linier dapat berubah-


ubah, berbeda dengan array yang jumlah elemennya selalu
tetap.
Struktur mana yang Linier?
LINKED LIST (Daftar Berkait)
• Daftar berkait  setiap elemen memiliki pointer
(penunjuk) ke satu atau beberapa elemen lain.
Pointer/Penunjuk = penyimpan alamat
• Singly Linked List atau One-Way List  setiap
elemen memiliki pointer (penunjuk) ke satu elemen
lain, biasanya elemen setelahnya.

• Doubly Linked List  setiap elemen memiliki


pointer (penunjuk) ke 2 elemen lain, biasanya
elemen sebelum dan sesudahnya.
LINKED LIST LAINNYA
START

Daftar Berkait Tunggal Sirkuler (Circular Singly-Linked List)

START

Daftar Berkait Ganda Sirkuler (Circular Doubly-Linked List)


LINKED LIST LAINNYA
List dengan hirarki
START START

ANAK ANAK ANAK ANAK


ORTU

ANAK ANAK ANAK ANAK


ORTU

Struktur Pohon
LINKED LIST LAINNYA
List dengan hirarki

START START

ANAK ANAK
ORTU

ANAK ANAK ORTU

Struktur Sisir (??)


Single atau Double Link?
• Perbandingan
Single Link:
- Keuntungan: Hemat memori, sederhana
- Kerugian: Menelusuri list hanya satu arah
Double link:
- Keuntungan: Dapat menelusuri list secara bolak-balik
- Kerugian: Perlu memori lebih, penanganan lebih
rumit
• Pertanyaan: Kapan menggunakan struktur yang Single
Link (One way) dan Double Link (Two way)?
Implementasi Linked-List dengan Array
• Single link list
Di sebuah RS terdapat 14 kamar. Dokter setiap hari akan
memeriksa mulai dari pasien yg termuda.
START = 4
Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama D A C B F E
Usia 24 13 19 15 26 25
Link 11 9 3 7 0 10

A 9 B 7 C 3 D E 10 F
11
Penelusuran Linked List
• Penelusuran linked list (daftar berkait) berarti mengunjungi
simpul demi simpul dalam list sampai seluruh simpul
terkunjungi.
Algoritma:
begin
ptr  START
while ptr <> 0 do
Proses INFO(ptr)
ptr  LINK(ptr)
end while
end
Pencarian dalam Linked List
• Pencarian dalam list berarti menelusuri list dan berhenti saat
elemen yang dicari ditemukan atau sampai pada akhir list.
Berikut adalah algoritma pencarian pada list yang tidak terurut.
Algoritma:
begin
ptr  START
while ptr<>0 and ITEMCARI<>INFO(ptr) do
ptr  LINK(ptr)
end while
if ITEMCARI = INFO(ptr) then
Proses INFO(ptr)
else
Tidak ditemukan
endif
end
Contoh Single Linked List
Penerapan List
• 1. List
• a. Dalam kehidupan sehari – hari :
• Daftar presensi kelas dimana terdapat list dari
siswa yang berurut sesuai NIM. Selain itu juga
ada Daftar menu makanan pada restoran yang
menyajikan menu urut dari harga terendah
hingga termahal.Daftar menu makanan
• b. Dalam lingkup informatika.
• Penyajian data list lagu dalam pembuatan
aplikasi pemutar musik
• Algortima penelusuran yang baik?
Multi List dalam Satu Array
• Beberapa list dapat memanfaatkan array yang
sama.
• Yang perlu dijaga adalah START-nya tidak
mulai dari lokasi yang sama; dan
• LINK ke lokasi berikutnya tidak menunjuk ke
lokasi dalam list lain.
TEST LINK
3 List dalam 1 Array 1 16
2 74 14
3 1

Kimia 11 4 82 0
5 84 12
6 78 0

Matematika 5 7 74 8
8 100 13
9 76 10
10 56 0
Fisika 9 11 88 2
12 62 7
13 74 6
14 93 4
15 0
16 15
Free Storage List
• Free storage list berarti pengelolaan daftar
lokasi memori yang tidak terpakai.
• Lokasi memori yang tidak dipakai
dimungkinkan karena adanya elemen yang
dihapus/keluar dari list.
TEST LINK
1 16
2 74 14
3 1

Algoritma 11 4 82 0
5 84 12
6 78 0

Geometri 5 7 74 8
8 100 13
9 10
10 3
Kosong 9 11 88 2
12 62 7
Lokasi yang tidak 13 74 6
digunakan oleh list lain 14 93 4
digabungkan dalam List 15 0

Kosong/Sampah 16 15
INSERTION
(Penyisipan Simpul)
• Penyisipan simpul berarti menambah suatu
simpul/elemen baru ke dalam sebuah list.

Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama G D A C B F E
Usia 21 24 13 19 15 26 25
Link 11 9 3 7 0 10

4 G 3

A 9 B 7 C 1 D E 10 F
11
Kasus Penyisipan Simpul
• INSERT FIRST
Yaitu kasus penyisipan simpul baru pada awal list.
Simpul baru menjadi ujung pertama list.
• INSERT AFTER
Yaitu kasus penyisipan simpul baru setelah
sebuah simpul tertentu.
• INSERT SORT
Yaitu kasus penyisipan simpul baru ke dalam list
sedemikian sehingga simpul-simpul dalam list
tetap dalam keadaan terurut.
Implementasi Linked-List dengan Array
• Double link list
Di sebuah RS terdapat 14 kamar. Dokter setiap hari akan
memeriksa mulai dari pasien yg termuda.
START = 4
Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama D A C B F E
Usia 24 13 19 15 26 25
Next 11 9 3 7 0 10
Prev 7 0 9 4 11 3

Next = kamar berikutnya


Prev = kamar sebelumnya
Implementasi Linked-List dengan Array
• Single link list
Di sebuah RS terdapat 14 kamar. Dokter setiap hari akan
memeriksa mulai dari pasien yg termuda.
START = 4
Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama D A C B F E
Usia 24 13 19 15 26 25
Link 11 9 3 7 0 10

A 9 B 7 C 3 D E 10 F
11
Implementasi Linked-List dengan Array
• Double link list sirkuler
START = 4
Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama D A C B E
Usia 24 13 19 15 25
Next 11 9 3 7 4
Prev 7 11 9 4 3

Next = kamar berikutnya; Prev = kamar sebelumnya

START
11 A 9 4 B 7 9 C 3 7 D 11 3 E 4
Implementasi Linked-List dengan Array
• Struktur Pohon (Tree) INFO KIRI KANAN

START START 1 E 0 0

3 B 0 0
A
4

B C 5 A 3 6

6 C 8 1

7
D E
8 D 0 0

9
Struktur Pohon
Implementasi Linked-List dengan Array
• Struktur Sisir (??) INFO OR AK SR

START START 1 E 0 0 7

3 B 5 8 6
A
ANAK 4
ORTU
5 A 0 3 0
B C
ANAK 6 C 0 0 0
ORTU
7 F 0 0 0
D E F
8 D 3 0 1

9
Free Storage List
• Free storage list berarti pengelolaan daftar
lokasi memori yang tidak terpakai.
• Lokasi memori yang tidak dipakai
dimungkinkan karena adanya elemen yang
dihapus/keluar dari list.
TEST LINK
1 G 5
2 4
3 B 10

Terisi 3 4 11
5 H 7
6 E 12

Kosong 8 7 K 0
8 13
9 D 6
10 C 9
11 0
Lokasi yang tidak 12 F 1
digunakan oleh list lain 13 14
digabungkan dalam List 14 15
15 16
Kosong/Sampah
16 2
Proses-Proses terhadap
Linked List
• TRAVERSING (PENELUSURAN)

• INSERTION (PENYISIPAN)

• REMOVE (PENGHAPUSAN)

• SEARCHING (PENCARIAN)
TRAVERSING
Penelusuran terhadap Linked List
• Penelusuran linked list (daftar berkait) berarti mengunjungi
simpul demi simpul dalam list sampai seluruh simpul
terkunjungi.
Algoritma:
begin
ptr  START
while ptr <> 0 do
Proses INFO(ptr)
ptr  LINK(ptr)
end while
end
SEARCHING
Pencarian dalam Linked List
• Pencarian dalam list berarti menelusuri list dan berhenti saat
elemen yang dicari ditemukan atau sampai pada akhir list.
Berikut adalah algoritma pencarian pada list yang tidak terurut.
Algoritma:
begin
ptr  START
while ptr<>0 and ITEMCARI<>INFO(ptr) do
ptr  LINK(ptr)
end while
if ITEMCARI = INFO(ptr) then
Proses INFO(ptr)
else
Tidak ditemukan
endif
end
INSERTION
(Penyisipan Simpul)
• Penyisipan simpul berarti menambah suatu
simpul/elemen baru ke dalam sebuah list.

Kamar 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Nama G D A C B F E
Usia 21 24 13 19 15 26 25
Link 11 9 3 7 0 10

4 G 3

A 9 B 7 C 1 D E 10 F
11
PRIORITY QUEUE with One-Way List
XXX 2
START

AAA 1 BBB 2 CCC 2

DDD 4 EEE 4 FFF 4

GGG 5 X

Slide Pertemuan ke-7


Kasus Penyisipan Simpul
• INSERT FIRST
Yaitu kasus penyisipan simpul baru pada awal
list. Simpul baru menjadi ujung pertama list.
• INSERT AFTER
Yaitu kasus penyisipan simpul baru setelah
sebuah simpul tertentu.
Penyisipan dalam List
INSERT FIRST
Sisipkan Elemen Baru ke awal list
Algoritma:
If AVAIL=NULL then
Overflow
Exit
Endif
New  AVAIL
AVAIL  LINK(AVAIL)
INFO(New)  ITEM
LINK(New)  START
START  New
Penyisipan dalam List
INSERT AFTER
Sisipkan Elemen yang ditunjuk oleh ptrY setelah
elemen yg ditunjuk oleh ptrX.
Algoritma:

INFO(ptrY) = ITEM
LINK(ptrY) = LINK(ptrX)
LINK(X) = ptrY

Anda mungkin juga menyukai