{"id":104766,"date":"2025-10-17T20:00:52","date_gmt":"2025-10-17T13:00:52","guid":{"rendered":"https:\/\/wisewebster.com\/?p=104766"},"modified":"2025-10-10T12:29:36","modified_gmt":"2025-10-10T05:29:36","slug":"contoh-struktur-data","status":"publish","type":"post","link":"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/","title":{"rendered":"15 Contoh Struktur Data, Konsep, Kode dan Use Case"},"content":{"rendered":"<p>Struktur data itu fondasi cara kita menyimpan dan mengambil data. Pilihan yang tepat bikin aplikasi terasa cepat, hemat memori, dan enak di-maintain. Di bawah ini kami bedah contoh struktur data lengkap\u2014apa fungsinya, kapan dipakai, plus contoh kode singkat\u2014agar WiseSob bisa langsung praktik.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Outline:<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewbox=\"0 0 24 24\" version=\"1.2\" baseprofile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#1_Array_Dynamic_Array\" >1. Array (Dynamic Array)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#2_Linked_List_SinglyDoubly\" >2. Linked List (Singly\/Doubly)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#3_Stack\" >3. Stack<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#4_Queue_Deque_Priority_Queue\" >4. Queue, Deque, Priority Queue<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#5_Hash_Table_MapDictSet\" >5. Hash Table (Map\/Dict\/Set)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#6_Tree_Binary_Search_Tree_BST\" >6. Tree &amp; Binary Search Tree (BST)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#7_Heap_Min-HeapMax-Heap\" >7. Heap (Min-Heap\/Max-Heap)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#8_Trie_Prefix_Tree\" >8. Trie (Prefix Tree)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#9_Graph_Adjacency_ListMatrix\" >9. Graph (Adjacency List\/Matrix)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#10_Disjoint_Set_Union-Find\" >10. Disjoint Set \/ Union-Find<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#11_Segment_Tree_Fenwick_Tree_BIT\" >11. Segment Tree &amp; Fenwick Tree (BIT)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#12_B-Tree_BTree\" >12. B-Tree \/ B+Tree<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#13_Skip_List\" >13. Skip List<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#14_Bloom_Filter\" >14. Bloom Filter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#15_LRU_Cache_HashMap_Doubly_Linked_List\" >15. LRU Cache (HashMap + Doubly Linked List)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Ringkasan_Kompleksitas_garis_besar\" >Ringkasan Kompleksitas (garis besar)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Panduan_Memilih_kapan_pakai_yang_mana\" >Panduan Memilih: kapan pakai yang mana<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Contoh_nyata_dari_masalah_ke_struktur\" >Contoh nyata: dari masalah ke struktur<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Anti-pattern_yang_sering_bikin_performa_jeblok\" >Anti-pattern yang sering bikin performa jeblok<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Tips_implementasi_biar_rapi_dan_aman\" >Tips implementasi biar rapi dan aman<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Belajar_lebih_dalam_dari_dokumentasi_resmi\" >Belajar lebih dalam dari dokumentasi resmi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Kesimpulan\" >Kesimpulan<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/wisewebster.com\/en\/contoh-struktur-data\/#Related_Posts\" >Related Posts<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"1_Array_Dynamic_Array\"><\/span>1. Array (Dynamic Array)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> deretan elemen yang diakses lewat indeks. Implementasi modern biasanya \u201cdynamic array\u201d (bisa bertambah otomatis).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> akses acak super cepat (O(1))\u2014misalnya daftar produk di keranjang, cache kecil, buffer UI.<\/li>\n<li><strong>Kelebihan:<\/strong> sederhana, locality of reference bagus (ramah CPU cache), iterasi cepat.<\/li>\n<li><strong>Kekurangan:<\/strong> sisip\/hapus di tengah mahal (O(n)); saat penuh perlu realokasi.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Python list = dynamic array\r\narr = [10, 20, 30]\r\narr.append(40)      # amortized O(1)\r\nx = arr[2]          # O(1) -&gt; 30\r\narr.insert(1, 15)   # O(n)<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"2_Linked_List_SinglyDoubly\"><\/span>2. Linked List (Singly\/Doubly)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> elemen saling terhubung via pointer. <em>Singly<\/em> (satu arah), <em>double<\/em> (dua arah), <em>circular<\/em> bila ekor menunjuk kepala.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> banyak operasi sisip\/hapus di awal\/akhir (O(1)).<\/li>\n<li><strong>Kelebihan:<\/strong> tidak perlu realokasi besar; node bisa disebar di memori.<\/li>\n<li><strong>Kekurangan:<\/strong> akses acak lambat (O(n)); overhead pointer.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">class Node:\r\n    def __init__(self, val, nxt=None):\r\n        self.val, self.next = val, nxt\r\n\r\n# tambah di depan O(1)\r\nhead = Node(3, Node(2, Node(1)))<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"3_Stack\"><\/span>3. Stack<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> LIFO (last in, first out). Push\/pop di ujung yang sama.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> undo\/redo, parsing ekspresi, DFS, backtracking.<\/li>\n<li><strong>Operasi:<\/strong> push O(1), pop O(1), top O(1).<\/li>\n<\/ul>\n<pre><code class=\"language-python\">stack = []\r\nstack.append('A')  # push\r\nstack.append('B')\r\ntop = stack.pop()  # 'B'<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"4_Queue_Deque_Priority_Queue\"><\/span>4. Queue, Deque, Priority Queue<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Queue:<\/strong> FIFO. <strong>Deque:<\/strong> bisa tambah\/hapus di kedua ujung. <strong>Priority Queue (Heap):<\/strong> elemen prioritas tertinggi\/terendah keluar dulu.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> antrian job, BFS, scheduler, rate limiter.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">from collections import deque\r\nq = deque()\r\nq.append('A'); q.append('B')\r\nq.popleft()      # 'A' (O(1))\r\n\r\nimport heapq\r\npq = []\r\nheapq.heappush(pq, (1, \"urgent\"))\r\nheapq.heappush(pq, (5, \"normal\"))\r\nheapq.heappop(pq)  # (1, \"urgent\")<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"5_Hash_Table_MapDictSet\"><\/span>5. Hash Table (Map\/Dict\/Set)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> kunci \u2192 nilai dengan hashing. Rata-rata operasi O(1).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> lookup cepat (userId \u2192 profil), frequency count, indexing kecil.<\/li>\n<li><strong>Kelebihan:<\/strong> sangat cepat untuk akses kunci langsung.<\/li>\n<li><strong>Kekurangan:<\/strong> butuh fungsi hash bagus; ada kemungkinan collision.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># dict &amp; set di Python = hash table\r\nprice = {\"apel\": 10000, \"jeruk\": 12000}\r\nprice[\"apel\"]     # 10000 (O(1) average)\r\nseen = set([1,2,3])<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"6_Tree_Binary_Search_Tree_BST\"><\/span>6. Tree &amp; Binary Search Tree (BST)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> struktur hierarki. <strong>BST:<\/strong> kiri &lt; root &lt; kanan, memudahkan pencarian.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> indeks terurut, fitur autocomplete sederhana, set terurut.<\/li>\n<li><strong>Kelebihan:<\/strong> pencarian\/insert\/hapus O(log n) jika seimbang.<\/li>\n<li><strong>Kekurangan:<\/strong> bisa ter-degenerate (jadi linked list) jika tak di-balance.<\/li>\n<\/ul>\n<p>Versi \u201c<em>self-balancing<\/em>\u201d seperti AVL\/Red-Black menjaga O(log n) stabil.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"7_Heap_Min-HeapMax-Heap\"><\/span>7. Heap (Min-Heap\/Max-Heap)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> pohon biner lengkap yang menjaga elemen ekstrem di root (min atau max).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> top-k, scheduling, Dijkstra, median running.<\/li>\n<li><strong>Operasi:<\/strong> push\/pop O(log n); peek O(1).<\/li>\n<\/ul>\n<pre><code class=\"language-python\">import heapq\r\nscores = [34, 90, 12, 77, 56]\r\ntop3 = heapq.nlargest(3, scores)  # [90, 77, 56]<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"8_Trie_Prefix_Tree\"><\/span>8. Trie (Prefix Tree)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> pohon karakter untuk menyimpan kumpulan string; tiap edge mewakili huruf.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> autocomplete, spell-check, pencarian prefix.<\/li>\n<li><strong>Kelebihan:<\/strong> cek prefix O(L) (L = panjang kata), independen dari jumlah kata.<\/li>\n<li><strong>Kekurangan:<\/strong> boros memori bila data jarang berbagi prefix.<\/li>\n<\/ul>\n<pre><code class=\"language-python\">class TrieNode:\r\n    def __init__(self):\r\n        self.child = {}\r\n        self.end = False\r\n\r\nroot = TrieNode()\r\n# sisip 'cat'\r\nnode = root\r\nfor ch in \"cat\":\r\n    node = node.child.setdefault(ch, TrieNode())\r\nnode.end = True<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"9_Graph_Adjacency_ListMatrix\"><\/span>9. Graph (Adjacency List\/Matrix)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> node (vertex) + edge (bisa berbobot\/berarah). Representasi umum <em>adjacency list<\/em> (hemat) atau <em>matrix<\/em> (akses O(1) untuk cek edge).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> peta jalan, jaringan sosial, dependency, rekomendasi.<\/li>\n<li><strong>Algoritma populer:<\/strong> BFS\/DFS, Dijkstra, Floyd\u2013Warshall, Topological sort.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># adjacency list\r\nG = {\r\n  'A': [('B',5), ('C',1)],\r\n  'B': [('C',2)],\r\n  'C': [('B',1)]\r\n}<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"10_Disjoint_Set_Union-Find\"><\/span>10. Disjoint Set \/ Union-Find<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> mempartisi elemen ke dalam himpunan terpisah, mendukung <em>find<\/em> &amp; <em>union<\/em> sangat cepat (hampir O(1)).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> deteksi siklus, Kruskal (MST), konektivitas komponen.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># rumus umum: path compression + union by rank\r\nparent = list(range(10))\r\nrank = [0]*10\r\n\r\ndef find(x):\r\n    if parent[x] != x:\r\n        parent[x] = find(parent[x])\r\n    return parent[x]\r\n\r\ndef union(a,b):\r\n    ra, rb = find(a), find(b)\r\n    if ra == rb: return\r\n    if rank[ra] &lt; rank[rb]:\r\n        parent[ra] = rb\r\n    elif rank[ra] &gt; rank[rb]:\r\n        parent[rb] = ra\r\n    else:\r\n        parent[rb] = ra\r\n        rank[ra] += 1<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"11_Segment_Tree_Fenwick_Tree_BIT\"><\/span>11. Segment Tree &amp; Fenwick Tree (BIT)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> struktur untuk range query\/update cepat pada array (mis. sum\/min\/max).<\/p>\n<ul>\n<li><strong>Segment Tree:<\/strong> update &amp; query O(log n), fleksibel (bisa min\/max\/gcd).<\/li>\n<li><strong>Fenwick\/BIT:<\/strong> implementasi lebih sederhana untuk sum\/prefix sum O(log n).<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># Fenwick Tree sederhana (1-indexed)\r\nclass BIT:\r\n    def __init__(self, n):\r\n        self.fw = [0]*(n+1)\r\n    def add(self, i, v):\r\n        while i &lt; len(self.fw):\r\n            self.fw[i] += v\r\n            i += i &amp; -i\r\n    def sum(self, i):\r\n        s = 0\r\n        while i &gt; 0:\r\n            s += self.fw[i]\r\n            i -= i &amp; -i\r\n        return s<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"12_B-Tree_BTree\"><\/span>12. B-Tree \/ B+Tree<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> pohon multi-cabang, tinggi rendah, cocok untuk storage disk\/SSD. Banyak dipakai sebagai indeks database dan file system.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> indeks on-disk dengan blok besar; minim page fault.<\/li>\n<li><strong>Bedanya:<\/strong> B+Tree simpan data hanya di daun; node internal hanya pointer\/kunci\u2014bagus buat range scan.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"13_Skip_List\"><\/span>13. Skip List<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> linked list bertingkat dengan \u201cjalur cepat\u201d. Operasi probabilistik O(log n).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> alternatif balanced tree yang lebih mudah diimplementasi.<\/li>\n<li><strong>Catatan:<\/strong> dipakai di beberapa database dan sistem cache.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"14_Bloom_Filter\"><\/span>14. Bloom Filter<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> probabilistic set: cek keanggotaan \u201cmungkin ada\u201d atau \u201cpasti tidak ada\u201d. Sangat hemat memori.<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> filter awal sebelum query mahal (mis. cache, anti-spam, rekomendasi).<\/li>\n<li><strong>Kelebihan:<\/strong> footprint kecil, kecepatan tinggi.<\/li>\n<li><strong>Kekurangan:<\/strong> false positive mungkin; tidak ada delete tanpa trik.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"15_LRU_Cache_HashMap_Doubly_Linked_List\"><\/span>15. LRU Cache (HashMap + Doubly Linked List)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Inti:<\/strong> cache yang membuang item paling lama tidak dipakai. Kombinasi <em>hash map<\/em> (O(1) akses) + <em>doubly linked list<\/em> (O(1) pindah\/hapus).<\/p>\n<ul>\n<li><strong>Kapan dipakai:<\/strong> caching hasil query API, gambar, atau perhitungan berat.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># sketsa LRU: gunakan OrderedDict untuk ringkas\r\nfrom collections import OrderedDict\r\n\r\nclass LRU:\r\n    def __init__(self, cap):\r\n        self.cap = cap\r\n        self.od = OrderedDict()\r\n    def get(self, k):\r\n        if k not in self.od: return None\r\n        self.od.move_to_end(k)  # most recent\r\n        return self.od[k]\r\n    def put(self, k, v):\r\n        if k in self.od:\r\n            self.od.move_to_end(k)\r\n        self.od[k] = v\r\n        if len(self.od) &gt; self.cap:\r\n            self.od.popitem(last=False)  # remove LRU<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Ringkasan_Kompleksitas_garis_besar\"><\/span>Ringkasan Kompleksitas (garis besar)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<table>\n<thead>\n<tr>\n<th>Struktur<\/th>\n<th>Akses<\/th>\n<th>Sisip\/Hapus<\/th>\n<th>Catatan<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Array<\/td>\n<td>O(1) indeks<\/td>\n<td>O(n) tengah<\/td>\n<td>append amortized O(1)<\/td>\n<\/tr>\n<tr>\n<td>Linked List<\/td>\n<td>O(n)<\/td>\n<td>O(1) di ujung<\/td>\n<td>pointer overhead<\/td>\n<\/tr>\n<tr>\n<td>Stack\/Queue<\/td>\n<td>\u2014<\/td>\n<td>O(1)<\/td>\n<td>LIFO\/FIFO<\/td>\n<\/tr>\n<tr>\n<td>Hash Table<\/td>\n<td>O(1)*<\/td>\n<td>O(1)*<\/td>\n<td>*rata-rata, bergantung hash<\/td>\n<\/tr>\n<tr>\n<td>BST seimbang<\/td>\n<td>O(log n)<\/td>\n<td>O(log n)<\/td>\n<td>AVL\/RB tree<\/td>\n<\/tr>\n<tr>\n<td>Heap<\/td>\n<td>\u2014<\/td>\n<td>O(log n)<\/td>\n<td>peek O(1)<\/td>\n<\/tr>\n<tr>\n<td>Trie<\/td>\n<td>O(L)<\/td>\n<td>O(L)<\/td>\n<td>L = panjang kata<\/td>\n<\/tr>\n<tr>\n<td>Union-Find<\/td>\n<td>~O(1)<\/td>\n<td>~O(1)<\/td>\n<td>path compression<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span class=\"ez-toc-section\" id=\"Panduan_Memilih_kapan_pakai_yang_mana\"><\/span>Panduan Memilih: kapan pakai yang mana<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>Butuh akses acak cepat:<\/strong> Array atau Hash Table.<\/li>\n<li><strong>Butuh sisip\/hapus sering di ujung:<\/strong> Linked List, Deque.<\/li>\n<li><strong>Butuh urutan prioritas:<\/strong> Heap (priority queue).<\/li>\n<li><strong>Butuh data terurut + range query:<\/strong> Balanced BST, B-Tree\/B+Tree, Segment Tree\/Fenwick.<\/li>\n<li><strong>Butuh prefix search:<\/strong> Trie.<\/li>\n<li><strong>Butuh jaringan\/relasi:<\/strong> Graph.<\/li>\n<li><strong>Butuh filter cepat hemat memori:<\/strong> Bloom Filter.<\/li>\n<li><strong>Butuh cache yang pintar:<\/strong> LRU (kombinasi hashmap + doubly linked list).<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Contoh_nyata_dari_masalah_ke_struktur\"><\/span>Contoh nyata: dari masalah ke struktur<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li><strong>Autocomplete produk:<\/strong> Trie untuk prefix, Hash Table untuk metadata produk, Heap untuk ranking terlaris.<\/li>\n<li><strong>Rekomendasi teman:<\/strong> Graph untuk relasi, BFS\/DFS untuk jelajah, plus Hash Table untuk visited.<\/li>\n<li><strong>Harga dinamis realtime:<\/strong> Heap untuk top-k harga, Fenwick\/Segment Tree untuk perhitungan agregat cepat per kategori.<\/li>\n<li><strong>Feed berita:<\/strong> Queue untuk pipeline event, LRU cache untuk konten yang sering tampil.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Anti-pattern_yang_sering_bikin_performa_jeblok\"><\/span>Anti-pattern yang sering bikin performa jeblok<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>Memaksa satu struktur untuk semua situasi:<\/strong> misal selalu pakai array padahal perlu lookup kunci \u2192 pakai Hash Table.<\/li>\n<li><strong>Over-optimasi prematur:<\/strong> bikin struktur rumit padahal bottleneck ada di I\/O jaringan.<\/li>\n<li><strong>Salah representasi graf:<\/strong> pakai adjacency matrix untuk graf jarang (sparse) \u2192 boros memori; pakai adjacency list.<\/li>\n<li><strong>Lupa edge case:<\/strong> pointer null di linked list, atau collision handling di hash table.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Tips_implementasi_biar_rapi_dan_aman\"><\/span>Tips implementasi biar rapi dan aman<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>Tulis operasi dasar eksplisit:<\/strong> buat fungsi <code>push\/pop\/peek<\/code> dsb., jangan campur aduk di tempat lain.<\/li>\n<li><strong>Tes unit untuk kasus sudut:<\/strong> list kosong, satu elemen, duplikat kunci, overflow kapasitas.<\/li>\n<li><strong>Pikirkan memori:<\/strong> node kecil tapi banyak tetap mahal; gunakan struktur ringkas bila datanya sederhana.<\/li>\n<li><strong>Profil sebelum optimasi:<\/strong> pakai profiler untuk memastikan perubahan memang mempercepat.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Belajar_lebih_dalam_dari_dokumentasi_resmi\"><\/span>Belajar lebih dalam dari dokumentasi resmi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Kalau ingin memahami detail perilaku list\/dict\/set di Python (yang jadi representasi beberapa struktur di atas), dokumentasi resminya enak dibaca: <a href=\"https:\/\/docs.python.org\/3\/tutorial\/datastructures.html\" target=\"_blank\" rel=\"noopener nofollow\">docs.python.org \u2013 Data Structures<\/a>. Cocok buat memastikan asumsi kompleksitas dan corner case.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Kesimpulan\"><\/span>Kesimpulan<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Memilih struktur data itu soal kecocokan masalah: ada yang unggul di akses acak, ada yang jago urutan prioritas, ada yang spesialis prefix atau relasi. Dengan memahami karakter tiap struktur\u2014beserta trade-off waktu dan memori\u2014kami dan WiseSob bisa menulis kode yang lebih efisien, gampang dirawat, dan tetap ngebut saat skala tumbuh.<\/p>\n<style>\r\n.lwrp.link-whisper-related-posts{\r\n            \r\n            margin-top: 40px;\nmargin-bottom: 30px;\r\n        }\r\n        .lwrp .lwrp-title{\r\n            \r\n            \r\n        }.lwrp .lwrp-description{\r\n            \r\n            \r\n\r\n        }\r\n        .lwrp .lwrp-list-container{\r\n        }\r\n        .lwrp .lwrp-list-multi-container{\r\n            display: flex;\r\n        }\r\n        .lwrp .lwrp-list-double{\r\n            width: 48%;\r\n        }\r\n        .lwrp .lwrp-list-triple{\r\n            width: 32%;\r\n        }\r\n        .lwrp .lwrp-list-row-container{\r\n            display: flex;\r\n            justify-content: space-between;\r\n        }\r\n        .lwrp .lwrp-list-row-container .lwrp-list-item{\r\n            width: calc(25% - 20px);\r\n        }\r\n        .lwrp .lwrp-list-item:not(.lwrp-no-posts-message-item){\r\n            \r\n            \r\n        }\r\n        .lwrp .lwrp-list-item img{\r\n            max-width: 100%;\r\n            height: auto;\r\n            object-fit: cover;\r\n            aspect-ratio: 1 \/ 1;\r\n        }\r\n        .lwrp .lwrp-list-item.lwrp-empty-list-item{\r\n            background: initial !important;\r\n        }\r\n        .lwrp .lwrp-list-item .lwrp-list-link .lwrp-list-link-title-text,\r\n        .lwrp .lwrp-list-item .lwrp-list-no-posts-message{\r\n            \r\n            \r\n            \r\n            \r\n        }@media screen and (max-width: 480px) {\r\n            .lwrp.link-whisper-related-posts{\r\n                \r\n                \r\n            }\r\n            .lwrp .lwrp-title{\r\n                \r\n                \r\n            }.lwrp .lwrp-description{\r\n                \r\n                \r\n            }\r\n            .lwrp .lwrp-list-multi-container{\r\n                flex-direction: column;\r\n            }\r\n            .lwrp .lwrp-list-multi-container ul.lwrp-list{\r\n                margin-top: 0px;\r\n                margin-bottom: 0px;\r\n                padding-top: 0px;\r\n                padding-bottom: 0px;\r\n            }\r\n            .lwrp .lwrp-list-double,\r\n            .lwrp .lwrp-list-triple{\r\n                width: 100%;\r\n            }\r\n            .lwrp .lwrp-list-row-container{\r\n                justify-content: initial;\r\n                flex-direction: column;\r\n            }\r\n            .lwrp .lwrp-list-row-container .lwrp-list-item{\r\n                width: 100%;\r\n            }\r\n            .lwrp .lwrp-list-item:not(.lwrp-no-posts-message-item){\r\n                \r\n                \r\n            }\r\n            .lwrp .lwrp-list-item .lwrp-list-link .lwrp-list-link-title-text,\r\n            .lwrp .lwrp-list-item .lwrp-list-no-posts-message{\r\n                \r\n                \r\n                \r\n                \r\n            };\r\n        }<\/style>\r\n<div id=\"link-whisper-related-posts-widget\" class=\"link-whisper-related-posts lwrp\">\r\n            <h2 class=\"lwrp-title\">Related Posts<\/h2>    \r\n        <div class=\"lwrp-list-container\">\r\n                                            <div class=\"lwrp-list-multi-container\">\r\n                    <ul class=\"lwrp-list lwrp-list-double lwrp-list-left\">\r\n                        <li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/carder-adalah-pelaku-kejahatan-digital-serius\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">Carder Adalah Pelaku Kejahatan Digital Serius<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/7-inovasi-digital-marketing-b2b-bantai-kompetitor\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">7 Inovasi Digital Marketing B2B: Bantai Kompetitor<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/under-maintenance-website-cara-rapi-dan-profesional\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">Under Maintenance Website: Cara Rapi dan Profesional<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/403-forbidden-penyebab-dan-cara-mengatasinya\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">403 Forbidden: Penyebab dan Cara Mengatasinya<\/span><\/a><\/li>                    <\/ul>\r\n                    <ul class=\"lwrp-list lwrp-list-double lwrp-list-right\">\r\n                        <li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/deface-adalah-aksi-merusak-tampilan-website-secara-ilegal\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">Deface Adalah Aksi Merusak Tampilan Website Secara Ilegal<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/apakah-yang-dimaksud-algoritma-ini-penjelasannya\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">Apakah yang Dimaksud Algoritma? Ini Penjelasannya<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/apa-itu-crawl-cara-kerja-mesin-pencari-menemukan-website-kamu\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">Apa Itu Crawl? Cara Kerja Mesin Pencari Menemukan Website Kamu<\/span><\/a><\/li><li class=\"lwrp-list-item\"><a href=\"https:\/\/wisewebster.com\/en\/7-langkah-audit-seo-trik-ampuh-naikkan-ranking\/\" class=\"lwrp-list-link\"><span class=\"lwrp-list-link-title-text\">7 Langkah Audit SEO Trik Ampuh Naikkan Ranking<\/span><\/a><\/li>                    <\/ul>\r\n                <\/div>\r\n                        <\/div>\r\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Struktur data itu fondasi cara kita menyimpan dan mengambil data. Pilihan yang tepat bikin aplikasi terasa cepat, hemat memori, dan enak di-maintain. Di bawah ini kami bedah contoh struktur data lengkap\u2014apa fungsinya, kapan dipakai, plus contoh kode singkat\u2014agar WiseSob bisa langsung praktik. 1. Array (Dynamic Array) Inti: deretan elemen yang diakses lewat indeks. Implementasi modern [&hellip;]<\/p>","protected":false},"author":2,"featured_media":104767,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":26,"footnotes":""},"categories":[450],"tags":[],"class_list":["post-104766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code"],"_links":{"self":[{"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/posts\/104766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/comments?post=104766"}],"version-history":[{"count":4,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/posts\/104766\/revisions"}],"predecessor-version":[{"id":105322,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/posts\/104766\/revisions\/105322"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/media\/104767"}],"wp:attachment":[{"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/media?parent=104766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/categories?post=104766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wisewebster.com\/en\/wp-json\/wp\/v2\/tags?post=104766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}