• Tidak ada hasil yang ditemukan

LINKED LIST

N/A
N/A
Protected

Academic year: 2023

Membagikan "LINKED LIST"

Copied!
40
0
0

Teks penuh

(1)

LINKED LIST LINKED LIST

Oleh:

Tim Struktur Data

IF - UNIKOM

(2)

PENGERTIAN LINKED LIST

berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung- menyambung, dinamis dan tidak terbatas.

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 record

(3)

Array vs Linked List

(4)

Bentuk Linked List

Single Linked List

Double Linked List

Circular Linked List

Linear Linked

List

(5)

Single Linked List

Linked list dengan simpul berisi satu link / pointer yang mengacu ke simpul berikutnya

Medan Data

(Info) Medan

Sambungan (next)

Simpul Single Linked List :

(6)

Deklarasi Linked List (Algoritma)

Type

NamaPointer = ↑Simpul Simpul = Record

MedanData : tipedata, MedanSambungan :

NamaPointer EndRecord

NamaVarPointer : NamaPointer

 

Type

Point = ↑Data Data = Record Info : char , Next : Point Endrecord

awal, akhir : Point

(7)

Operasi – operasi Single Linked List

1.

Penciptaan (create)

2.

Penyisipan

3.

Penghapusan

4.

Traversal

5.

Pencarian (searching)

6.

Pengurutan (sorting)

7.

Penghancuran (destroy)

(8)

Penciptaan

Pointer awal dan akhir diberi harga nil/NULL

awal akhi

r

awal  nil akhir  nil

(9)

Penyisipan

Penyisipan di depan/di awal

Penyisipan di belakang/ di akhir

Penyisipan di tengah Kondisi yang diperiksa:

List kosong

List tidak kosong

(10)

Penyisipan di Depan

- Jika List kosong {awal = nil}

baru

1

awal akhi

r

alloc(baru)

baru ↑.next  nil

baru↑.info  1

awal  baru

akhir  baru

(11)

Penyisipan di Depan (lanjutan)

- Jika List tidak kosong {Awal ≠ Nil}

baru

1

akh awa ir

l

2 3

Misalkan mula-mula keadaan List memiliki dua simpul:

Satu simpul akan disisipkan di depan (simpul yang disisipkan berisi angka 1

alloc(baru)

baru↑.info  1

(12)

Penyisipan di Depan (lanjutan)

baru

1

awal

2

akhi

3

r

baru↑.next  awal

awal  baru

Simpul baru akan disisipkan sebelum simpul yang ditunjuk pointer awal

(13)

Review Penyisipan di Depan (lanjutan)

baru

1

awal

2 3

akhi r

Keadaan Linked List setelah terjadi penyisipan di depan/di awal pada list tidak kosong:

(14)

Algoritma Penyisipan di Depan

Procedure SisipDepanSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer) {I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir

sudah terdifinisi}

{F.S. : menghasilkan satu simpul yang disisipkan di depan pada single linked list}

Kamus :

baru : nama_pointer Algoritma :

alloc(baru)

baru↑.info  elemen If (awal = nil)

Then

baru↑.next  nil akhir  baru Else

baru↑.next  awal EndIf

awal  baru EndProcedure

(15)

Penyisipan di Belakang

- Jika List kosong {awal = nil}

{sama seperti pada penyisipan di depan}

awal

3 2

akhir

baru 1

- Jika List tidak kosong {awal ≠ nil}

Misalkan mula-mula List memiliki dua simpul:

Simpul yang akan disisipkan:alloc(baru)

baru↑.next  nil

baru↑.info  1

(16)

Penyisipan di Belakang (lanjutan)

baru

1

akhi r

awal

3 2

akhir↑.next baru

Simpul baru akan disisipkan setelah simpul yang ditunjuk pointer akhir

akhir  baru

(17)

Review Penyisipan di Belakang (lanjutan)

aw

al

3 2

baru

1

akhi r

Keadaan Linked List setelah terjadi penyisipan satu simpul di belakang pada list yang tidak kosong:

(18)

Procedure SisipBelakangSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer) {I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir

sudah terdifinisi}

{F.S. : menghasilkan satu simpul yang disisipkan di belakang pada single linked list}

Kamus :

baru : nama_pointer Algoritma :

alloc(baru)

baru↑.info  elemen baru↑.next  nil If (awal = nil) Then

awal  baru Else

akhir↑.next  baru EndIf

akhir  baru EndProcedure

Algoritma Penyisipan di

