8種常見數據結構及其特點簡介

一、8種常見數據結構

1. 數組(Array)

  • 簡介:數組是有序元素的序列,連續內存塊存儲相同類型元素,通過下標直接訪問。數組會為存儲的元素都分配一個下標(索引),此下標是一個自增連續的,數組下標從0開始訪問,
  • 核心特點
    • 查詢速度快;隨機訪問時間復雜度為 O(1)
    • 增刪速度慢;插入/刪除元素需移動后續元素,時間復雜度 O(n)
    • 大小固定(靜態數組)或可擴展(動態數組)。
  • 典型操作:增、刪、改、查。
  • 應用場景:基礎數據批量存儲、矩陣運算、緩存實現。

?


2. 鏈表(Linked List)

  • 簡介:鏈表是由一系列節點Node(也可稱元素)組成,數據元素的邏輯順序是通過鏈表的指針地址實現,通常情況下,每個節點包含兩個部分,一個用于存儲元素的數據,名叫數據域,另一個則指向下一個相鄰節點地址的指針,名叫指針域。節點通過指針連接,根據節點指針指向,分為單向鏈表、雙向鏈表和循環鏈表
  • 核心特點
    • 增刪速度塊;動態分配內存,插入/刪除時間復雜度 (O(1))(已知節點位置時)。
    • 查詢速度慢;隨機訪問效率低(需從頭遍歷,時間復雜度 (O(n)))。
  • 典型操作:頭插、尾插、節點刪除、反轉鏈表。
  • 應用場景:實現棧、隊列、LRU緩存、哈希表沖突處理。

?

?單向鏈表新增、刪除元素演示:


3. 棧(Stack)

  • 簡介后進先出(LIFO)的線性結構,僅允許在棧頂操作。
  • 核心特點
    • 插入(push)和刪除(pop)時間復雜度均為 O(1)
    • 空間復雜度 O(n),需避免棧溢出。
  • 典型操作:壓棧、彈棧、獲取棧頂元素。
  • 應用場景:函數調用棧、表達式求值、括號匹配、回溯算法。


4. 隊列(Queue)

  • 簡介先進先出(FIFO)的線性結構,操作在隊尾(入隊)和隊頭(出隊)。
  • 核心特點
    • 普通隊列插入/刪除時間復雜度 O(1)
    • 支持變體:雙端隊列(Deque)、優先隊列(Priority Queue)
  • 典型操作:入隊、出隊、判空、獲取隊頭元素。
  • 應用場景:任務調度、BFS算法、消息隊列、滑動窗口。


5. 樹(Tree)

  • 簡介分層數據結構,常見類型包括二叉樹、平衡樹、B/B+樹等。
  • 核心特點
    • 二叉樹:每個節點最多兩個子節點
    • 平衡樹(如AVL、紅黑樹):通過旋轉保持高度平衡,保證查詢效率 O(logn)。
  • 典型操作:插入、刪除、查找、遍歷(前/中/后序)。
  • 應用場景:數據庫索引(B+樹)、文件系統、決策樹算法。


6. 圖(Graph)

  • 簡介由頂點(Vertex)和邊(Edge)構成,分為有向圖與無向圖
    • 有向圖:邊不僅連接兩個頂點,并且具有方向;
    • 無向圖:邊僅僅連接兩個頂點,沒有其他含義;
  • 核心特點
    • 鄰接矩陣存儲(空間 (O(n^2)))或鄰接表存儲(空間 (O(n+e)))。
    • 支持權重圖、稀疏圖、稠密圖等變體。
  • 典型操作:遍歷(DFS/BFS)、最短路徑(Dijkstra)、最小生成樹(Prim/Kruskal)。
  • 應用場景:社交網絡、路徑規劃、推薦系統、依賴分析。


7. 哈希表(Hash Table)也稱為散列表

  • 簡介:基于鍵值對(Key-Value)存儲,通過哈希函數映射位置。散列表其實是數組的一種擴展,由數組演化而來。
  • 核心特點
    • 理想情況下查詢/插入/刪除時間復雜度 O(1)。
    • 需處理哈希沖突(鏈地址法、開放尋址法)。
  • 典型操作:插入、刪除、查找、擴容(Rehashing)。
  • 應用場景:字典、緩存(Redis)、唯一性檢查、分布式一致性哈希。


