Postingan

HEAP and TRIES

Gambar
HEAP Heaps adalah binary tree yang nodenya dapat direpresentasikan dalam sebuah array. Type of Heap A. Max Heap Max yang berarti parentnya lebih besar daripada childnya. Elemen terbesar pada Max Heap terdapat di root tree dan semakin kebawah artinya semakin kecil. B. Min Heap Min yang berarti parentnya lebih kecil daripada childnya. Elemen terbesar pada Min Heap terdapat di root tree dan semakin kebawah artinya semakin besar. Heap dapat diimplementasikan menggunakan linked list tapi lebih mudah menggunakan array. C. Min Max Heap Ini adalah case unik atau spesial dari heap. Max dan min bergantian pada setiap level. Urutan level dari heap berupa min(dimulai dari root) lalu max lalu min lagi dan seterusnya. Pada bagian min akan selalu ganjil dan max akan selalu genap. Di dalam heap terdapat 2 metode yaitu insertion dan deletion. Max Heap Insertion step 1 : membuat node baru di akhir dari heap step 2 : memasukkan nilai baru ke node tersebut ste...

AVL Tree

Gambar
Pada dasarnya AVL Tree ini adalah Binary Search Tree namun yang lebih seimbang atau balance karena pasti total node kiri dan kanan selisih tingginya tidak akan lebih dari 1. Sedangkan di BST bisa saja tinggi node kiri dan kanan tidak seimbang sehingga bisa menyebabkan proses pencarian, insert, maupun delete lebih lama yaitu n sedangkan dengan AVL Tree proses pencarian,insert, atau delete menjadi log n. Contoh hasil BST jika dengan insert 2, 5, 7, 8, 13: Contoh hasil AVL Tree jika dengan insert yang sama: Untuk menyeimbangkan node tersebut, AVL Tree menggunakan rotasi atau rotation. Rotation ini dibagi menjadi 2 yaitu single rotation dan double rotation. rotation ini terjadi akibat perbedaan selisih tinggi node kiri dan kanan yang lebih dari 1. Contoh single rotation Contoh double rotation

Stack & Queue

Gambar
Stack & Queue Queue adalah sebuah konsep yang dapat diimplementasikan menggunakan linked list atau array. Queue menggunakan prinsip First In First Out(FIFO) yang berarti data yang pertama masuk akan menjadi yang pertama keluar. Berikut contoh gambaran mengenai Queue. Pada gambar tersebut merupakan sebuah antrian, bagi siapa yang masuk pertama maka akan dilayani pertama kali dan keluar lebih cepat. Jika kita mengimplementasikan Queue pada C maka operator yang digunakan adalah pushtail dan pophead yang dapat dilihat pada kodingan diatas bab ini. Stack adalah sebuah konsep yang dapat diimplementasikan menggunakan array atau linked list juga. Stack menggunakan prinsip Last In First Out(LIFO) yang berarti data yang terakhir kali masuk akan menjadi yang pertama keluar. Berukut contoh gambaran mengenai Stack. Pada gambar tersebut bisa dicontohkan seperti tumpukan sebuah buku yang dimana jika ingin mengambil buku yang bawah maka harus mengambil buku yang atas terlebih dahulu. ...

Binary Search Tree

Berikut kodingan saya sendiri mengenai Binary Search Tree. #include<stdio.h> #include<stdlib.h> int flag = 0; struct node{ int angka; struct node *left; struct node *right; }; struct node *NodeBaru(int InputanAngka){ //bkin structnya buat ditempatin di akar paling bawah struct node *temp = (struct node*) malloc (sizeof(struct node)); temp->angka = InputanAngka; temp->left=temp->right=NULL; } struct node *MasukkanAngka(struct node *ROOT,int InputanAngka){ //klo misal akar yang ditempatinya NULL yauda tinggal dimasukkin datanya if(ROOT==NULL){ return NodeBaru(InputanAngka); } //bakal pindah akar ke kiri teros klo lebih kecil smpe nemu NULL^ if(InputanAngka < ROOT->angka){ ROOT->left = MasukkanAngka(ROOT->left, InputanAngka); } //bakal pindah akar ke kanan teros klo lebih besar dr smua angka smpe nemu NULL^ else if(InputanAngka > ROOT->angka){ ROOT->right = MasukkanAngka(ROOT->right, InputanAngka); } } struct node *Car...

Summary

Gambar
Linked List Pada pertemuan kedua kelas besar kemarin saya belajar mengenai cara membuat linked list di C. Setelah saya mempelajarinya kemarin, saya juga mencoba membuat linked list buatan saya sendiri. Berikut codingan linked list saya : #include<stdio.h> #include<stdlib.h> #include<string.h> struct Node{ int test; char nama[1000]; struct Node *next; }*head,*curr,*tail,*temp1,*temp2; void pushhead(int a,char nama[]){ curr = (struct Node*)malloc(sizeof(struct Node)); curr -> test = a; strcpy(curr->nama,nama); if(head==NULL){ head=curr; tail=curr; tail->next=NULL; } else{ curr->next = head; head = curr; } } void pushtail(int a,char nama[]){ curr = (struct Node*)malloc(sizeof(struct Node)); curr -> test = a; strcpy(curr->nama,nama); if(head==NULL){ head=curr; tail=curr; tail->next=NULL; } else{ tail->next = curr; curr->next=NULL; tail = curr; } } void poptail(){ curr=head; while(curr->next->nex...