Belakang

(19)

Penyisipan di Tengah

baru

1

awal

2 5

4

akhi

3

r

Misal akan menyisipkan angka 1 setelah angka 4 - Jika List kosong {awal = nil}

{sama seperti pada penyisipan di depan}

- Jika List tidak kosong {awal ≠ Nil}

alloc(baru)

baru↑.info  1

(20)

Penyisipan di Tengah (lanjutan)

Angka 4 ditemukan dengan cara mencari mulai dari simpul pertama sampai simpul yang ada angka 4 ditemukan (metode sequential search).

bant u

Misalkan pointer yang mencari angka 4 adalah pointer bantu, berarti pointer bantu akan menunjuk simpul ke-2 karena simpul tersebut berisi data yang dicari.

baru↑.next  bantu↑.next

baru

1

awal

2 5

4

akhir 3

bantu

(21)

Penyisipan di Tengah (lanjutan)

bantu↑.next  baru

Setelah simpul baru terhubung ke simpul setelah simpul yang ada angka 4, maka hubungkan medan sambungan (next) dari simpul yang ditunjuk pointer bantu ke simpul baru

bant u

awal

2

baru

1

4

akhi

3 5

r

(22)

Review Penyisipan di Tengah (lanjutan)

Keadaan Linked List setelah terjadi penyisipan satu simpul di tengah pada list yang tidak kosong :

bant

u

baru

1

2

akhi

5

r awal

4 3

(23)

Procedure SisipTengahSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer)

{I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}

{F.S. : menghasilkan satu simpul yang disisipkan di tengah pada single linked list}

Kamus :

baru,bantu : nama_pointer ketemu : boolean

datasisip : tipedata  Algoritma :

If (awal = nil) Then

alloc(baru)

baru↑.info  elemen baru↑.next  nil

Algoritma Penyisipan di

Tengah

(24)

awal  baru akhir  baru

Else

Input(datasisip) bantu  awal ketemu  false

While (not ketemu and bantu ≠ nil) do If (datasisip = bantu↑.info)

Then

ketemu  true Else

bantu  bantu↑.next EndIf

EndWhile

Algoritma Penyisipan di Tengah (lanjutan)

(25)

If (ketemu) Then

alloc(baru)

baru↑.info  elemen If (bantu = akhir) Then

sisip_belakang_single(elemen,awal,akhir) Else

baru↑.next  bantu↑.next bantu↑.next  baru

EndIf Else

Output(“Data yang akan disisipkan tidak ada”);

EndIf EndIf

EndProcedure

Algoritma Penyisipan di Tengah (lanjutan)

(26)

Penghapusan

Penghapusan di depan/ di awal

Penghapusan di belakang/ di akhir

Penghapusan di tengah Kondisi yang diperiksa:

List kosong (pemeriksaan list kosong atau tidak dilakukan ketika operasi penghapusan akan

dilakukan, bukan saat proses menghapus satu simpul)

List memiliki satu simpul

List memiliki lebih dari satu simpul

(27)

Penghapusan di Depan

Proses menghapus satu simpul di depan/di awal Linked List (menghapus simpul yang ditunjuk oleh pointer awal)

- Keadaan List memiliki satu simpul {awal = akhir}

awal akhir

phap 1 us

dealloc(phapus) awal  nil akhir  nil

phapus 

awal elemenelemen 

phapus↑.info

(28)

Penghapusan di Depan (lanjutan)

- Keadaan List memiliki lebih dari satu simpul {awal ≠ akhir}

aw

al

2 3

akhi r

Misalkan mula-mula Linked List memiliki dua simpul

phap

usphapus 

awal eleme n

elemen 

phapus↑.info

awal 

awal↑.next

dealloc(pha pus)

(29)

Review Penghapusan di Depan (lanjutan)

Keadaan Linked List setelah terjadi

penghapusan di depan/di awal dengan

kondisi list memiliki lebih dari satu simpul

phapus

awa l

3

akhir 2

Elem en

2

(30)

Algoritma Penghapusan di Depan

Procedure HapusDepanSingle(Output elemen : tipedata, I/O awal, akhir : nama_pointer)

{I.S. : pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}

{F.S. : menghasilkan single linked list yang sudah dihapus satu simpul di depan}

Kamus :

phapus : nama_pointer Algoritma :

phapus  awal

elemen  phapus↑.info If (awal = akhir)

Then

awal  nil akhir  nil Else

awal awal ↑.next EndIf

dealloc(phapus) EndProcedure

