Variasi List Linier Nisa ul Hafidhoh, MT nisa@dsn.dinus.ac.id
Variasi Variasi List dengan Dummy Circular List Double Linked list
Variasi List dengan Dummy Elemen fiktif / elemen dummy : elemen yang sengaja dialokasi untuk mempermudah operasi, namun sebenarnya bukan elemen list. List dengan elemen fiktif dibuat agar list kosong tidak berbeda dengan list biasa sehingga semua tes terhadap list kosong dapat dihapuskan. Dummy bisa berupa address yang tetap, bisa sebuah address yang berbeda (setiap kali dummy tersebut dipakai sebagai elemen list, dialokasi dummy yang baru). Representasi ini dipakai jika dummy dikehendaki sebagai sentinel.
Variasi List dengan Dummy List 1 elemen Elemen pertama : First(L) Elemen terakhir : Last(L); = dummy@ First(L) Last(L) Elemen List Dummy@ 3 Menunjuk NIL List 1 element
Variasi List dengan Dummy List kosong First(L) = Last(L) = dummy@ First(L) Last(L) Elemen List Dummy@ Menunjuk NIL List Kosong
Variasi List dengan Dummy First(L) Last(L) 3 8 List 2 element Elemen List Menunjuk NIL Dummy@
Circular List
Circular List Circular list adalah list dengan elemen terakhir dalam list menunjuk pada elemen pertama list Node node pada linked list terhubung menggunakan field next, dimana menyimpan alamat dari node berikutnya pada field next (node sebelumnya) dan node terakhir mengarah / menuju ke node pertama Representasi ini dipakai jika dilakukan proses terus menerus terhadap anggota list (misalnya dalam round robin services pada sistem operasi).
Circular List 3 9 7 5 Operasi dasar : - Insert - Delete - Find - Print
Circular List First(L)= Nil First(L) Nil Elemen List 9 First(L)
Ciri Circular List List dengan representasi ini sebenarnya tidak mempunyai First. First adalah Current Pointer. Jika L adalah sebuah list, dan P adalah alamat elemen list, maka ciri circular list: Elemen pertama : First(L)= P, dengan P adalah address salah satu elemen list Elemen terakhir : Last(L)= P, Next(P)= First List kosong : First(L) = Nil
Find Mencari apakah ada elemen list yang beralamat di P Atur Pt menunjuk pada *First(L) Jika address Pt sama dengan P maka fungsi akan mengembalikan nilai true. Jika tidak, Tranversalkan Pt menuju P hingga kembali ke First(L)
Find First(L) Pt P 9 1 7 Elemen List
Find First(L) Pt P 9 1 7 Elemen List
Find First(L) Pt P 9 1 7 Elemen List True ketika Pt == P
Insert Menambah Elemen Ber-addres P sebagai Elemen Pertama pada Circuler List Jika List dalam keadaan kosong maka First(L) dan Next(P) adalah P Jika list tidak dalam keadaan kosong maka Next(P) adalah First(*L); First(L) adalah P; Next(Last) adalah First(*L);
Insert P First(*L) Last (*L) 9 9 Elemen List
Insert P First(*L) Last (*L) 9 9 Elemen List
Insert P First(*L) Last (*L) 9 9 Elemen List
Insert P First(*L) Last (*L) 9 9 Elemen List
Delete Menghapus Elemen Pertama Pada Circular List Cek apakah list dalam keadaan kosong Jika List hanya berisi satu elemen maka atur First(L) menjadi NIL Jika List Lebih dari satu elemen maka : Atur Next(First(L)) menjadi First(L) Atur First(L) menjadi P Atur Next(P) menjadi NIL
Delete First(L) P P = First(L) 9 1 7 Elemen List
Delete P Next(First(L)) = First(L) 9 1 7 Elemen List
Delete P First(L) 9 1 7 Next(P)=NIL Elemen List
Circular List Fungsi Print : - Jika pointer = first, tidak ada elemen dalam list - Cetak nilai data dari node (pointer -> data) dan pindah ke node next secara recursive dengan pointer -> next
Double Linked List
Double Linked List Ada kelemahan dalam single lingked list, yaitu: pengaksesan hanya dilakukan satu arah. Jika harus dilakukan banyak operasi terhadap elemen suksesor dan juga predesesor (Tidak perlu memorisasi Prec). Perlu fasilitas untuk memudahkan pengaksesan data secara bolak balik untuk pencarian dan pengurutan data
Double Linked List terdiri dari tiga bagian: Info (isi linked list) Prev (menunjuk alamat sebelum) Next (menunjuk alamat sesudah) PREV INFO NEXT
Ciri Double Linked List Elemen pertama : First(L) Elemen terakhir : Last(L)=P dan Next(P)= Nil List kosong : First(L) = Nil; Last(L) = Nil; Untuk sebuah address P yang merupakan address elemen list, maka didefinisikan Next(P) Prev(P) Info(P)
List dengan elemen kosong First(L) = Last(L) = Nil First Last
List dengan 1 elemen First(L)=Last(L) Next(First(L))=Nil Prev(First(L))=Nil First Last
List dengan lebih dari 1 elemen First Last Next(First(L))!= Nil Prev(First(L)) = Nil Next(Last(L)) = Nil Prev(Last(L))!= Nil
Insert First Menambah Elemen Ber-address P sebagai Elemen Pertama pada List Double Pointer Jika List Kosong Maka atur First(L) = P dan Last(L) =P Jika List Tidak dalam keadaan kosong maka : posisikan Next(P) menunjuk pada First(L) posisikan Prev(First(L)) menunjuk pada P Maka First(L) berpindah ke P
Insert First First Last 3 4 P
Insert First First Last 3 4 Next(P) = First (L) P
Insert First First Last Prev(First (L)) = P 3 4 Next(P) = First (L) P
Insert First Last First(L) = P 3 4 P
Delete First Menghapus Elemen Pertama pada List Double Pointer Cek Apakah Link tersebut kosong Jika list hanya terdapat satu elemen maka atur first(l) dan Last(L) menjadi NIL Jika list lebih dari satu elemen maka : Atur First(L) ke Next(First(L)) dimana P = First(L). Atur Prev(First(L)) menjadi NIL sehingga memutus hubungan First(L) menuju P. Atur Next(P) menjadi NIL sehingga memutus hubungan P menuju First(L).
Delete First First Last P 2 4 3 First(L)=P
Delete First First First(L)=Next(First(L)) Last P 2 4 3
Delete First First Last P 2 4 3 Prev(First(L))=NIL
Delete First First Last P 2 4 3 Next(P)=NIL
Tugas 1 Diberikan suatu linked list dengan elemen berikut: Data 5 3 21 17 Alamat 101 102 104 105 Buatlah ilustrasi linked list kemudian insert sebanyak 2 elemen baru dan delete 3 kali dengan : Circular List Double Linked List
Tugas 2 Sebagai seorang programmer harus dapat menganalisis masalah dan membuat pemecahannya. Lihatlah masalah yang ada di sekitar, kemudian rancanglah solusi untuk menyelesaikan masalah tersebut! Deskripsikan ide / gagasan yang dapat diimplementasikan.
Deliverable Tugas Tugas perorangan tulis tangan Dikumpulkan maksimal hari Jum at, 8 Desember 2017