8. 堆(Heap)

  • 簡介:堆可以看做是一棵用數組實現的二叉樹,所以它沒有使用父指針或者子指針。堆根據“堆屬性”來排序,“堆屬性”決定了樹中節點的位置。
    • 分為大頂堆(父節點值 ≥ 子節點)和小頂堆
  • 核心特點
    • 堆化(Heapify)時間復雜度 O(n)。
    • 插入/刪除堆頂元素時間復雜度 O(logn)。
  • 典型操作:插入元素(上浮)、刪除堆頂(下沉)、構建堆。
  • 應用場景:優先隊列、Top K問題、堆排序、定時任務調度。


總結對比

數據結構

插入/刪除時間復雜度

查詢時間復雜度

典型用途

數組

O(n)

O(1)

快速隨機訪問

鏈表

O(1)

O(n)

動態數據操作

棧/隊列

O(1)

O(1)

受限順序操作

哈希表

O(1)

O(1)

高效鍵值存儲

O(logn)

O(1)

極值優先處理


選擇建議:根據場景需求選擇數據結構:

  • 需要快速查詢 → 數組、哈希表。
  • 高頻插入/刪除 → 鏈表、樹、堆。
  • 分層關系 → 樹、圖。
  • 順序約束 → 棧、隊列。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81669.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過mailto:實現web/html郵件模板喚起新建郵件并填寫內容

一、背景 在實現網站、html郵件模板過程中,難免會遇到需要通過郵箱向服務提供方發起技術支持等需求,因此,我們需要通過一個功能,能新建郵件并提供模板,提高溝通效率 二、mailto協議配置說明 參數描述mailto:nameema…

好用但不常用的Git配置

參考文章 文章目錄 tag標簽分支新倉庫默認分支推送 代碼合并沖突處理默認diff算法 tag標簽 默認是以字母順序排序,這會導致一些問題,比如0.5.101排在0.5.1000之后。為了解決這個問題,我們可以把默認排序改為數值排序 git config --global t…

第六十八篇 從“超市收銀系統崩潰”看JVM性能監控與故障定位實戰

目錄 引言:當技術問題遇上生活場景一、JVM的“超市貨架管理哲學”二、收銀員工具箱:JVM監控三板斧三、典型故障診斷實錄四、防患于未然的運維智慧五、結語:從故障救火到體系化防控 引言:當技術問題遇上生活場景 想象一個周末的傍…

tauri2項目打開某個文件夾,類似于mac系統中的 open ./

在 Tauri 2 項目中打開文件夾 在 Tauri 2 項目中,你可以使用以下幾種方法來打開文件夾,類似于 macOS 中的 open ./ 命令功能: 方法一:使用 shell 命令 use tauri::Manager;#[tauri::command] async fn open_folder(path: Strin…

編譯pg_duckdb步驟

1. 要求cmake的版本要高于3.17,可以通過下載最新的cmake的程序,然后設置.bash_profile的PATH環境變量,將最新的cmake的bin目錄放到PATH環境變量的最前面 2. g的版本要支持c17標準,否則會報 error ‘invoke_result in namespace ‘…

GO 語言中變量的聲明

Go 語言變量名由字母、數字、下劃線組成,其中首個字符不能為數字。Go 語言中關鍵字和保留字都不能用作變量名。Go 語言中的變量需要聲明后才能使用,同一作用域內不支持重復聲明。 并且 Go 語言的變量聲明后必須使用。 1. var 聲明變量 在 Go 語言中&…

windows和mac安裝虛擬機-詳細教程

簡介 虛擬機:Virtual Machine,虛擬化技術的一種,通過軟件模擬的、具有完整硬件功能的、運行在一個完全隔離的環境中的計算機。 在學習linux系統的時候,需要安裝虛擬機,在虛擬機上來運行操作系統,因為我使…

XCTF-web-Cat

嘗試輸入127.0.0.1 嘗試127.0.0.1;ls 試了很多,都錯誤,嘗試在url里直接輸入,最后發現輸入%8f報錯 發現了Django和DEBUG 根據Django的目錄,我們使用進行文件傳遞 嘗試?url/opt/api/database.sqlite3,找到了flag

