AVL Tree adalah teknik untuk mempercepat searching di BST. AVL Tree memiliki perbedaan dengan tinggi/level hanya 1 dari subtree kiri dan subtree kanan. Jika salah satu subtree tinggi/levelnya 2, maka ada 2 cara untuk menyeimbangkan tree.
1. Single Rotation. Dimana poros rotasinya diambil dari titik ketidakseimbangan dan dijadikan parent.
https://www.freecodecamp.org/news/avl-tree-insertion-rotation-and-balance-factor/
2. Double Rotation. Dimana poros rotasinya diambil dari titik ketidak seimbangan dan dijadikan menjadi subtree dari titik yang berat.
https://cs.stackexchange.com/questions/55717/why-do-we-need-double-rotations-to-rebalance-avl-trees
Tuesday, March 3, 2020
Rangkuman Single Linked List
Perbedaan Linked List dengan Array adalah data array bisa diakses langsung:
Contoh:
[A][B][C][D][E]
[0][1][2][3][4]
Jika kita minta data ke 3, maka diberi "D".
Sedangkan jika linked list harus dimulai dari awal:
[0][1][2][3]
[A][B][C][D]
Jika kita minta node ke 3, maka diberi "A","B",C","D"
Didalam Linked List, ada istilah head and tail, yaitu awal dan akhir dari linked list tersebut.
Lalu, dalam Linked List, diperlukan adanya memory allocation. Jika array kita set berapa isinya, di Linked List harus membuat linked list baru di alokasikan memorynya.
Lalu, untuk melepas alokasi memory, diperlukan penggunaan free, tidak seperti array yang hanya dibiarkan saja elemen datanya kosong.
Pembuatan linked list memerlukan penggunaan data type struct.
Contoh:
struct LinkedList {
int value;
struct LinkedList *next;
}; *head, *tail = 0;
Untuk memasukkan data selanjutnya diperlukan, diperlukan penambahan malloc.
Contoh:
struct LinkedList *node = (struct LinkedList*) malloc(sizeof(struct LinkedList));
node->value=5;
node->next=head;
head = node;
Jika ingin menghapus, menggunakan function ini:
Untuk memprint Linked List, menggunakan:
struct LinkedList* value = head;
while (value)
{
printf("%d -> ", value->data);
value = value->next;
}
Untuk function push, bisa menggunakan:
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
Lalu, untuk pop, bisa menggunakan:
if (*headRef == NULL)
return -1;
struct LinkedList* head = *headRef;
int result = head->data;
(*headRef) = (*headRef)->next;
free(head);
return result;
Reference:
https://www.techiedelight.com/pop-operation-in-linked-list/
Ppt Dastruct
Contoh:
[A][B][C][D][E]
[0][1][2][3][4]
Jika kita minta data ke 3, maka diberi "D".
Sedangkan jika linked list harus dimulai dari awal:
[0][1][2][3]
[A][B][C][D]
Jika kita minta node ke 3, maka diberi "A","B",C","D"
Didalam Linked List, ada istilah head and tail, yaitu awal dan akhir dari linked list tersebut.
Lalu, dalam Linked List, diperlukan adanya memory allocation. Jika array kita set berapa isinya, di Linked List harus membuat linked list baru di alokasikan memorynya.
Lalu, untuk melepas alokasi memory, diperlukan penggunaan free, tidak seperti array yang hanya dibiarkan saja elemen datanya kosong.
Pembuatan linked list memerlukan penggunaan data type struct.
Contoh:
struct LinkedList {
int value;
struct LinkedList *next;
}; *head, *tail = 0;
Untuk memasukkan data selanjutnya diperlukan, diperlukan penambahan malloc.
Contoh:
struct LinkedList *node = (struct LinkedList*) malloc(sizeof(struct LinkedList));
node->value=5;
node->next=head;
head = node;
Jika ingin menghapus, menggunakan function ini:
if ( head->value == x ) { head
= head->next; free(curr);
};else { while
( curr->next->value != x ) curr = curr->next; struct
tnode *del = curr->next; curr->next
= del->next; free(del);};
Untuk memprint Linked List, menggunakan:
struct LinkedList* value = head;
while (value)
{
printf("%d -> ", value->data);
value = value->next;
}
Untuk function push, bisa menggunakan:
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
Lalu, untuk pop, bisa menggunakan:
if (*headRef == NULL)
return -1;
struct LinkedList* head = *headRef;
int result = head->data;
(*headRef) = (*headRef)->next;
free(head);
return result;
Reference:
https://www.techiedelight.com/pop-operation-in-linked-list/
Ppt Dastruct
Subscribe to:
Posts (Atom)