LINKED LIST
SUDAH KENAL DEKAT DENGAN LINKED LIST BELUM?
Sebelum Anda membaca materi ini , ada baiknya anda sudah memahami Data Structure dasar seperti penggunaan struct , array , malloc , free() dan pointer . Dengan begitu , Anda dapat memahami materi ini dengan baik !
A. Oke , jadi apa itu Linked List ?
- Linked List adalah struktur data dinamis yang pengimplementasiannya memakai pointer yang mengarah pada suatu nodes ( elemen ) dan strukturnya menyesuaikan size data yang dibutuhkan atau dengan kata lain fleksibel dimana dapat membesar atau mengecil sesuai data yang telah diinput .
Kok Mirip Array ? Terus apa bedanya ?
Nah , prinsip Linked List bersama Array itu sama , tetapi ditinjau dari implementasi penggunaannya mau dimana , mau dipakai pada apa , dan seefektif apa pengaplikasiannya . Untuk lebih jelasnya , simak kutipan tabel di bawah ini ^_^ !
B. Jenis-jenis Linked List sendiri gimana ?
Nah Linked List sendiri ada 3 "spesies"-nya . Apa aja sih? , ada :
- Single Linked List / Singly Linked List / Senarai Berantai
Nah spesies yang ini hanya menggunakan satu variable pointer saja dalam menyimpan data.
Pada Linked List , terdapat 3 bagian utama krusial , yakni Head , Mid , dan Tail . - Circular Linked ListNah untuk yang satu ini memiliki karakteristik dimana node yang pertama akan menunjuk ke node terakhir dan sebaliknya sehingga ia tidak memiliki nilai atau NULL pada medan sambungannya karena tail menunjuk ke head.
- Double Linked List / Doubly Linked List
Sama seperti Single Linked List , hanya saja terdapat pointer prev dan next . Nah pointer prev ini punya peran penting untuk mempertahankan pointer next dan juga menggeser mundur nodes ( elemen data ) sehingga linked list ini sangat fleksibel namun membutuhkan tambahan memori yang banyak.
C. Sudah mulai rumit ? Pahamin cara kerjanya masing-masing yuk !
Nah sebelum masuk protokol cara kerjanya masing-masing , kita overview dulu nih , di Linked List ini ada terminologi khusus dan tekniknya . Seperti yang sudah kalian baca di atas , asing gak sih ada istilah Head , Mid , Tail ?
Head ini sendiri adalah elemen / node yang berada pada posisi pertama linked list , sedangkan Tail adalah elemen atau node yang berada pada posisi terakhir linked list . Nah udah tau kan Mid itu apa jadinya ?
Adapun teknik khusus pada Linked List , apa aja tuh ?
- PUSH / INSERT untuk menambah data.
- PushHead – Menambah data ke barisan/posisi paling awal
- PushTail – Menambah data ke barisan/posisi paling akhir
- PushMid – Menambah data ke barisan/posisi di tengah (disorting dulu ya ! HARUS !)
- POP / DELETE untuk menghapus data.
- PopHead – Menghapus data paling awal
- PopTail – Menghapus data paling akhir
- PopMid – Menghapus data di tengah (sesuai parameter value)
Oke , mari kita simak satu per satu dan basic understanding code nya !
1. Single Linked List
Coba kalian bayangkan struktur kereta dari kereta pilot depannya hingga belakang , nah untuk Single Linked List strukturnya juga begitu .
Nah untuk Insert/Push data baik dari Head atau Tail-nya disini bagaimana sih ? Kurang lebih codingannnya seperti di bawah ini :
Untuk Push Head :
Kita harus mengalokasikan memori dulu untuk struct Facebook , lalu dia akan mengecek dan men-sanitize dan menetapkan isi Head , Tail , Mid ( dalam coding ini Curr ) bernilai NULL atau tidak ada terlebih dahulu ( jikalau Head isinya kosong ) , namun jika sudah terisi ,head akan diassign ke curr->next lalu si curr(mid) akan menjadi head yang baru.
Sedangkan untuk push Tail / Belakang :
Sama dengan head , namun perbedaannya adalah ketika head nya tidak kosong , maka si Mid(curr) akan di-assign menjadi variable selanjutnya dari si Tail ( karena dari belakang ) , sehingga si Mid menjadi Tail yang baru dan wadah setelah tail di-NULL-kan.
Nah , buat delete/pop Head gimana ? Begini :
Toh logikanya kalau Head-nya kosong tidak ada data, untuk apa kita Pop / Delete Data kan? Nah yang berbeda adalah jika ia terdapat isinya , kita memakai library-built-in function yakni free() untuk mengosongkan data pada variable yang dituju.
Untuk pop/delete Tail :
2. Double Linked List
Untuk Insert Data pada Head :
Untuk Insert Data dari belakang ( PushTail ) :
Untuk pop Head nya bagaimana ? Begini :
Sedangkan untuk pop Tailnya :
3. Circular Linked List
Nah , untuk Linked List yang satu ini dapat diterapkan pada 2 Linked List di atas atau istilahnya di-fusion !
A. Circular Singly Linked List
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar.
B. Circular Doubly Linked List
Terdapat 3 field , apa saja sih ?
-- 1 field pointer yang menunjuk pointer berikutnya "next",
-- 1 field menunjuk pointer sebelumnya " prev ",
-- 1 field yang berisi data untuk node tersebut .
-- 1 field menunjuk pointer sebelumnya " prev ",
-- 1 field yang berisi data untuk node tersebut .
Nah untuk sementara , itu dulu informasi basic linked-listnya ya ! Mohon maaf jika ada kesalahan . Saya juga sangat berterima kasih dan mengapresiasi sumber-sumber yang telah saya kutip karena menjadi bahan pembelajaran pembaca dan saya juga :D ! Selamat mengotak-atik !
Sumber :
https://www.mahirkoding.com/struktur-data-single-linked-list-dengan-bahasa-c/
Comments
Post a Comment