“Linked List: Single & Double”
Oleh: Nama : Rendi Saputra NPM : 140103110022 Kelas : MI/3/A
Jurusan Manajemen Informatika Fakultas Matematika dan IPA Universitas Padjajaran
Linked List Sekilas dan Pengertian •
Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence • Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung dan dinamis. • 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 struct yang terdiri dari beberapa field. Array vs Linked List •
ARRAY : – Statis. – Terbatas dalam menambah / menghapus data. – Random access. – Penghapusan data tidak mungkin.
•
LINKED LIST : – Dinamis . – Tidak terbatas dalam menambah / menghapus data. – Sequential access. – Penghapusan data mudah.
Jenis Linked List
Single Linked List Pengertian Single Linked List 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).
Jenis Single Linked List 1. Single Linked List dengan Head. • •
Dibutuhkan satu buah variabel pointer: head. Head akan selalu menunjuk pada node pertama.
2. Single Linked list dengan Head dan Tail. • •
Dibutuhkan dua buah variabel pointer: head dan tail. Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu menunjuk pada node terakhir.
Deklarasi Single Linked List Deklarasi Node typedef struct TNode { int data; TNode *next; };
Penjelasan: •
Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang bertipe pointer dari TNode • Setelah pembuatan struct, buat variabel haed yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.
3 Unsur Pendukung Konsep Single Linked 1. Penunjuk (biasa disebut pointer ). 2. Simpul (biasa disebut node). 3. Senarai Berantai atau Single Linked List itu sendiri.
1. Penunjuk (pointer)
Penunjuk atau pointer yang dimaksud disini alat yang digunakan untuk menunjuk sebuah simpul. Contoh: awal
akhir
penunjuk kanan
null
Penunjuk dapat menunjuk ke sebuah sebuah simpul, ataupun ke sebuah tempat kosong (null ).
2. Simpul (Node)
Simpul yang digunakan dalam bab ini adalah simpul tunggal yang digambarkan sebagai berikut :
(data)
kanan
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
data;
Simpul
kanan;
public //-----------
konstruktor ----------
Simpul(String d) {
data = d;
} //------
fungsi untuk mencetak 'simpul' ------------
void cetakSimpul() { }
System.out.print(data);
} Simpul awal; Simpul akhir;
3. 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’
kanan
‘Beni’
kanan
‘Cecep’
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();
}
Double Linked List Pengertian Double Link List adalah elemen-elemen yang dihubungkan dengan dua pointer dalam satu elemen dan list dapat melintas baik di depan atau belakang. Elemen double link list terdiri dari tiga bagian: - Bagian data informasi. - Pointer next yang menunjuk ke elemen berikutnya. - Pointer prev yang menunjuk ke elemen sebelumnya. Double Linked list atau disebut juga Senarai Berantai Ganda, hampir sama dengan Single Linked List yang telah dibahas pada lembar 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.
Deklarasi secara umum Double Linked List Type Nama_pointer =
Simpul
Simpul = Record medan_data : tipedata medan_sambungan_kiri, medan_sambungan_kanan : Namapointer EndRecord nama_var_pointer : nama_pointer
Contoh: Type Point=
Data
Data = Record < info
: char
Prev, newxt : Point> Endrecord Awal, akhir: Point
Macam-macam Double Linked List 1. DOUBLE LINKED LIST CIRCULAR (DLLC)
Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double Linked List Circular pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular. Double : field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next. Linked List : node-node tersebut saling terhubung satu sama lain. Circular : pointer next dan prev-nya menunjuk ke dirinya sendiri.
2. DOUBLE LINKED LIST NON CIRCULAR (DLLNC)
Double Linked List Non Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double Linked List Non Circular pointer next dan prev nya menunjuk ke NULL. Dengan adanya 2 pointer penunjuk, next dan prev, DLLNC sangat flexible dibandingkan dengan SLLNC. Double : field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next. Linked List : node-node tersebut saling terhubung satu sama lain. Non Circular : pointer next dan prev-nya menunjuk ke NULL.
3 Unsur pendukung konsep Double Linked List 1. Penunjuk (biasa disebut pointer ) 2. Simpul Ganda (biasa disebut node) 3. Senarai Berantai Ganda atau Double Linked List itu sendiri.
1. Penunjuk (pointer)
Penunjuk atau pointer yang dimaksud disini alat yang digunakan untuk menunjuk sebuah simpul contoh:
awal
penunjuk
kanan
akhir
Penunjuk dapat menunjuk ke sebuah sebuah simpul, ataupun ke sebuah tempat kosong (null ).
2. Simpul (Node)
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.
Simpul serta penunjuk dideklarasikan dengan cara :
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;
3. Senarai Berantai Ganda (Double Linked List)
Seperti senarai berantai tunggal, Senarai berantai Ganda merupakan kumpulan simpul-simpul 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
‘Agung’
kiri
kanan
‘Agung’
kiri
kanan
‘Agung’
kiri
NULL
Senarai Berantai Ganda di deklarasikan dengan cara sebagai berikut :
NULL
class SenaraiGanda
{
private Simpul awal; Simpul akhir; public //-----------
konstruktor -------------
SenaraiGanda() {
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() {
............
}
void cetakMundur() { }
............
}
SenaraiGanda mahasiswa = new SenaraiGanda();