Senarai Berantai Dua Arah Kepala
Tujuan Untuk mengetahui simpul sebelum dan sesudahnya Untuk dapat melakukan travelsal yang dilakukan mulai dari simpul terakhir Untuk mempermudah pengaksesan, misalnya ketika melakukan penambahan di simpul akhir, dan melakukana penghapusan terhadap simpul akhir
Defenenisi struktur Data Simpul = ^Data Data = Record Info : Tipe Data Kiri,Kanan: Simpul End; Kepala^.info Kepala New(Kepala) Kepala^.Kiri = Nil Kepala^.Kanan = Nil Kepala^.Kiri Kepala^.Kanan
Menambah Simpul di awal Kepala Kepala a2 Baru Baru Diskusikan : Algoritma Untuk menambah Simpul
Procedure Tambah1(x:tipedata) New(baru) Baru^.info = x If kepala^.kanan = nil then Baru^.kanan = Kepala^.Kanan Baru^.Kiri = Kepala Kepala^.kanan = baru Else Kepala^.kanan^.kiri = baru fi
Menambah Simpul di Tengah Penambahan Simpul Ditengah, secara prinsipnya adalah sama dengan penambahan simpul setelah simpul kepala, namun dibutuhkan sebuah variabel bantu untuk mengetahui posisi sebelum simpul yang baru Proses untuk mencari posisi bantu Bantu = Kepala While Baru^.info > Bantu^.Kanan^.info Do Bantu = bantu^.kanan E-while
Menambah Simpul di Tengah Menyambung simpul yang baru ke List Kepala dilakukan dengan proses : a b d Kepala c Bantu Baru
Menambah Simpul di Tengah Kepala c Bantu Baru Baru^.Kanan = Bantu^.Kanan Baru^.kiri = Bantu Bantu^.Kanan ^.kiri = Baru Bantu^.Kanan = Baru
Procedure Tambah2( x :tipedata) New(Baru) Baru^.Info = x Bantu = Kepala While Baru^.info > Bantu^.Kanan^.info Do Bantu = bantu^.kanan E-while Baru^.Kanan = Bantu^.Kanan Baru^.kiri = Bantu Bantu^.Kanan ^.kiri = Baru Bantu^.Kanan = Baru
Menambah Simpul Di Akhir Penambahan simpul di akhir pada prinsipnya sama dengan penambahan simpul pada senarai berantai satu arah, dimana tahapan yang harus dilakukan duluan adalah melakukan penelusuran untuk menemukan simpul terakhir ( Jika Kanan = nil) Akhir = Kepala While akhir^.kanan<> Nil Do Akhir = Akhir^.Kanan E-while
Menambah Simpul Di Akhir c d Kepala Akhir Baru
Menambah Simpul Di Akhir c d Kepala Akhir Baru^.Kanan = nil Baru^.Kiri = akhir Akhir^.Kanan = baru Baru
Procedure Tambah3(x :tipe data) New(baru) Baru^.info = x Baru^.Kanan = nil Akhir = kepala While Akhir^.kanan <> nil Do akhir = akhir^.kanan E-while Baru^.Kiri = akhir Akhir^.kanan = baru
Menghapus Simpul Menghapus Simpul Awal Penghapusan simpul dapat dilakukan jika list tidak kosong List tidak kosong ditandai dengan kepala^.kanan <> nil if kepala^.kanan = nil then List Kosong, tidak ada yang akan dihapus else Penghapusan dapat dilakukan
Menghapus Simpul a b c Kepala target Hapus Hapus = kepala^.kanan Hapus^.Kanan^.kiri = Kepala Kepala^.Kanan = Hapus^.Kanan Dispose(Hapus)
Procedure Del1 If kepala^.Kanan = nil Then List kosong Else Hapus = kepala^.kanan Hapus^.kanan^.Kiri =Kepala Kepala^.kanan = Hapus^.Kanan Dispose(Hapus)
Menghapus Simpul Akhir b c Kepala target Akhir If Kepala^.Kanan = nil Then List Kosong Else Akhir = kepala^.kanan While Akhir^.kanan <> nil Do akhir = akhir^.kanan E-while Akhir^.Kiri^.Kanan = Nil Dispose(Akhir)
Traversal Kelemahan yang terjadi pada list satu arah adlah ketika harus melakukan pembacaan atau pencarian dimana dilakukan dari data yang paling terakhir tidak dapat dilakukan, kecuali harus melakukan perubahan terhadap list, yaitu memutar list Dengan list dua arah hal ini dapat dilakukan dengan langkah-langkah sbb : Tempatkan bantu berada pada posisi simpul terakhir Lakukan pergerakan Mundur sampai bantu berada pada posisi kepala
Traversal Menempatkan bantu ke simpul terakhir Bantu = kepala While Bantu^.Kanan<> nil Do bantu = bantu^.Kanan E-while Bantu a b c Kepala
Traversal Membaca mundur sampai ke Kepala While Bantu<> Kepala Do write bantu^.info bantu = bantu^.kiri E-while a b c Kepala Bantu
Traversal Bantu =kepala While Kepala^.kanan <> nil do bantu = bantu^.kanan E-while While Bantu<> kepala Do write Bantu^.info Bantu = bantu^.kiri
Senarai Berantai Dua Arah Berputar Kepala Simpul awal dikenal dengan Kepala^.kanan Simpul Akhir dikenal dengan Kepala^.kiri
Deklarasi struktur data Simpul = ^data Data = record info : tipe data Kiri,kanan : simpul End; Kepala New(kepala) Kepala^.Kiri = Kepala Kepala^.Kanan =kepala
Menambah Simpul di awal Baru^.kanan = Kepala x1 Kepala Baru^.kiri = kepala baru x1 Kepala
Procedure TambahK1(x :tipe data) New(baru) Baru^.info=x Baru^.kanan = kepala^.kanan Baru^.kiri = kepala Kepala^.kanan = baru If kepala^.kiri = keala then Kepala^.kiri = baru fi
Procedure TambahK3(x:tipe data) New(baru) Baru^.info (x) Baru^.kanan = kepala Baru^.kiri= kepala^.kiri Kepala^.Kiri^.kanan= baru Kepala^.kiri = baru