Anda di halaman 1dari 7

MODUL 5

SINGLE LINKEDLIST
(SENARAI BERANTAI TUNGGAL)

1. Tujuan :
Mahasiswa dapat mengimplementasikan penggunaan Single Linked List

2. Teori :
Linked list atau disebut juga Senarai Berantai, adalah pengalokasian memori
secara dinamis yang digunakan untuk menyimpan data. Mengapa dinamis karena
alokasi memori ini dilakukan di heap memori. Jika pada array kita dapat menyimpan
data hanya sebanyak yang telah didefinisikan sebelumnya, pada linked list kita dapat
menyimpan data seberapapun yang kita mau
Single Linked List (Senarai Berantai Tunggal) adalah linked list dimana semua
simpul-simpulnya hanya memiliki 1 buah penunjuk yang digunakan untuk mengkaitkan
diri dengan simpul lain yang sejenis yang ada di sebelah kanannya di dalam sebuah
senarai berantai yang sama. Kebanyakan orang menyingkat Single Linked List (Senarai
Berantai Tunggal) hanya dengan sebutan Linked List (Senarai Berantai)

Di dalam konsep Single Linked List ada 3 unsur pendukung yang penting, yaitu :
1. Penunjuk (biasa disebut pointer)
2. Simpul (biasa disebut node)
3. Senarai Berantai atau Single Linked List itu sendiri.

Penunjuk (pointer)
Penunjuk atau pointer yang dimaksud disini alat yang digunakan untuk menunjuk
sebuah simpul contoh:

awal
penunjuk

akhir

kanan

null

Penunjuk dapat menunjuk ke sebuah sebuah simpul, ataupun ke sebuah tempat


kosong (null).

Simpul (Node)
Simpul yang digunakan dalam bab ini adalah simpul tunggal yang digambarkan sebagai
berikut :

kanan

(data)

Simpul yang demikian disebut simpul tunggal karena simpul ini hanya mempunyai
sebuah penunjuk, yaitu kanan. Artinya simpul ini hanya dapat menunjuk ke simpul
yang serupa dengan dirinya yang letaknya disebelah kanannya.
Simpul serta penunjuk dideklarasikan dengan cara :
class Simpul
{
public
String
Simpul

data;
kanan;

public
//----------- konstruktor ---------Simpul(String d)
{
data = d;
}
//------ fungsi untuk mencetak 'simpul' -----------void cetakSimpul()
{
System.out.print(data);
}
}
Simpul awal;
Simpul akhir;

Senarai Berantai (Single Linked List)


Senarai berantai adalah kumpulan simpul-simpul yang terhubung satu dengan yang lain
yang digambarkan sebagai berikut :

awal
akhir

kanan

Agung

Beni

kanan

Cecep

kanan

kanan

Dedi

Eko

kanan

Feri

kanan

NULL

Senarai Berantai di deklarasikan dengan cara sebagai berikut :

