Wednesday, March 18, 2020

Hashing Table & Binary Tree

Hashing Table


Hash table (hash map) is a data structure that implements an associative array  abstract data type, a structure that can map keys to values. A hash table uses a hash function to compute an index, also called a hash code, into an array of buckets or slots, from which the desired value can be found.
Ideally, the hash function will assign each key to a unique bucket, but most hash table designs employ an imperfect hash function, which might cause hash collisions where the hash function generates the same index for more than one key. Such collisions are always accommodated in some way.
Hash table (also, hash map) is a data structure that basically maps keys to values. A hash table uses a hash function to compute an index into an array of buckets or slots, from which the corresponding value can be found.



We will go through a basic Hash Map implementation in C++ that is supporting generic type key-value pairs with the help of templates. It is genuinely not a production-ready implementation of HashMap class, however it simply shows how this data structure can be implemented in C++.


Binary Tree
Unlike Arrays, Linked Lists, Stack and queues, which are linear data structures, trees are hierarchical data structures.
A binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child. It is implemented mainly using Links.
Binary Tree Representation: A tree is represented by a pointer to the topmost node in tree. If the tree is empty, then value of root is NULL. A Binary Tree node contains following parts.
1. Data
2. Pointer to left child
3. Pointer to right child
A Binary Tree can be traversed in two ways:
Depth First Traversal: Inorder (Left-Root-Right), Preorder (Root-Left-Right) and Postorder (Left-Right-Root)
Breadth First Traversal: Level Order Traversal
Binary Search Tree
In Binary Search Tree is a Binary Tree with following additional properties:
1. The left subtree of a node contains only nodes with keys less than the node’s key.
2. The right subtree of a node contains only nodes with keys greater than the node’s key.
3. The left and right subtree each must also be a binary search tree.
Binary Heap
A Binary Heap is a Binary Tree with following properties.
1) It’s a complete tree (All levels are completely filled except possibly the last level and the last level has all keys as left as possible). This property of Binary Heap makes them suitable to be stored in an array.
2) A Binary Heap is either Min Heap or Max Heap. In a Min Binary Heap, the key at root must be minimum among all keys present in Binary Heap. The same property must be recursively true for all nodes in Binary Tree. Max Binary Heap is similar to Min Heap. It is mainly implemented using array.




Monday, March 9, 2020

Stack & Queue

Stack & Queue
STACK
DEFINISI STACK
          Stack (Tumpukan) adalah kumpulan elemen-elemen data yang disimpan dalam satu lajur linear. Kumpulan elemen-elemen data hanya boleh diakses pada satu lokasi saja yaitu posisi ATAS (TOP) tumpukan. Tumpukan digunakan dalam algoritma pengimbas (parsing), algoritma penilaian (evaluation) dan algoritma penjajahan balik (backtrack). Elemen-elemen di dalam tumpukan dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur. Stack (tumpukan) sebenarnya secara mudah dapat diartikan sebagai list (urutan) dimana penambahan dan pengambilan elemen hanya dilakukan pada satu sisi yang disebut top (puncak) dari stack.
Operasi – operasi  yang ada pada Stack 
1. Push : digunakan untuk menembah item pada Stack pada Tumpukan paling atas.
2. Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
3. Clear : digunakan untuk mengosongkan Stack.
4. Create Stack : membuat Tumpukan baru S, dengan jumlah elemen kosong.
5. MakeNull : mengosongkan Tumpukan S, jika ada elemen maka semua elemen dihapus.
6. IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
7. Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.

Kondisi nya yaitu :
1.TOP = NULL, arti nya menunjukan bahwa isi dari nilai TOP masih kosong atau belum ada data, jika di linked list kita menggunakan head tail yang menunjukan awal dan akhir dari data, maka disini kita hanya menggunakan top untuk menandakan nilai teratas dari suatu stack.
2.TOP = MAX-1, arti nya menunjukan bahwa stack sudah full.
Kenapa harus -1 (minus 1), karena stack itu sama seperti array yaitu di mulai dari indeks ke 0, jadi kalau kita memesan 9 tempat, maka kita dapat menggunakan data sebanyak 8 (9-1) dimana di mulai dari 0 sampai 8.
Operasi nya hampir sama dengan linked list, yaitu push dan pop, tetapi yang membedakan adalah top/peek, dimana top ini digunakan untuk kembali ke nilai paling atas dari suatu stack.