(31)

Penghapusan di Belakang

- Keadaan List memiliki satu simpul (awal = akhir)

awal

1 3

2

akhir

Proses menghapus satu simpul di belakang/di akhir Linked List (menghapus simpul yang ditunjuk oleh pointer akhir)

- Keadaan List memiliki lebih dari satu simpul {awal ≠ akhir}

{sama seperti penghapusan di depan}

Misalkan mula-mula Linked List memiliki tiga simpul

(32)

Penghapusan di Belakang (lanjutan)

phap us

eleme n

phapu s

akhir

3 awa

l

2 1

phapus  awalelemen  akhir↑.info

phapus 

phapus↑.next phapus 

phapus↑.next akhir 

phapus whil

e

endwhile

(phapus↑.next ≠

akhir) d

o

akhir↑.next  nildealloc(phap us)

(33)

Review Penghapusan di Belakang (lanjutan)

Keadaan Linked List setelah terjadi

penghapusan di belakang/di akhir pada kondisi list memiliki lebih dari satu simpul

phap us

phapu s

akhir

3 awa

l

2 1

Elem en

3

(34)

Algoritma Penghapusan di Belakang

Procedure HapusBelakangSingle(Output elemen : tipedata, I/O awal, akhir : nama_pointer)

{I.S. : pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}

{F.S. : menghasilkan single linked list yang sudah dihapus satu simpul di belakang}

Kamus :

phapus : nama_pointer Algoritma :

phapus  awal

elemen  phapus↑.info If (awal = akhir)

Then

awal  nil akhir  nil

(35)

Algoritma Penghapusan di Belakang (lanjutan)

Else

while (phapus↑.next ≠ akhir) do phapus  phapus↑.next endwhile

akhir  phapus

phapus  phapus↑.next akhir↑.next  nil

EndIf

dealloc(phapus) EndProcedure

(36)

Penghapusan di Tengah

- Keadaan List memiliki satu simpul (awal = akhir)

awal

2 5

4

akhi

3

r

Proses menghapus satu simpul di tengah Linked List (menghapus simpul yang ditunjuk oleh pointer phapus)

{sama seperti penghapusan di depan}

- Keadaan List memiliki lebih dari satu simpul (awal ≠ akhir)

Misalkan mula-mula List memiliki empat simpul, dan akan menghapus simpul ketiga

(37)

phapus

posisihapus=2bantu

eleme n

Penghapusan di Tengah (lanjutan)

awal

5 4

akhir 3

posisihapus=1 posisihapus=3 phapus

elemen

phapus↑.info 2

bantu↑.next  phapus↑.next dealloc(pha pus)

(38)

Review Penghapusan di Tengah (lanjutan)

awal

5 4

akhir

3 2

awal

5 4

akhir 3

phap us

posisihapus=1

posisihapus=2 posisihapus=3 phap

bant us u

Keadaan Linked List setelah terjadi penghapusan di tengah pada kondisi list memiliki lebih dari satu

simpul (menghapus simpul ketiga)

Elem en

2

(39)

Latihan

Buatlah subrutin untuk menghapus satu simpul di tengah!

(40)

Referensi

Dokumen terkait

• Masing-masing elemen pada double linked list terdiri dari tiga bagian, disamping data dan pointer next , masing-masing elemen dilengkapi dengan pointer prev

Menambah sebuah node pada doubly linked list. Menghapus sebuah node dari doubly

Langkah-langkah untuk mencari simpul tertentu pada linked list yang sudah terbentuk di atas adalah sebagai berikut:.. Inisialisasi sebuah variabel bertipe struct

Langkah-langkah untuk menghapus simpul tertentu (depan) dari double linked list adalah sebagai berikut:.. Inisialisasi sebuah variabel bertipe struct simpul* (hapus)

Langkah yang perlu dilakukan ketika ingin melakukan proses penghapusan linked list yang memiliki hanya satu simpul (data) adalah dengan cara menempatkan dahulu

 Implementasi Stack dengan single linked list, pada operasi Push dengan sisip awal list dan pada operasi Pop dengan hapus awal list.. POLITEKNIK ELEKTRONIKA NEGERI

Operasi menyisip di tengah pada circular singly linked list pada prinsipnya hampir sama dengan menyisip pada linear singly linked list yang pada implementasinya membutuhkan

Pointer next elemen sebelumnya menunjuk ke elemen baru Insert sebelum node tertentu Statement untuk insert setelah node tertentu dari linked list adalah sebagai berikut: void