{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/stack-vs-queue/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WatchMeCode"}},"markdownRemark":{"id":"b86ad59c-5002-58c8-be83-5f125db941d9","excerpt":"Queue Queue（隊列）是一種先進先出（FIFO, First-In-First-Out）的資料結構，元素按照加入的順序被處理。Queue 的基本操作包括： enqueue: 將元素加入隊列的尾部。 dequeue: 移除並回傳隊列的頭部元素。 peek: 查看隊列的頭部元素但不移除。 isEmpty…","html":"<h3>Queue</h3>\n<p>Queue（隊列）是一種先進先出（FIFO, First-In-First-Out）的資料結構，元素按照加入的順序被處理。Queue 的基本操作包括：</p>\n<ul>\n<li><strong>enqueue</strong>: 將元素加入隊列的尾部。</li>\n<li><strong>dequeue</strong>: 移除並回傳隊列的頭部元素。</li>\n<li><strong>peek</strong>: 查看隊列的頭部元素但不移除。</li>\n<li><strong>isEmpty</strong>: 檢查隊列是否為空。</li>\n<li><strong>size</strong>: 取得目前隊列的長度。</li>\n</ul>\n<p>Queue 在許多情境中非常有用，例如任務排程、廣度優先搜尋（BFS）等。以下是一個簡單的 Queue 實現範例：</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Queue<span class=\"token operator\">&lt;</span><span class=\"token constant\">T</span><span class=\"token operator\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> items<span class=\"token operator\">:</span> Record<span class=\"token operator\">&lt;</span><span class=\"token builtin\">number</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">T</span><span class=\"token operator\">></span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> head<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">private</span> tail<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">/**\n   * 將元素加入隊列 (Producer 用)\n   */</span>\n  <span class=\"token function\">enqueue</span><span class=\"token punctuation\">(</span>element<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">[</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>tail<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> element<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>tail<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 移除並回傳隊頭元素 (Consumer 用)\n   */</span>\n  <span class=\"token function\">dequeue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">T</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">undefined</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>isEmpty<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token keyword\">undefined</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> item <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">[</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">delete</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">[</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> item<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 取得目前的隊列長度\n   */</span>\n  <span class=\"token keyword\">get</span> <span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>tail <span class=\"token operator\">-</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 檢查隊列是否為空\n   */</span>\n  <span class=\"token keyword\">get</span> <span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">boolean</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 查看隊頭元素但不移除\n   */</span>\n  <span class=\"token function\">peek</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">T</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">undefined</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">[</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// --- 使用範例 ---</span>\n<span class=\"token keyword\">interface</span> <span class=\"token class-name\">Task</span> <span class=\"token punctuation\">{</span>\n  id<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">;</span>\n  data<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">const</span> taskQueue <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Queue<span class=\"token operator\">&lt;</span>Task<span class=\"token operator\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 生產者，將任務加入隊列</span>\ntaskQueue<span class=\"token punctuation\">.</span><span class=\"token function\">enqueue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> data<span class=\"token operator\">:</span> <span class=\"token string\">\"處理圖片\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\ntaskQueue<span class=\"token punctuation\">.</span><span class=\"token function\">enqueue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> data<span class=\"token operator\">:</span> <span class=\"token string\">\"發送郵件\"</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>taskQueue<span class=\"token punctuation\">.</span><span class=\"token function\">peek</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// 查看隊頭任務</span>\n\n<span class=\"token comment\">// 消費者，從隊列中取出任務並處理</span>\n<span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>taskQueue<span class=\"token punctuation\">.</span>isEmpty<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> task <span class=\"token operator\">=</span> taskQueue<span class=\"token punctuation\">.</span><span class=\"token function\">dequeue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">正在處理：</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>task<span class=\"token operator\">?.</span>data<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h4>BigO 分析</h4>\n<table>\n<thead>\n<tr>\n<th>操作</th>\n<th>說明</th>\n<th>時間複雜度</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">enqueue</code></td>\n<td>尾端加入元素</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">dequeue</code></td>\n<td>從頭端移除元素</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">peek</code></td>\n<td>查看頭部元素</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">isEmpty</code></td>\n<td>檢查是否為空</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">size</code></td>\n<td>取得目前長度</td>\n<td><strong>O(1)</strong></td>\n</tr>\n</tbody>\n</table>\n<h4>Shift</h4>\n<p>在 JavaScript 中，陣列的 <code class=\"language-text\">shift</code> 方法會移除並回傳陣列的第一個元素。雖然 <code class=\"language-text\">shift</code> 的行為類似於 Queue 的 <code class=\"language-text\">dequeue</code> 操作，但它的時間複雜度是 <strong>O(n)</strong>，因為在移除第一個元素後，陣列中的所有其他元素都需要向前移動一個位置。因此，在需要頻繁進行隊列操作的情況下，使用 <code class=\"language-text\">shift</code> 可能會導致效能問題。</p>\n<h3>Stack</h3>\n<p>Stack（堆疊）是一種後進先出（LIFO, Last-In-First-Out）的資料結構，元素按照加入的順序被處理，但最後加入的元素會最先被處理。Stack 的基本操作包括：</p>\n<ul>\n<li><strong>push</strong>: 將元素加入堆疊的頂部。</li>\n<li><strong>pop</strong>: 移除並回傳堆疊的頂部元素。</li>\n<li><strong>peek</strong>: 查看堆疊的頂部元素但不移除。</li>\n<li><strong>isEmpty</strong>: 檢查堆疊是否為空。</li>\n<li><strong>size</strong>: 取得目前堆疊的高度。</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Stack<span class=\"token operator\">&lt;</span><span class=\"token constant\">T</span><span class=\"token operator\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> items<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">/**\n   * 推入元素 (Push)\n   */</span>\n  <span class=\"token function\">push</span><span class=\"token punctuation\">(</span>element<span class=\"token operator\">:</span> <span class=\"token constant\">T</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span>element<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 彈出最上層元素 (Pop)\n   */</span>\n  <span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">T</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">undefined</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>isEmpty<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> <span class=\"token keyword\">undefined</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 查看最上層元素但不移除 (Peek)\n   */</span>\n  <span class=\"token function\">peek</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token constant\">T</span> <span class=\"token operator\">|</span> <span class=\"token keyword\">undefined</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">[</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 檢查是否為空\n   */</span>\n  <span class=\"token keyword\">get</span> <span class=\"token function\">isEmpty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">boolean</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">.</span>length <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 目前堆疊高度\n   */</span>\n  <span class=\"token keyword\">get</span> <span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token builtin\">number</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">.</span>length<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">/**\n   * 清空堆疊\n   */</span>\n  <span class=\"token function\">clear</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">:</span> <span class=\"token keyword\">void</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>items <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// --- 使用範例：瀏覽器歷史紀錄 (Undo 功能) ---</span>\n<span class=\"token keyword\">const</span> historyStack <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Stack<span class=\"token operator\">&lt;</span><span class=\"token builtin\">string</span><span class=\"token operator\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 用戶瀏覽頁面</span>\nhistoryStack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"首頁\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nhistoryStack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"產品列表\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nhistoryStack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"產品詳情頁\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">目前頁面: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>historyStack<span class=\"token punctuation\">.</span><span class=\"token function\">peek</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// \"產品詳情頁\"</span>\n\n<span class=\"token comment\">// 用戶點擊「上一頁」</span>\n<span class=\"token keyword\">const</span> lastPage <span class=\"token operator\">=</span> historyStack<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">回退自: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>lastPage<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// \"產品詳情頁\"</span>\n<span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">現在回到: </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>historyStack<span class=\"token punctuation\">.</span><span class=\"token function\">peek</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// \"產品列表\"</span></code></pre></div>\n<h4>BigO 分析</h4>\n<table>\n<thead>\n<tr>\n<th>操作</th>\n<th>說明</th>\n<th>時間複雜度</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code class=\"language-text\">push</code></td>\n<td>將元素放到頂部</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">pop</code></td>\n<td>移除頂部元素</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">peek</code></td>\n<td>查看頂部元素</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">isEmpty</code></td>\n<td>檢查是否為空</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">size</code></td>\n<td>取得目前高度</td>\n<td><strong>O(1)</strong></td>\n</tr>\n<tr>\n<td><code class=\"language-text\">clear</code></td>\n<td>清空整個 Stack</td>\n<td><strong>O(1)</strong> 或 <strong>O(n)</strong></td>\n</tr>\n</tbody>\n</table>\n<h3>Conclusion</h3>\n<p>Stack 適合處理「最後進來的先處理」的場景，例如函式呼叫堆疊、Undo/Redo、DFS（深度優先搜尋）等。</p>\n<p>Queue 則適合處理「先進來的先處理」的場景，例如任務排程、BFS（廣度優先搜尋）、生產者－消費者模式等。</p>\n<p>在現今有 AI 輔助撰寫程式碼的情況下，Stack 與 Queue 的實作細節其實已經不是重點。更重要的是理解它們背後的行為模型，以及在什麼情境下應該選擇哪一種資料結構。</p>\n<p>實務開發中，我們更常面對的是這些選擇：</p>\n<ul>\n<li>什麼時候該用遞迴，什麼時候該用迴圈</li>\n<li>什麼時候需要更進階的演算法</li>\n<li>什麼時候應該為了可讀性而做取捨</li>\n</ul>\n<p>難的是在正確的情境下做出合適的選擇。</p>","frontmatter":{"title":"Stack and Queue Algorithm","date":"March 23, 2026","description":"2025 年末，在處理公司一些專案，像是之前文章的 Producer-Consumer Pattern...等，其實本質上就是 Queue 的延伸概念及實際使用情境，所以今天就想來寫一下 Stack 與 Queue 的演算法差異。","tags":["javascript"]}},"previous":{"fields":{"slug":"/react-hook-form-101/"},"frontmatter":{"title":"React Hook Form with zod"}},"next":null},"pageContext":{"id":"b86ad59c-5002-58c8-be83-5f125db941d9","previousPostId":"57342f51-7c63-5b9d-87c1-97398ce29e5d","nextPostId":null}},
    "staticQueryHashes": ["2841359383","465575234"]}