CA01-006

Linked List

Butuh malloc untuk alokasi value ke memory yang berbeda

Pointer next dibuat untuk menyimpan data setelahnya, struct data untuk recursive

Indikator posisi awal dengan if head==NULL

Pergeseran dilakukan dengan next->curr

Tail->Next==NULL Sebagai penanda akhir list

Next adalah alamat curr setelah bergeser

Menghapus/pop dengan menggeser curr/tail ke alamat sebelumnya

Double Linked List
Double linked list adalah single linked list yang memiliki 2 arah. Tidak seperti single linked list yang hanya bergeser dari head ke tail, double linked list bisa begeser ke arah sebaliknya

Keuntungan Double linked List
1.       Implementasinya tidak jauh berbeda dari Single linksed list
2.       Mampu bergeser dua arah
3.       Deletion lebih mudah dilakukan, karena tidak perlu menggunakan pointer node dan pointer node sebelum yang akan dihapus. Double linked list hanya butuh pointer node yang ingin dihapus
4.       Bisa di allocate dan di deallocate dengan lebih mudah
5.       Salah satu data structures yang paling efisien jika pergeseran dengan dua arah dibutuhkan
Aplikasinya
                Navigasi
                Back/forward pages di browser
                Undo/redo
Stack & Queue

Stack/tumpuk merupakan LIFO (Last In First Out) karena hanya memiliki head/kepala. Jika digambarkan, seperti tumpukan piring.
Jika ditambah, piring paling baru ada di paling atas, dan saat diambil, piring paling atas lah yang terambil terlebih dahulu. Jika diasumsikan hanya dapat mengambil/menambah satu piring secara berurutan, maka Stack hanya mengenal kepala/Top/Head, dan piring-piring setelahnya.

Di sisi lain, Queue merupakan FIFO (First In, First Out), karena memiliki head dan tail, jika digambarkan, seperti barisan piring

Stack
Stack dalam Data Structure merupakan struktur yang cara penambahan/penghapusan melalui satu end saja, yaitu kepala/head. Seperti penjelasan awal, Push/Insert data dimasukkan dari depan, begitu juga Pop/Delete
Kegunaan Stack
konsep Stack dalam aplikasi adalah undo/redo browser. Ketika halaman baru dibuka, maka dilakukan insert, dan ketika undo, maka akan dilakukan pop dari halaman sekarang/head. Konsep Stack untuk undo/redo juga diaplikasikan di beberapa text editor.
Queue
Queue dalam Data Structure merupakan struktur yang cara penambahan/penghapusan melalui dua end, yaitu kepala/head dan ekor/tail.  Push/Insert data dilakukan di head/kepala, dan penghapusan dilakukan di ekor/tail.
Kegunaan Queue
Penggunaan Queue ada dalam CPU Scheduling, Multiprogramming, dan asynchronous data transfer. Dalam sehari-hari, seperti urutan panggilan di call center, dan antrian kasir.

Hashing
Hashing adalah pengubahan dari sebuah string of characters ke sebuah ‘kunci’ yang mewakili string awal. Hashing dilakukan untuk memberikan index dan mengambil item yang ada di suatu database karena pencarian akan lebih cepat melalui hash ‘key’ nya yang sudah disingkat, dibandingkan mencari secara keseluruhan.
            Hashing juga biasa digunakan untuk mengencrypt sebuah data. Hash key yang dibentuk biasanya berdasarkan suatu hitungan matematika. Saqlah satu contohnya adalah dengan message. Dari message yang akan dikirim, akan dibuat sebuah hash, dan juga enkripsi untuk pesan itu sendiri. Pesan yang telah dienkripsi dan hash yang telah dibuat akan diterima di end yang lain. Setetalh diterima, maka receiver akan mendecrypt hash dan pesan tersebut. Setelah itu, receiver akan mengenerate hash sesuai dengan pesan yang didecrypt. Jika hash yang di generate receiver sama dengan hash dari sender, maka keduanya akan tersambung.
            Hash table adalah sebuah array/data structure yang menyimpan isi asli dari data tersebut, index table tersebut adalah hash key dari data tersebut, dan value nya adalah data asli yang membuat hash key.
            Hash Function adalah function untuk memetakan data dari beragam ukuran ke sebuah value yang berukuran sama, biasanya berupa integer. Value yang akan dikembalikan dari function tersebut adalah hash key.

ada kemungkinan hash key yang dihasilkan memiliki nilai yang sama. Misalkan menggunakan digit extraction dengan digit ke-4 dan ke-3. Jika ada 2 integer yaitu 2812 dan 7512, keduanya memiliki hash key yang sama, yaitu 21. Hal ini dinamakan tabrakan/collision.
            Maka dari itu, hash function yang baik harus memiliki ciri-ciri sebagai berikut:
1.      Hash key yang dihasilkan dari hash values yang mirip memberikan hasil yang berbeda
2.      Hash function tersebut mudah dimengerti dan mudah untuk dicompute
3.      Hash key yang dihasilkan harus seragam dalam sebuah array/linked list
4.      Hash function yang baik seharusnya menggunakan semua input data








Binary Tree
Tree dalam data structures adalah sebuah struktur yang memiliki tingkatan/hierarki. Konsep Tree sudah sering digunakan dalam sehari-hari, seperti dalam organisasi, makalah, jurnal, dan lain-lain. Dalam computer sendiri, tree digunakan dalam sistem folder dan subfolder.
Beberapa property dari Binary tree adalah:
1.       Node paling banyak di tingkat x adalah 2x
2.       Jumlah node maksumym yang dimiliki binary tree dengan height h adalah 2h+1-1
3.       Height maksimum dari sebuah binary tree dengan jumlah node n adalah n-1
4.       Height minimu dari sebuah binary tree dengan jumlah node n adalah 2log(n)


BST/ Binary Search Tree
BST adalah sebuah cara untuk mengurutkan data berdasarkan Hieerarki. Karena Binary, masing-masing node hanya punya boleh keturunan maksimum dua. Dalam penyusunannya, data yang lebih besar ada di kanan dan data yang lebih kecil ada di kiri, bisa juga sebaliknya.
Insert: insert dalam BST setelah insert pertama adalah
·         Jika node yang dimasukkan lebih besar dari node atasnya, maka keturunannya akan ada di bawah dan diletakkan di sisi kanan node tersebut.
·         Jika node yang dimasukkan lebih kecil dari node atasnya, maka keturunannya aka nada di bawah dan diletakkan di sisi kiri node tersebut
Pop : Pop dalam BST memiliki aturan sebagai berikut:
·         Jika pop dilakukan pada leaf/ node yang tidak memiliki keturunan maka node tersebut akan langsung di pop
·         Jika pop dilakukan pada node yang memiliki keturunan, maka node tersebut akan mencari angka yang lebih besar dari sisi kiri, tetapi juga lebih besar di sisi kanan
Simulasi BST dapat dilihat di https://www.cs.usfca.edu/~galles/visualization/BST.html


Komentar

Postingan populer dari blog ini

CA01-011 Heap & Tries

CA01-004