1. LINKED LIST (SINGLY & DOUBLY) — WEEK 8
1. Konsep & Class Node
- Singly: Data + Next.
- Doubly: Data + Next (Maju) + Prev (Mundur).
public class Node {
public int Data;
public Node Next;
public Node Prev; // Khusus Doubly
}
2. Rumus Coding (Hafalan Wajib)
Insert Front (Depan):
baru.Next = Head;
if (Head != null) Head.Prev = baru;
Head = baru;
Insert Back (Belakang):
Node h = Head;
while (h.Next != null) h = h.Next; // Loop ke ujung
h.Next = baru;
baru.Prev = h; // Sambung balik
Insert Order (Ascending) — PENTING!
if (Head == null || Head.Data >= baru.Data)
InsertFront(baru);
else {
Node h = Head;
// Cari posisi: berhenti jika Next > baru
while (h.Next != null && h.Next.Data < baru.Data)
h = h.Next;
// Sisipkan
baru.Next = h.Next;
h.Next = baru;
}
Delete Front: Head = Head.Next; (Doubly: if(Head!=null) Head.Prev = null;)
Delete Back: Loop sampai h.Next.Next == null, lalu h.Next = null;
3. Visualisasi Pointer
Soal: Head.Next.Next.Next.Prev = Head.Next;
Analisa: Ubah Prev milik Sate (Node 4) ke Siomay (Node 2).
[Bakso] <===> [Siomay] <===> [Kwetiau] ----> [Sate]
^ ^ |
| | |
| |____________________________|
| (Jalur Baru)
(Target) Prev Sate loncat ke sini
Hasil: List rusak. Pointer Next Kwetiau ke Sate, tapi Prev Sate ke Siomay.
2. BINARY SEARCH TREE (BST) — WEEK 10
1. Logika & Traversal
- Aturan: Kecil &to; Kiri, Besar &to; Kanan.
- PreOrder: Root &to; Kiri &to; Kanan.
- InOrder: Kiri &to; Root &to; Kanan (Pasti Urut).
- PostOrder: Kiri &to; Kanan &to; Root.
2. Hapus Node (Deletion Logic)
- Leaf: Hapus langsung.
- 1 Anak: Parent bypass ke Cucu.
- 2 Anak: Ganti nilai dengan Successor (Min Kanan) atau Predecessor (Max Kiri), lalu hapus node aslinya.
3. Contoh Soal: Delete 2 Anak
Soal: Hapus Node 175 (Punya anak 90 & 200).
- Step 1: Cari Successor (Terkecil di kanan). Successor = 200.
- Step 2: Ganti nilai 175 jadi 200.
- Step 3: Hapus node 200 yang lama.
SEBELUM:
175 -> (Kiri: 90, Kanan: 200)
SESUDAH:
200 -> (Kiri: 90, Kanan: null)
3. AVL TREE (BALANCING) — WEEK 12
1. Rumus Penting
- Height: 1 + Max(Kiri, Kanan). (Leaf=1).
- Balance Factor (BF): Kanan - Kiri.
- Unbalanced: Jika BF ≤ -2 atau ≥ +2.
2. Tabel Rotasi (+ Kanan, - Kiri)
| Parent, Child | Case | Solusi |
| (- , -) | Left-Left | Single Right (Parent putar Kanan) |
| (+ , +) | Right-Right | Single Left (Parent putar Kiri) |
| (- , +) | Left-Right | Double L-R |
| (+ , -) | Right-Left | Double R-L |
3. Visualisasi Rotasi (Insert 46, 83, 87)
Analisa: 46 (BF=+2), 83 (BF=+1). Case Right-Right (+,+). Solusi: Single Left pada 46.
KONDISI AWAL (RUSAK): HASIL ROTASI:
[46] (BF=+2) [83] (BF=0)
\ / \
[83] (BF=+1) ---> [46] [87]
\ (BF=0) (BF=0)
[87] (BF=0)
4. SORTING ALGORITHMS — WEEK 13
1. Simple Sorts (O(n²))
Bubble Sort (Descending): Cek tetangga. Jika Kiri < Kanan, TUKAR.
| Pass | Array | Aksi |
| 1.1 | [35, 33, 42, 10] | 35>33 (OK) |
| 1.2 | [35, 42, 33, 10] | Swap 33, 42 |
| 1.3 | [35, 42, 33, 10] | 33>10 (OK) |
| Final | [42, 35, 33, 10] | Sorted |
Selection Sort: Cari Max/Min, tukar ke depan.
Insertion Sort: Ambil, selipkan ke posisi pas.
while (j>0 && arr[j-1] >= temp) {
arr[j] = arr[j-1]; j--;
}
2. Advanced Sorts (O(n log n))
- Merge Sort: Divide & Conquer.
- Quick Sort: Pakai Pivot.
- Heap Sort (Langkah):
- Build Max-Heap (Parent > Child).
- Swap Root (Terbesar) dengan elemen terakhir.
- Heapify (Perbaiki heap).
- Ulangi langkah 2-3.
3. Radix Sort (O(nk))
Urutkan: 170, 45, 802 (Ascending)
- Satuan: 170, 802, 45 &to; 170, 802, 45.
- Puluhan: 802, 45, 170 &to; 802, 45, 170.
- Ratusan: 045, 170, 802 &to; 45, 170, 802.
5. CATATAN AKHIR (RINGKASAN CEPAT)
- BST InOrder = Hasil pasti urut.
- AVL (+,+) = Single Left Rotation.
- AVL (-,-) = Single Right Rotation.
- Bubble = Tukar tetangga.
- Selection = Cari Juara (lempar ke depan).
A. BUBBLE SORT (FULL ITERATION)
Data: 170, 45, 75, 90, 802, 24, 2, 66
| Iterasi | Array State (Ascending) |
| 1 | 45, 75, 90, 170, 24, 2, 66, 802 |
| 2 | 45, 75, 90, 24, 2, 66, 170, 802 |
| 3 | 45, 75, 24, 2, 66, 90, 170, 802 |
| 4 | 45, 24, 2, 66, 75, 90, 170, 802 |
| 5 | 24, 2, 45, 66, 75, 90, 170, 802 |
| 6 | 2, 24, 45, 66, 75, 90, 170, 802 |
| 7 | 2, 24, 45, 66, 75, 90, 170, 802 |
B. INSERTION SORT (FULL ITERATION)
| Pass | Proses & Hasil |
| 1 | 45, 170, 75... (45 disisip) |
| 2 | 45, 75, 170, 90... (75 disisip) |
| 3 | 45, 75, 90, 170, 802... (90 disisip) |
| 4 | 45, 75, 90, 170, 802, 24... (802 tetap) |
| 5 | 24, 45, 75, 90, 170, 802, 2... (24 disisip depan) |
| 6 | 2, 24, 45, 75, 90, 170, 802... (2 disisip depan) |
| 7 | 2, 24, 45, 66, 75, 90, 170, 802 (66 disisip tengah) |
C. SELECTION SORT (FULL ITERATION)
| Pass | Min Value & Swap Target | Array Result |
| 1 | Min=2 -> Swap Index 0 | 2, 45, 75, 90, 802, 24, 170, 66 |
| 2 | Min=24 -> Swap Index 1 | 2, 24, 75, 90, 802, 45, 170, 66 |
| 3 | Min=45 -> Swap Index 2 | 2, 24, 45, 90, 802, 75, 170, 66 |
| 4 | Min=66 -> Swap Index 3 | 2, 24, 45, 66, 802, 75, 170, 90 |
| 5 | Min=75 -> Swap Index 4 | 2, 24, 45, 66, 75, 802, 170, 90 |
| 6 | Min=90 -> Swap Index 5 | 2, 24, 45, 66, 75, 90, 170, 802 |
| 7 | Min=170 -> Swap Index 6 | 2, 24, 45, 66, 75, 90, 170, 802 |
D. RADIX SORT (FULL TABLE)
Iterasi 1: Digit Satuan
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
170 90 | | 802 2 | | 24 | 45 75 | 66 | | | |
Iterasi 2: Digit Puluhan
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
802 02 | | 24 | | 45 | | 66 | 170 75 | | 90 |
Iterasi 3: Digit Ratusan
| 0 | 1 | 2..7 | 8 | 9 |
| 002, 024, 045, 066, 075, 090 | 170 | | 802 | |
Hasil: 2, 24, 45, 66, 75, 90, 170, 802
E. AVL TREE CASES (WEEK 13 & 12) + TREE VISUAL
1. WEEK 13: INSERT MAJU (RR CASE)
Input: 20, 50, 90, 150, 175, 200
STEP 1 (20, 50, 90):
20 (+2)
\
50 (+1) ---> ROTATE LEFT (20) ---> 50
\ / \
90 20 90
STEP 2 (150, 175):
90 (+2)
\
150 (+1) ---> ROTATE LEFT (90) ---> 150
\ / \
175 90 175
STEP 3 (200):
150 (+2)
\
175 (+1) ---> ROTATE LEFT (150) ---> 175
\ / \
200 150 200
2. WEEK 12: INSERT MUNDUR (LL CASE)
Input: 100, 80, 60, 40, 20, 10
STEP 1 (100, 80, 60):
100 (-2)
/
80 (-1) ---> ROTATE RIGHT (100) ---> 80
/ / \
60 60 100
STEP 2 (40, 20):
60 (-2)
/
40 (-1) ---> ROTATE RIGHT (60) ---> 40
/ / \
20 20 60
3. WEEK 13: QUICK SORT TRACE
Data: 38, 81, 22, 48, 13, 69, 93, 14, 45, 58, 79, 72
1. PIVOT = 72 (Last Element)
2. PARTITIONING:
Left Scan -> Cari > 72 -> Ketemu 81
Right Scan -> Cari < 72 -> Ketemu 58
SWAP(81, 58)
Array: 38, [58], 22, 48, 13, 69, 93, 14, 45, [81], 79, |72|
Next Left -> 93
Next Right -> 45
SWAP(93, 45)
Final Swap Pivot to Middle.
F. WEEK 14 PRACTICE & REKURSIF
1. WEEK 14: BST & AVL (Insert 5)
KONDISI SEBELUM INSERT 5:
46
/ \
36 83
/ / \
30 67 87
INSERT 5 (Kiri 30):
Node 36 jadi Unbalanced (-2). Child 30 (-1).
CASE: Left-Left.
SOLUSI: Rotate Right (36).
30
/ \
5 36
2. TRACE REKURSIF: fab(5) (Visual Tree)
[fab 5]
/ \
[fab 4] [fab 3]
/ \ / \
[fab 3] [fab 2][fab 2][fab 1]
/ \ / \ / \ |
[fab 2][f 1][f 1][f 0]... 1
/ \ | | |
[f 1][f 0] 1 1 1
| |
1 1
TOTAL: 8 (Ada 8 node leaf bernilai 1)