PENGERTIAN
Senarai berantai (bahasa
Inggris: linked list) atau kadang-kadang disebut dengan senarai
bertaut atau daftar bertaut dalam ilmu komputer merupakan
sebuah struktur data yang digunakan untuk menyimpan
sejumlah objek data biasanya secara terurut sehingga memungkinkan penambahan,
pengurangan, dan pencarian atas elemen data
yang tersimpan dalam senarai dilakukan secara lebih efektif. Pada praktiknya
sebuah struktur data memiliki elemen yang digunakan untuk saling menyimpan
rujukan antara satu dengan lainnya sehingga membentuk sebuah senarai abstrak,
tiap-tiap elemen yang terdapat pada senarai abstrak ini seringkali disebut
sebagai node. karena mekanisme rujukan yang saling terkait inilah
disebut sebagai senarai berantai.
Sebuah senarai berantai dengan tiap-tiap node yang terdiri atas dua elemen,
data integer, dan elemen rujukan ke node
berikutnya
Senarai berantai
merupakan bentuk struktur data paling umum dan sederhana yang banyak digunakan
untuk mengimplementasikan model struktur data lainnya, termasuk antrian, stack,
ataupun larik assosiatif.
KEUNTUNGAN
DAN KERUGIAN
Keuntungan utama
pemanfaatan senarai berantai dibandingkan larik, ataupun senarai biasa adalah kemudahan dan
efektifitas kerja yang lebih baik dalam hal menambah, mengurangi, serta mencari
suatu elemen/node yang terdapat dalam senarai. Hal tersebut dimungkinkan karena
elemen-elemen yang terdapat pada sebuah senarai berantai tidak ditempatkan pada
sebuah blok memori komputer seperti halnya larik ataupun senarai biasa,
melainkan tiap-tiap elemen/node tersebut tersimpan dalam blok memori terpisah,
penambahan, pengurangan, ataupun penggantian node dapat dilakukan dengan
mengubah elemen rujukan atas tiap-tiap node yang terkait. Kerugiannya, sebuah
senarai berantai tidak memungkinkan pengaksesan elemen secara acak, dalam
artian untuk dapat mengakses node ke tiga pada contoh di atas harus dilakukan
dengan cara mengunjungi elemen-elemen sebelumnya, dimulai dari elemen pertama,
ke dua, seterusnya hingga pada lokasi elemen yang dimaksudkan.
JENIS-JENIS LINKED LIST
· Senarai
tunggal / Singly Linked List
Bila struktur data
sebuah node hanya memiliki satu tautan atas node berikutnya dalam sebuah
senarai, maka senarai tersebut dinamakan sebagai senarai tunggal.
Senarai tunggal dengan tiap-tiap node yang terdiri atas dua elemen, data integer, dan elemen rujukan ke node berikutnya
Berikut adalah coding untuk
membuat Singly Linked List
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Linked_List
{
class orang //untuk deklarasi link dengan
tipe data ‘orang’
{
public String nama;
public orang next;
}
class Program
{
static void Main(string[] args)
{
//deklarasi variable dengan tipe
data ‘orang’
orang orang_pertama = new orang();
orang orang_kedua = new orang();
orang orang_ketiga = new orang();
//pengisian variable
orang_pertama.nama = "Budi";
orang_kedua.nama = "Susi";
orang_ketiga.nama = "Aldi";
//membuat link
orang_pertama.next = orang_kedua;
orang_kedua.next = orang_ketiga;
//untuk menampilkan linked list
while (orang_pertama!=null)
{
Console.WriteLine(orang_pertama.nama);
orang_pertama = orang_pertama.next;
}
Console.ReadKey();
}
}
}
|
Berikut adalah screenshots jika anda berhasil
· Senarai
ganda / Doubly Linked List
Berbeda halnya dengan
senarai tunggal, pada senarai ganda, struktur data atas tiap-tiap node memiliki
rujukan pada node sebelum dan berikutnya. Sebagian algoritma membutuhkan taut
ganda, contohnya sorting dan reverse traversing.
Senarai ganda dengan tiap-tiap node yang terdiri atas tiga elemen, data
integer, dan dua elemen rujukan ke node sebelum serta berikutnya
Berikut adalah coding
untuk membuat Doubly Linked List :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Doubly_Link_List
{
class doubly
{
public String nama;
public doubly prev;
public doubly next;
}
class Program
{
static doubly head = new doubly();
static doubly tail = new doubly();
static void push(doubly new_data)
{
if (head == null && tail ==
null) //kondisi ketika linked list masih kosong
{
head = tail = new_data; //data
yang baru menjadi ‘head’ sekaligus ‘tail’
}
else //kondisi ketika linked list sudah berisi
{
tail.next = new_data; //menghubungkan
tail dengan data yang baru
new_data.prev = tail; //menghubungkan
data yang baru dengan tail
tail = new_data; //memindah posisi tail di data yang
baru
/*mengapa memindahkan posisi
tail ke data yang baru karena data yang baru terletak di paling belakang atau
paling terakhir*/
}
}
static void view()
{
doubly x = head;
while (x != null)
{
Console.WriteLine(x.nama);
x = x.next;
}
}
static void Main(string[] args)
{
doubly x = new doubly();
x.nama = "Susi";
push(x);
doubly y = new doubly();
y.nama = "Andre";
push(y);
doubly z = new doubly();
z.nama = "Dicky";
push(z);
view();
Console.ReadKey();
}
}
}
|
· Senarai
sirkular / Circulary Linked List
Pada dua jenis
senarai sebelumnya, node terakhir dalam senarai tersebut merujuk pada null yang
artinya akhir dari sebuah senarai, begitu pula null sebagai
rujukan node sebelumnya pada node pertama bila senarai yang dimaksudkan adalah senarai
ganda. Pada senarai sirkular, informasi rujukan pada node terakhir akan merujuk
pada node pertama, dan rujukan pada node pertama akan merujuk pada node
terakhir bila yang digunakan sebagai dasar implementasi adalah senarai ganda.
Berikut adalah coding untuk membuat
Circulary Linked List
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Circulary_Linked_List
{
class circulary
{
public String nama;
public circulary next;
}
class Program
{
static void Main(string[] args)
{
circulary tail = new circulary();
circulary a = new circulary();
a.nama = "Yono";
circulary b = new circulary();
b.nama = "Budi";
circulary c = new circulary();
c.nama = "Chandra";
tail=c; //untuk menunjukkan bahwa
c ada di posisi tail
a.next = b; //untuk menghubungkan
tiap list
b.next = c;
c.next = a;
while (tail!=null)
//perintah ini akan dilakukan
terus menerus karena tail tidak pernah ‘null’
{
Console.WriteLine(tail.nama);
tail = tail.next;
}
Console.ReadKey();
}
}
}
|
Berikut adalah screenshot jika anda berhasil





0 komentar:
Posting Komentar