Bandung 2013
PENGERTIAN LINKED LIST
Salah satu bentuk struktur data, 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
Bentuk Linked List
Single Linked List
Double Linked List
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 :
Deklarasi
Single
Linked List (Algoritma)
Type nama_pointer = ↑Simpul Simpul = Record medan_data : tipedata, medan_sambungan : nama_pointer EndRecord nama_var_pointer : nama_pointerContoh Deklarasi Single Linked List
Type Point = ↑Data Data = Record Info : char , Next : Point EndrecordOperasi – operasi Single Linked List
1.Penciptaan (create)
2.Penyisipan
3.Penghapusan
4.Traversal
5.Pencarian (Searching)
6.Pengurutan (Sorting)
7.Penghancuran (destroy)
Penciptaan
Pointer awal dan akhir diberi harga nil/NULL
awal
akhir
Penyisipan di Depan
- Jika List kosong {
awal = nil
}
baru
baru
1baru
1awal
akhir
alloc(baru)
baru
ß nil
baru
↑
.info
ß 1
awal
ß
baru
akhir
ß
baru
Penyisipan di Depan (lanjutan)
- Jika List tidak kosong {Awal ≠ Nil}
baru
1akhir
awal
2 3
Misalkan mula-mula keadaan List memiliki dua simpul:
Satu simpul akan disisipkan di depan
alloc(baru)
Penyisipan di Depan (lanjutan)
baru
1awal
2akhir
3baru
↑
.next
ß
awal
Simpul baru akan disisipkan di depan simpul yang
ditunjuk oleh pointer awal
Penyisipan di Depan (lanjutan)
awal
2 3baru
1akhir
awal
ß
baru
Setelah simpul baru tersambung dengan simpul pertama
dari list, lalu pindahkan pointer awal ke simpul yang baru
Penyisipan di Depan (lanjutan)
baru
1awal
2 3
akhir
Keadaan Linked List setelah terjadi penyisipan di
depan/di awal (untuk awal ≠ nil) :
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
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
Penyisipan di Belakang (lanjutan)
baru
1akhir
awal
3 2 akhir↑.nextß baru
Simpul baru akan disisipkan setelah simpul yang ditunjuk
pointer akhir
Penyisipan di Belakang (lanjutan)
akhir ß baru
akhir
awal
3 2baru
1Penyisipan di Belakang (lanjutan)
awal
3 2baru
1akhir
Keadaan Linked List setelah terjadi penyisipan satu
Algoritma Penyisipan di Belakang
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
Penyisipan di Tengah
- Jika List kosong {awal = nil}
{
sama seperti pada penyisipan di depan
}
baru
1awal
2 5 4akhir
3Misal akan menyisipkan angka 1 setelah angka 4
- Jika List tidak kosong {awal ≠ Nil}
alloc(baru)
Penyisipan di Tengah (lanjutan)
Angka 4 ditemukan dengan cara mencari mulai dari simpul pertama sampai simpul yang ada
angka 4 ditemukan (metode sequential search).
bantu
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 bantuPenyisipan di Tengah (lanjutan)
Hubungkan medan sambungan dari simpul yang baru ke simpul tetangganya dari simpul yang ditunjuk oleh pointer bantu
baru↑.next ß bantu↑.next
baru
1 awal 2 5 4 akhir 3 bantuPenyisipan di Tengah (lanjutan)
bantu↑.next ß baru
Setelah simpul baru terhubung ke simpul setelah simpul yang
ada angka 4, maka sambungkan medan sambungan (next) dari
simpul yang ditunjuk pointer bantu ke simpul baru
bantu
awal
2baru
1 4akhir
3 5Penyisipan di Tengah (lanjutan)
Keadaan Linked List setelah terjadi penyisipan satu
simpul di tengah (untuk awal ≠ nil) :
bantu
baru
1 2akhir
5awal
4 3Algoritma Penyisipan di Tengah
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 (lanjutan)
awal ß baru akhir ß baru Else Input(datasisip) bantu ß awal ketemu ß falseWhile (not ketemu and bantu ≠ nil) do If (datasisip = bantu↑.info) Then ketemu ß true Else bantu ß bantu↑.next EndIf EndWhile
Algoritma Penyisipan di Tengah (lanjutan)
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 ElseOutput(“Data yang akan disisipkan tidak ada”); EndIf
EndIf
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
Penghapusan di Depan (lanjutan)
awal akhir phapus elemen 1 phapusphapus ß awal elemen ß
phapus↑.info
dealloc(phapus)
awal ß nil akhir ß nil
1
awal akhir
Jika terjadi penghapusan pada Linked List yang hanya memiliki satu simpul, maka Linked List akan kosong
Penghapusan di Depan (lanjutan)
- Keadaan List memiliki lebih dari satu simpul {awal ≠ akhir}
awal
2 3
akhir
Misalkan mula-mula Linked List memiliki dua simpulPenghapusan di Depan (lanjutan)
phapus awal 2 3 akhir elemen awal 2 3 phapus akhirphapus ß awal elemen ß phapus↑.info
awal ß awal↑.next
dealloc(phapus )
Penghapusan di Depan (lanjutan)
Keadaan Linked List setelah terjadi penghapusan di
depan/di awal (untuk awal ≠ akhir) :
phapus
awal
3
akhir 2
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 ß baru↑.info If (awal = akhir) Then awal ß nil akhir ß nil Else
awalß awal ↑.next EndIf
dealloc(phapus)
EndProcedure
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}
Penghapusan di Belakang (lanjutan)
phapus awal 1 3 akhir 2 elemenphapus akhir phapus
awal 1 3 2 phapus ß awal elemen ß akhir↑.info phapus ß phapus↑.next phapus ß phapus↑.next akhir ß phapus
Penghapusan di Belakang (lanjutan)
awal
1 3phapus
2akhir
akhir↑.next
ß
nil
dealloc(phapus
)
Penghapusan di Belakang (lanjutan)
Keadaan Linked List setelah terjadi penghapusan di
belakang/di akhir (untuk awal ≠ akhir) :
phapus akhir phapus
3 awal
1 2
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 ß baru↑.info If (awal = akhir) Then awal ß nil akhir ß nil
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
Penghapusan di Tengah
- Keadaan List memiliki satu simpul (awal = akhir)
awal
2 5
4
akhir
3
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
phapus
posisihapus=2
Penghapusan di Tengah (lanjutan)
awal 2 5 4 akhir 3 posisihapus=1 posisihapus=3 phapus
Cari simpul yang akan dihapus (simpul ke-3). Pencarian dimulai dari simpul pertama.
Jika ketemu simpul yang akan dihapus, maka simpan datanya kesebuah variabel (elemen).
bantu awal 2 5 4 phapus akhir 3 posisihapus=3
Penghapusan di Tengah (lanjutan)
Karena medan sambungan dari simpul sebelum simpul yang dihapus harus terhubung ke simpul berikutnya dari simpul yang dihapus, maka harus ada pointer bantuan (bantu) yang menunjuk simpul sebelum simpul yang dihapus.
Penghapusan di Tengah (lanjutan)
awal 2 5 4 phapus akhir 3 posisihapus=3 bantubantu↑.next ß phapus↑.next
dealloc(phapus)
Hubungkan medan sambungan dari simpul yang ditunjuk oleh pointer bantu ke simpul tetangganya phapus.
Penghapusan di Tengah (lanjutan)
5 akhir 2 phapus posisihapus=1 posisihapus=2 posisihapus=3 phapus bantuKeadaan Linked List setelah terjadi penghapusan di
tengah(untuk awal ≠ akhir) :
awal 4 3 4 3 5 akhir awal
Traversal
Proses mengunjungi setiap simpul satu persatu dari simpul pertama sampai simpul terakhir
awal
2 5
4
akhir 3
Misalkan proses menampilkan data :
Ø Tempatkan satu pointer bantuan (bantu) di simpul pertama
awal 2 5 4 akhir 3 bantu
Traversal (lanjutan)
Ø Tampilkan ke layar medan data dari simpul yang ditunjuk oleh
pointer bantu, kemudian pointer bantu bergerak ke simpul berikutnya sampai seluruh simpul tertelusuri (bantu = nil)
awal
2 5
4
akhir 3
bantu bantu bantu bantu
3 4 2 5
Tugas
Buat algoritma dan program untuk menu berikut : Menu Utama 1. Isi Data 2. Tambah Data 3. Hapus Data 4. Tampil Data 5. Keluar
Topik : 1. Penjualan Tiket, 2. Perpustakaan, 3. Pendaftaran Pasien, 4. Reservasi Hotel, 5. Laundry, 6. Rental Kendaraan, 7. Outlet, 8. Penyewaan VCD