Rabu, 09 September 2015

Linked List dengan Menggunakan Bahasa Pemrograman C#

PENGERTIAN
Senarai berantai (bahasa Inggrislinked 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;
using System.Threading.Tasks;

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: