CHEATSHEET MASTER: ALGORITMA & STRUKTUR DATA (ANTI-BADAI)

1. LINKED LIST (SINGLY & DOUBLY) — WEEK 8

1. Konsep & Class Node

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

2. Hapus Node (Deletion Logic)

3. Contoh Soal: Delete 2 Anak

Soal: Hapus Node 175 (Punya anak 90 & 200).

SEBELUM: 175 -> (Kiri: 90, Kanan: 200) SESUDAH: 200 -> (Kiri: 90, Kanan: null)

3. AVL TREE (BALANCING) — WEEK 12

1. Rumus Penting

2. Tabel Rotasi (+ Kanan, - Kiri)

Parent, ChildCaseSolusi
(- , -)Left-LeftSingle Right (Parent putar Kanan)
(+ , +)Right-RightSingle Left (Parent putar Kiri)
(- , +)Left-RightDouble L-R
(+ , -)Right-LeftDouble 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.

PassArrayAksi
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))

3. Radix Sort (O(nk))

Urutkan: 170, 45, 802 (Ascending)

  1. Satuan: 170, 802, 45 &to; 170, 802, 45.
  2. Puluhan: 802, 45, 170 &to; 802, 45, 170.
  3. Ratusan: 045, 170, 802 &to; 45, 170, 802.

5. CATATAN AKHIR (RINGKASAN CEPAT)

LAMPIRAN 1: PEMBAHASAN UTUH DARI FILE LATIHAN

A. BUBBLE SORT (FULL ITERATION)

Data: 170, 45, 75, 90, 802, 24, 2, 66

IterasiArray State (Ascending)
145, 75, 90, 170, 24, 2, 66, 802
245, 75, 90, 24, 2, 66, 170, 802
345, 75, 24, 2, 66, 90, 170, 802
445, 24, 2, 66, 75, 90, 170, 802
524, 2, 45, 66, 75, 90, 170, 802
62, 24, 45, 66, 75, 90, 170, 802
72, 24, 45, 66, 75, 90, 170, 802
B. INSERTION SORT (FULL ITERATION)
PassProses & Hasil
145, 170, 75... (45 disisip)
245, 75, 170, 90... (75 disisip)
345, 75, 90, 170, 802... (90 disisip)
445, 75, 90, 170, 802, 24... (802 tetap)
524, 45, 75, 90, 170, 802, 2... (24 disisip depan)
62, 24, 45, 75, 90, 170, 802... (2 disisip depan)
72, 24, 45, 66, 75, 90, 170, 802 (66 disisip tengah)
C. SELECTION SORT (FULL ITERATION)
PassMin Value & Swap TargetArray Result
1Min=2 -> Swap Index 02, 45, 75, 90, 802, 24, 170, 66
2Min=24 -> Swap Index 12, 24, 75, 90, 802, 45, 170, 66
3Min=45 -> Swap Index 22, 24, 45, 90, 802, 75, 170, 66
4Min=66 -> Swap Index 32, 24, 45, 66, 802, 75, 170, 90
5Min=75 -> Swap Index 42, 24, 45, 66, 75, 802, 170, 90
6Min=90 -> Swap Index 52, 24, 45, 66, 75, 90, 170, 802
7Min=170 -> Swap Index 62, 24, 45, 66, 75, 90, 170, 802
D. RADIX SORT (FULL TABLE)

Iterasi 1: Digit Satuan

0123456789
170
90
802
2
2445
75
66

Iterasi 2: Digit Puluhan

0123456789
802
02
244566170
75
90

Iterasi 3: Digit Ratusan

012..789
002, 024, 045, 066, 075, 090170802

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)