Contoh implementasi Binary Search Tree:
#include <stdio.h>
#include <stdlib.h>
struct Node
{
int value;
Node *left, *right;
};
Node *root;
Node *createNode(int value)
{
Node* node = (Node*)malloc(sizeof(Node));
node->value = value;
node->left = node->right = NULL;
return node;
}
Node *insert(Node *root, int value)
{
if (!root)
return createNode(value);
if (root->value > value)
root->left = insert(root->left, value);
else if (root->value < value)
root->right = insert(root->right, value);
return root;
}
Node* remove(Node *root, int value)
{
if (!root)
return root;
if (root->value > value)
root->left = remove(root->left, value);
else if (root->value < value)
root->right = remove(root->right, value);
else if (root->value == value)
{
if (root->left == NULL || root->right == NULL)
{
Node *node = root->left != NULL ? root->left : root->right;
if (node)
*root = *node;
else
free(node);
}
else
{
Node* node = root->left;
while (node->right)
node = node->right;
root->left = remove(root->left, node->value);
}
}
return root;
}
void printPreOrder(Node *root) {
if (root) {
printf("%d ", root->value);
printPreOrder(root->left);
printPreOrder(root->right);
}
}
void printInOrder(Node *root) {
if (root) {
printInOrder(root->left);
printf("%d ", root->value);
printInOrder(root->right);
}
}
void printPostOrder(Node *root) {
if (root) {
printPostOrder(root->left);
printPostOrder(root->right);
printf("%d ", root->value);
}
}
int main() {
root = insert(root, 4);
root = insert(root, 5);
root = insert(root, 3);
root = remove(root, 3);
printPreOrder(root);
printInOrder(root);
printPostOrder(root);
}
Tuesday, March 24, 2020
Tuesday, March 10, 2020
Hash Table & Binary Tree
Hash Table
Hash Table adalah struktur data yang memetakan kata kunci (hash) kepada sebuah elemen dalam table. Sehingga elemen yang dicari langsung berada pada kata kunci lokasi penyimpanannya. Namun pada kenyataannya sering ditemukan kondisi dimana kata kunci dua elemen atau lebih dapat bertabrakan (Collision).
2. Operasi - Operasi Dalam Hash Table
Berikut adalah beberapa operasi yang dapat dilakukan dalam suatu hash table:
1. Insert
Memasukan elemen ke dalam sebuah hash table
2. Lookup
Mencari elemen dengan kata kunci
3. Remove
Membuang elemen dengan kata kunci
3. Metode Hashing
Berikut adalah beberapa cara untuk membuat key / hash dari sebuah kata kunci:
1. Lose Lose Algorithm
Adalah suatu metode hashing yang sangat simple, yakni dengan menjumlahkan tiap byte dalam kata kunci. misal; "abc" = 294, dimana 'a' = 97, 'b' = 98, 'c' = 99. Metode tersebut bukanlah cara yang baik, karena Collision dapat dengan mudah terjadi.
2. FNV-1
Fowler-Noll-Vo adalah metode hashing yang diciptakan oleh Glenn Fowler, Landon Curt Noll, dan Kiem-Phong Vo. Metode ini menggunakan Prime dan Basis dari FNV1. berikut adalah contoh pengaplikasiannya.
3. FNV-1a
FNV-1a adalah variasi dari FNV-1 yakni dengan men-XOR kan byte_of_data terlebih dahulu baru dikalikan dengan FNV Prime.
4. Peran Dalam Blockchain
Hash table memiliki peran penting dalam blockchain. blockchain menggunakan Distributed Hash Table. Distributed Hash Table (DHT) merupakan bentuk distribusi data Hash ke dalam jaringan peer to peer. yang mana di dalamnya memuat penyimpanan data, pencarian data, dengan penyimpanan berupa Key & Value Pair.
Binary Tree
1. Definisi Binary Tree
Binary Tree adalah sebuah struktur data yang menyerupai sebuah Tree dan memiliki maksimal dua cabang pada tiap anaknya, yang biasa disebut anak kiri dan anak kanan.
2. Operasi - Operasi Dalam Binary Tree
1. Insert
Memasukan data kedalam Binary Tree, data yang dimasukan harus mengikuti aturan dalam Binary Tree yakni:
- tidak ada data yang bernilai sama.
- jika nilai data lebih kecil dari parent, maka data masuk ke anak kiri
- jika nilai data lebih besar dari parent, maka data masuk ke anak kanan
2. Delete
Membuang data dalam Binary Tree, jika data yang dibuang memiliki anak, maka harus dilakukan salah satu dari dua cara untuk menyambungkan kembali anak tersebut, yakni dengan metode Predecessor atau metode Successor.
3. Print Semua Data
Untuk mengeprint semua data ada tiga metode yang dapat dilakukan:
- Post-Order
- Pre-Order
- In-Order
Referensi :
- PPT Binusmaya
- Geeksforgeeks
Tuesday, March 3, 2020
Stack, Queue & Priority Queue
Setelah mempelajari Linked List, ada beberapa Data Structure yang menerapkan sebagian konsep dari Linked List, yakni Stack, Queue, Priority Queue. nah kali ini kita akan membahas apa yang dimaksud dari ketiga Data Structure tersebut.
1. Stack
Stack adalah suatu tumpukan atau koleksi objek yang menggunakan prinsip Last In First Out (LIFO), yang berarti data yang terakhir kali dimasukkan kedalam Stack akan menjadi data pertama kali keluar dari Stack tersebut. contoh kegunaannya adalah Stack Pointer / Frame Pointer dalam komputer.
2. Queue
Queue adalah suatu koleksi / antrian objek yg menerapkan prinsip Last In Last Out, yang artinya data yang terakhir dimasukan kedalam Queue akan menjadi data yang terakhir keluar. contoh kegunaan Queue adalah pada CPU Scheduling / Disk Scheduling dimana beberapa proses berjalan secara asynchronous dan dibutuhkan sebuah algoritma untuk men-sinkronisasi transfer data, dimana beberapa algoritma CPU Scheduling mengimplementasikan Queue.
3. Priority Queue
Priority Queue sama seperti Queue namun data yang dimasukan lebih dulu disortir (valuenya dipertimbangkan) sehingga data yang paling bermakna valuenya akan keluar paling awal. contoh kegunaannya adalah dalam algoritma Dijkstra & A* (A Star) dimana Queuenya harus terurut berdasarkan distance / heuristic.
Demikian beberapa Data Structure diatas, cukup mirip dengan Linked List bukan? namun stack memiliki implementasi yang cukup berbeda, yakni dengan menggunakan array. sedangkan untuk Queue & Priority Queue dapat menggunakan konsep Linked List sebagai basis implementasinya.
Reference :
- PPT Binusmaya
- Geeksforgeeks
1. Stack
2. Queue
Queue adalah suatu koleksi / antrian objek yg menerapkan prinsip Last In Last Out, yang artinya data yang terakhir dimasukan kedalam Queue akan menjadi data yang terakhir keluar. contoh kegunaan Queue adalah pada CPU Scheduling / Disk Scheduling dimana beberapa proses berjalan secara asynchronous dan dibutuhkan sebuah algoritma untuk men-sinkronisasi transfer data, dimana beberapa algoritma CPU Scheduling mengimplementasikan Queue.
3. Priority Queue
Priority Queue sama seperti Queue namun data yang dimasukan lebih dulu disortir (valuenya dipertimbangkan) sehingga data yang paling bermakna valuenya akan keluar paling awal. contoh kegunaannya adalah dalam algoritma Dijkstra & A* (A Star) dimana Queuenya harus terurut berdasarkan distance / heuristic.
Demikian beberapa Data Structure diatas, cukup mirip dengan Linked List bukan? namun stack memiliki implementasi yang cukup berbeda, yakni dengan menggunakan array. sedangkan untuk Queue & Priority Queue dapat menggunakan konsep Linked List sebagai basis implementasinya.
Reference :
- PPT Binusmaya
- Geeksforgeeks
Subscribe to:
Posts (Atom)