class Senarai
{
private
Simpul awal;
Simpul akhir;
public
//----------- konstruktor ------------Senarai()
{
awal = null;
akhir = null;
}
//------- fungsi-fungsi, misalnya :
void tambahAwal(String dd)
{
............
}

---------------

void tambahAkhir(String dd)


{
............
}
Boolean tambahTengah(String kunci, String dd)
{
............
}
Simpul hapusAwal()
{
............

Simpul hapusPilih(String kunci)


{
............
}
void cetakMaju()
{
............
}
}
Senarai mahasiswa = new Senarai();

Program selengkapnya dari Senarai Berantai Tunggal adalah sebagai berikut :

class Simpul
{
public
String data;
Simpul kanan;
public
//----------- konstruktor ---------Simpul(String d)
{
data = d;
}
//----------- fungsi untuk mencetak 'simpul' -----------void cetakSimpul()
{
System.out.print(data);
}
}
class Senarai
{
private
Simpul awal;
Simpul akhir;
public
//----------- konstruktor ------------Senarai()
{
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;
baru.kanan = awal;
awal = baru;
}
//----------- fungsi untuk menambah di akhir 'senarai' ----------void tambahAkhir(String dd)
{
System.out.println("menambah belakang " +dd+" dilakukan...");
Simpul baru = new Simpul(dd);
if( awal==null )
//jika senarai kosong
awal = baru;
else
//jika senarai tidak kosong
akhir.kanan = baru;
baru.kanan = null;
akhir = baru;
}
//----------- fungsi untuk menambah di tengah ---Boolean tambahTengah(String kunci, String dd)
{
System.out.println("menambah tengah " + dd+ " dilakukan...");
Simpul bantu = awal;
while(bantu.data != kunci)
{
bantu = bantu.kanan;
if(bantu == null)
{
System.out.println("---> Nambah " + dd + " Gagal, karena data
" + kunci + " tidak ditemukan");
return false;
}

}
Simpul baru = new Simpul(dd);
if(bantu==akhir)
{
baru.kanan = null;
akhir.kanan = baru;
akhir = baru;
}
else
{
baru.kanan = bantu.kanan;
bantu.kanan = baru;
}
return true;
}
//------- fungsi untuk menghapus sebuah simpul di awal 'senarai' -Simpul hapusAwal()
{
System.out.println("Menghapus diAWAL senarai dilakukan...");
Simpul hapus = awal;
if(awal.kanan == null)
//jika senarai tinggal 1 simpul
akhir = akhir.kanan;
awal = awal.kanan;
return hapus;
}
//------- fungsi untuk menghapus sebuah simpul di
Simpul hapusAkhir()
{
System.out.println("Menghapus diAKHIR senarai dilakukan...");
Simpul bantu = awal;
while (bantu.kanan != akhir)
bantu = bantu.kanan;
Simpul hapus = akhir;
akhir = bantu;
akhir.kanan = null;
return hapus;
}
//------- fungsi untuk menghapus simpul berdasarkan kata kunci --Simpul hapusPilih(String kunci)
{
System.out.println("Menghapus simpul dg kunci dilakukan...");
Simpul bantu = awal;
if (bantu.data == kunci)
//data ditemukan di awal
{
awal = awal.kanan;
return bantu;
}
else
{
while(bantu.kanan.data != kunci)
{
bantu = bantu.kanan;
if(bantu == null)
//data tidak ditemukan
{
return null;
}
}
if (bantu.kanan == akhir) //data ditemukan di akhir
{
Simpul hapus = akhir;
akhir = bantu;
akhir.kanan = null;
return hapus;
}
else
//data ditemukan di tengah
{
Simpul hapus = bantu.kanan;
bantu.kanan = hapus.kanan;
return hapus;
}
}

}
//------- fungsi mencetak maju
void cetakMaju()
{
System.out.print("Mencetak Maju : ");
Simpul bantu = awal;
while(bantu != null)
{
bantu.cetakSimpul();
bantu = bantu.kanan;
System.out.print(", ");
}
System.out.println(" "); //ganti baris
}
}
class ProgramUtamaSenaraiBerantai
{
public static void main(String[] args)
{
Senarai mahasiswa = new Senarai();
mahasiswa.tambahAwal("Agung");
mahasiswa.tambahAwal("Beni");
mahasiswa.tambahAwal("Cecep");
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("");
}
}

3. Praktek
Implementasikan program di atas

4. Latihan

Buatlah sebuah fungsi untuk mencari data (dalam class Senarai). Jika data yang dicari
ada dalam senarai, fungsi dapat memberi informasi bahwa data yang dicari ada,
sedangkan jika data yang dicari tidak ada maka fungsi akan memberikan informasi
data yang dicari tidak ditemukan. Tambahkan dalam program utama (void main)
perintah untuk mencari nama Cecep dan perintah untuk mencari Erwin. Amati apa
hasilnya. Mengapa bisa demikian?

5. Tugas
Diberikan soal oleh dosen pengampu

Anda mungkin juga menyukai