Monday, March 2, 2020

LINKED LIST


Linked list adalah bagian struktur data yang biasa disebut juga senarai berantai adalah sebuah rangkaian yang terdiri dari data dan alamat elemen record selanjutnya(pointer) yang biasa juga disebut node.  Dalam sebuah linked list terdapat istilah head  dan tail.

·         Head = Elemen yang berada di posisi pertama dalam suatu linked list.

·         Tail = Elemen yang berada di posisi terakhir dalam suatu linked list.

Ada beberapa jenis linked list sebagai berikut:

1.       Single Linked List

Single linked list merupakam suatu linked list yang haya memiliki satu variable pointer saja, diana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail tersebut menunju ke NULL. Pembuatan Single Linked List dapat menggunakan 2 metode:
•     LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
•     FIFO (First In First Out), aplikasinya : Queue (Antrean)







Contoh:

 struct Mahasiswa{

            char nama[25];

            int usia;

            struct Mahasiswa *next;

}*head,*tail;



2.      Double Linked List

Salah astu kelemahhan single linked list adalah pointer hanya dapat bergerak satu arah saja, maju/mundur atau, kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak ke satu arah saja. Double linked list merupakan suatu linked list yang memiliki dua pointer, yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumya, sehingga linked list tersebut dapat menunjuk ke dua arah data. Setiap head dan tailnya juga menunjuk ke NULL.





Contoh:

Struct Mahasiswa{

            char nama[25];

 int usia;

            struct Mahasiswa *next,*prev;

}*head,*tail



3.       Circular Linked List

Dalam circular linked list, node terakhir dalam struktur memiliki pointer yang mengarah ke node pertama(head), jadi tidak ada pointer yang menunjuk ke NULL. Ada dua jenis circular linked list, yaitu:

a.       Circular single linked list



b.       Circular doubly linked list

Circular doubly linked list merupakan double linked list yang node terakhirnya menunjuk ke ke node awal yang menunjuk ke  node terakhir.





Berikut adalah operasi-operasi yang terdapat dalam linked list:

-          Insert : menambahkan sebuah node baru ke dalam suatu linked list

-          IsEmpty : menentukan apakah linked list kosong atau tidak.

-          Find first : mencari elemen pertama pada linked list.

-          Find next : mencari elemen seudah elemen yang ditunjuk now.

-          Retrieve : mengambil elemen yang ditunjuk oleh now, elemen tersebut lalu dikembalikan oleh fungsi.

-          Update : megnubah elemen  yang ditunjuk oleh now dengan isi dari sesuatu.

-          Delete now : menghapus elemen yang ditunjuk oleh now, jika yang diihapus adalah elemen pertama dari linked list(head), head akan berpindah ke elemen berikut.

-          Delete head : menghapus elemen yang ditunjuk head, dan head berpindah ke elemen berikutnya.

-          Clear : menghapus inked list yang sudah ada. Fungsi ini wajib dilakukan bila ingin mengakhiri program yang menggunakan linked list. Jika dilakukan, data data yang dialokasikan ke memori program senelumnya akan tetap tertinggal di dalam memori.



Contoh coding:

                Doubly linked list

                                Struct tnode{

                                Int value;

                                Struct tnonde *next;

                                Struct tnode *prev;

                                };

Struct tnode *head = 0;

Struct tnode *tail = 0;



Implementasi:

                Insert :

                                Code baru dibelakang tail:

                                Struct tnode *node = (struct tnode*) malloc(sizeof(struct tnode));

Node ->value = x;

Node->next = NULL;

Node -> prev = tail;

Tail -> next = node;

Tail -> node;



Code baru diantara head dan tail:

Struct tnode *a = ??;

Struct tnode *b = ??;

//code baru akan ditaro diantara a dan b

Struct tnode *node = (struct tnode*) malloc(sizeof(struct tnode));

Node -> value = x;

Node -> next = b;

Node -> prev = a;

A -> next = node;

B -> prev = node;

                Delete:

                                Jika node yang dihapus adalah node satu satunya:

                                Free(head);

                                Head = NULL;

                                Tal = NULL;

                                Jika node yang ingin dihapus adalah head:

                                Head = head -> next;

                                Free(head -> prev);

                                Tail -> next = NULL;

                                Jika node yang ingin dihapus adalah tail:

                                Tail = tail -> prev;

                                Free(tail -> next);

                                Tail -> next = NULL;

                                Jika node yang dihapus bukanlah head atau tail:

                                Struct tnode *curr = head;

                                While(curr -> next -> value != x) curr = curr -> next;

                                Struct tnode *a = curr;

                                Struct tnode *del = curr -> next;

                                Struct tnode *b = curr -> next -> next;

                                A -> next = b;

                                B -> prev = a;

                                Free(del);



Source:

https://zoneblog123.blogspot.com/2018/04/pengertian-linked-list-beserta-jenis.html
alvinstrukturdata.blogspot.com/2016/01/apa-itu-linked-list.html


(approved by mr. henry chong)

No comments:

Post a Comment