Stack mempunyai 2 variable yaitu TOP dan MAX, dimana nilai TOP menunjukan nilai paling atas dari suatu tumpukan sedangkan nilai MAX adalah jumlah maksimum elemen yang dapat ditampung oleh stack tersebut.
QUEUE 
DEFINISI QUEUE
          Queue merupakan suatu struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya adalah operasi penambahan dan penghapusan pada ujung yang bebeda. Penghapusan dilakukan pada bagian depan (front) dan penambahan berlaku pada bagian belakang (Rear). Elemen-elemen di dalam antrian dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur.
          Tumpukan disebut juga “Waiting Line” yaitu penambahan elemen baru dilakukan pada bagian belakang dan penghapusan elemen dilakukan pada bagian depan. Sistem pada pengaksesan pada Queue menggunakan sistem FIFO (First In First Out), artinya elemen yang pertama masuk itu yang akan pertama dikeluarkan dari Queue. Queue jika diartikan secara harfiah, queue berarti antrian. Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang cukup sering kita temui dalam kehidupan sehari-hari, misalnya saat anda mengantri diloket untuk membeli tiket.
         Queue mempunyai 2 variable yaitu front dan rear, front menunjuk terhadap nilai paling depan dari suatu antrian, sedangkan rear menunjuk ke nilai paling belakang dari suatu antrian.
Kondisi nya yaitu :
1.Awal data selalu di mulai dengan front, dan setiap kali penambahan data, maka dia akan menjadi rear yang baru.
2.kalau front = rear = null maka dalam queue tersebut belum ada data.

Operasi nya sama dengan stack, tetapi maksud peek / front di queue adalah kembali ke data yang paling awal dari suatu queue.

Operasi-operasi pada Queue
1. Create Queue (Q) : membuat antrian baru Q, dengan jumlah elemen kosong.
2. Make NullQ (Q) : mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.
3. EnQueue : berfungsi memasukkan data kedalam antrian.
4. DeqQueue : berfungsi mengeluarkan data terdepan dari antrian.
5. Clear : Menghapus seluruh Antrian
6. IsEmpty : memeriksa apakah antrian kosong
7. IsFull : memeriksa apakah antrian penuh.

Setelah mengetahui dasar dari queue, maka kita langsung saja ke coding nya :

struct data{
    int angka;
    data *next;
}*front=NULL,*rear=NULL,*curr;

Ini adalah data yang akan saya gunakan, yaitu angka sebagai nilai yang akan di push, lalu next sebagai pointer untuk menunjuk ke data selanjutnya yang berada di depan rear(data paling belakang), front untuk menunjukan nilai yang paling pertama dari suatu queue, rear untuk menunjukan nilai paling belakang dari suatu queue.

Kenapa front dan rear diberi nilai NULL?
Agar memberi tahu kepada compiler bahwa nilai front dan rear dimulai dengan NULL, sehingga perintah dapat dengan jelas di laksanakan.


1. Push  (nama push di Queue adalah enqueue)

void enqueue(int angka){
curr = (data*)malloc(sizeof(data));
curr->num = angka;

if(!front){
front = rear = curr;
front->next = NULL;
}
else{
rear->next = curr;
rear = curr;
rear->next = NULL;
}
}

2.Pop (nama pop di Queue adalah dequeue)

void dequeue(){
if(front){
curr = front;
front = front->next;
curr->next = NULL;
free(curr);
}
}

3.View (nama view untuk Queue tetap sama saja seperti biasa)


void print(){
if(front){
curr = front;
while(curr){
printf("%d ",curr->num);
curr = curr->next;
}
}
}


Source : https://furqonubd.wordpress.com/2013/05/20/stack-and-queue/