C#、C++、Java、Python 選擇哪個好

選擇哪種語言取決于具體需求:若關注性能和底層控制選C、若開發企業級應用選Java、若偏好快速開發和豐富生態選Python、若構建Windows生態應用選C#。 以Python為例,它因語法簡潔、開發效率高、應用廣泛而在AI、數據分析、Web開發等領域大放異彩。根據TIOB…

CEH Practical 實戰考試真題與答案

什么是 CEH Practical? CEH Practical 是 EC-Council 推出的 Certified Ethical Hacker(CEH)認證項目中的一項高級動手實踐考試。它不同于傳統的理論考試,側重于在真實環境中檢驗考生的實操能力。 CEH Practical 主要亮點 &…

自媒體運營新利器:賬號矩陣+指紋瀏覽器,解鎖流量密碼

你是否因多賬號關聯被平臺封禁?或在多設備間切換賬號效率低下?賬號矩陣與指紋瀏覽器的結合,正是解決這些難題的利器! 一、核心優勢:安全、高效、精準、協同 1**. 保障賬號安全** 指紋瀏覽器模擬設備指紋與兔子住宅…

將 AI 解答轉換為 Word 文檔

相關說明 DeepSeek 風靡全球的2025年,估計好多人都已經試過了,對于理科老師而言,有一個使用痛點,就是如何將 AI 輸出的 mathjax 格式的符號轉化為我們經常使用的 mathtype 格式的,以下舉例說明。 溫馨提示&#xff1…

Tailwind CSS 實戰,基于 Kooboo 構建 AI 對話框頁面(三):實現暗黑模式主題切換

基于前兩篇的內容,為頁面添加主題切換功能,實現網站頁面的暗黑模式: Tailwind css實戰,基于Kooboo構建AI對話框頁面(一)-CSDN博客 Tailwind css實戰,基于Kooboo構建AI對話框頁面(…

主題閱讀輸出-關于成年/成熟的認識-01-學習

快速回顧 學習的最終目的,成年人的學習特點,學習對象的選取(學什么),學習過程的理解,對學習狀態的覺察; 參考來源 書籍 《心發怒放的人生》 《我的第一本人生規劃手冊》 《五維學習力》 《學習的答案》 01-學習是什…

GitLab 18.0 正式發布,15.0 將不再受技術支持,須升級【一】

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

Python+Flask+Html做一個簡單的測試聯調工具

一、場景: 當與外部聯調或者內部需要走一些固定流程,且重復的事情,往往需要測試經常性的配合且做重復的工作的聯調,這時候需要一些工具作為輔助,或者提供給外部 二、框架: 可以通過PythonFlaskHtml做一個…

Qt5、C++11 獲取wifi列表與wifi連接

一、獲取wifi列表 .h 文件內容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…

互聯網大廠Java求職面試:AI與大模型應用集成中的架構難題與解決方案-1

互聯網大廠Java求職面試&#xff1a;AI與大模型應用集成中的架構難題與解決方案-1 場景描述 鄭薪苦&#xff0c;一個看似不靠譜但技術潛力巨大的程序員&#xff0c;在一次針對AI與大模型應用集成的面試中&#xff0c;被一位技術總監級別的人物提問。面試官以嚴肅專業的態度&a…

SpringMVC實戰:動態時鐘

引言 在現代 Web 開發中&#xff0c;選擇一個合適的框架對于項目的成功至關重要。Spring MVC 作為 Spring 框架的核心模塊之一&#xff0c;以其清晰的架構、強大的功能和高度的可配置性&#xff0c;成為了 Java Web 開發領域的主流選擇。本文將通過一個“動態時鐘”的實戰項目…

知行之橋如何將消息推送到釘釘群?

在釘釘平臺中&#xff0c;機器人主要分為企業機器人和自定義機器人兩類。本文將重點介紹如何通過自定義機器人&#xff0c;實現將知行之橋 EDI 系統的通知消息高效推送至釘釘群&#xff0c;幫助企業第一時間掌握業務動態。 一、在釘釘群中添加自定義機器人 在需要接收知行之橋…