DOUBLE LINKEDLIST
(SENARAI BERANTAI GANDA)
Tujuan :
Mahasiswa dapat mengimplementasikan penggunaan Double Linked List
Teori :
Double Linked list atau disebut juga Senarai Berantai Ganda, hampir sama
dengan Single Linked List yang telah dibahas pada bab sebelumnya, yaitu adalah
pengalokasian memori secara dinamis yang digunakan untuk menyimpan data.
Bedanya Double Linked List lebih flexibel dibanding Single Linked List karena pada
Double Linked List semua simpul-simpulnya yang ada didalamnya memiliki 2 buah
penunjuk yang digunakan untuk mengkaitkan diri dengan simpul lain yang ada di
sebelah kanannya dan di sebelah kirinya.
Di dalam konsep Double Linked List ada 3 unsur pendukung yang penting, yaitu :
1. Penunjuk (biasa disebut pointer)
2. Simpul Ganda (biasa disebut node)
3. Senarai Berantai Ganda atau Double Linked List itu sendiri.
Penunjuk (pointer)
Penunjuk atau pointer yang dimaksud disini alat yang digunakan untuk menunjuk
sebuah simpul contoh:
awal
penunjuk
akhir
kanan
Simpul yang digunakan dalam bab ini adalah simpul ganda yang digambarkan sebagai
berikut :
kiri
(data)
kanan
Simpul yang demikian disebut simpul ganda karena simpul ini mempunyai dua buah
penunjuk, yaitu kiri dan kanan. Artinya simpul ini dapat menunjuk ke dua buah simpul
sekaligus yang serupa dengan dirinya baik yang terletak disebelah kirinya maupun yang
di sebelah kanannya.
class Simpul
{
public
String
data;
Simpul
kiri;
Simpul
kanan;
public
//----------- konstruktor ---------Simpul(String d)
{
data = d;
}
//------ fungsi untuk mencetak 'simpul' --void cetakSimpul()
{
System.out.print(data);
}
}
Simpul awal;
Simpul akhir;
Seperti senarai berantai tunggal, Senarai berantai Ganda merupakan kumpulan simpulsimpul yang terhubung satu dengan yang lain. Hanya bedanya pada senarai ini setiap
simpulnya mempunyai 2 penghubung, kiri dan kanan, seperti gambar berikut :
awal
akhir
kanan
kiri
Agung
kanan
kanan
Agung
kiri
Agung
kiri
kanan
Agung
kiri
NULL
NULL
class Simpul
{
public
String
data;
Simpul
kiri;
Simpul
kanan;
public
//----------- konstruktor ---------Simpul(String d)
{
data = d;
}
//----------- fungsi untuk mencetak 'simpul' -------void cetakSimpul()
{
System.out.print(data);
}
}
class SenaraiGanda
{
private
Simpul awal;
Simpul akhir;
public
//----------- konstruktor ------------SenaraiGanda()
{
awal = null;
akhir = null;
}
//------- fungsi untuk menambah di awal 'senarai' --void tambahAwal(String dd)
{
System.out.println("menambah depan "+dd + "
dilakukan...");
Simpul baru = new Simpul(dd);
if( awal==null )
//jika senarai kosong
akhir = baru;
else
//jika senarai tidak kosong
awal.kiri = baru;
baru.kanan = awal;
baru.kiri = null;
awal = baru;
}
//-----------
return temp;
}
//-- fungsi untuk menghapus sebuah simpul di akhir -Simpul hapusAkhir()
{
System.out.println("menghapus diAKHIR dilakukan...");
Simpul temp = akhir;
if(awal.kanan == null)
//jika senarai tinggal berisi
1 simpul
awal = null;
else
{
bantu.cetakSimpul();
bantu = bantu.kanan;
System.out.print(", ");
}
System.out.println(" "); //ganti baris
}
}
class ProgramUtamaSenaraiBerantaiGanda
{
public static void main(String[] args)
{
SenaraiGanda mahasiswa = new SenaraiGanda();
mahasiswa.tambahAwal("Cecep");
mahasiswa.tambahAwal("Beni");
mahasiswa.tambahAwal("Agung");
mahasiswa.tambahAkhir("Eko");
mahasiswa.tambahAkhir("Feri");
mahasiswa.tambahAkhir("Gunawan");
mahasiswa.tambahAkhir("Hasan");
mahasiswa.tambahTengah("Cecep","Dedy");
mahasiswa.tambahTengah("Parmin","Deni");
System.out.println("");
mahasiswa.cetakMaju();
System.out.println("");
mahasiswa.hapusAwal();
mahasiswa.hapusAkhir();
mahasiswa.cetakMaju();
System.out.println("");
mahasiswa.hapusPilih("Dedy");
mahasiswa.cetakMaju();
System.out.println("");
}
}
Praktek :
1.
2.
Dalam class SenaraiGanda telah ada fungsi untuk membaca isi senarai
secara maju. Buatlah sebuah fungsi di dalam class yang sama untuk
membaca senarai secara mundur.