Saturday, March 8, 2014

Linked List Implementation

Linked List

Linked List merupakan struktur data yang dinamis dimana elemennya dapat ditambah atau dihapus kapan saja karena dijalankan saat run-time, tidak seperti array yang bila memesan memori sebanyak 5, maka bila diisi lebih dari itu akan error dan array dijalankan pada saat compile-time.
Setiap elemen pada Linked List disebut node (titik).
Keuntungan dari Linked List ini yaitu lebih menghemat memori karena elemen tersedia sesuai kebutuhan yang ingin dipakai saja.
Linked List dibedakan menjadi beberapa jenis, seperti :

  1. Single Linked List
  2. Double Linked List
  3. Circular Single Linked List
  4. Circular Double Linked List
Single Linked List

Single Linked List berarti hanya menggunakan single / 1 pointer saja pada Linked Listnya.
Dalam Single Linked List terdapat Push Depan dan Push Belakang untuk menambah, sedangkan Pop Depan, Pop Belakang untuk menghapus. Pada Single Linked List hanya terdapat -> (next).

            
             

Contoh Push Depan :

void pushDepan(int number)
{
    curr = (struct data*)malloc(sizeof(struct data));
    curr->number = number;
    curr->next = NULL;

    if (head==NULL)
    {
        head=tail=curr;
    }
    else
    {
        curr->next = head;
        head = curr;
    }
    tail->next = NULL;
}

Contoh Push Belakang :

void pushBelakang(int number)
{
    curr = (struct data*)malloc(sizeof(struct data));
    curr->number = number;
    curr->next = NULL;

    if(head==NULL)
    {
        head = tail = curr;
    }
    else
    {
        tail->next = curr;
        tail = curr;
    }
}


Contoh Pop Depan :

void popDepan()
{
    if(head==NULL)
    {
        printf("data not found");
        getchar();
        head = tail = curr = NULL;
    }
    else
    {
        curr=head;
        if(head==tail)
        {
            head = tail = NULL;
        }
        else
        {
            head = head->next;
            free(curr);
        }                    
    }
}

Contoh Pop Belakang :

void popBelakang()
{
    if(head==NULL)
    {
        printf("data not found");
        getchar();
        head = tail = curr = NULL;
    }
    else
    {
        curr = head;
        if (head==tail)
            head = tail = NULL;
        else
        {
            while (curr->next!=tail)
                curr = curr->next;
                tail = curr;
                curr = curr->next;
                tail->next = NULL;
        }
        free(curr);
    }
}


Double Linked List

Double Linked List merupakan Linked List yang berpointer ganda (2). Pada Double Linked List terdapat -> (next) dan <- (prev).


                        doouble ll


Circular Single Linked List

Pada Circular Single Linked List, node terakhir berisi pointer yang menunjuk ke node pertama dan tidak ada yang memuat nilai NULL pada list. Pada Linked List ini hanya menggunakan satu pointer (next).

                       single cir ll

Circular Double Linked List

Pada Circular Double Linked List, sama saja seperti Circular Single Linked List, hanya pada Linked List ini menggunakan pointer ganda (prev dan next).

                         double cir ll

No comments:

Post a Comment