數據結構—(概述)

目錄

一 數據結構,相關概念

1. 數據結構:

2. 數據(Data):

3. 數據元素(Data Element):

4. 數據項:

5. 數據對象(Data Object):

6. 容器(container):

7. 結點(Node):

8. 迭代器(iterator):

9. 前驅 節點:

10. 后繼 節點:

二 數據結構分類

1. 邏輯結構分類

1. 集合結構

2. 線性結構

3. 樹型結構

4. 圖狀結構或網狀結構

2. 物理結構分類?

1. 順序存儲結構

2. 鏈接存儲結構

3. 數據索引存儲結構

4. 數據散列存儲結構 hash

5. 總結?

性能對比與分析

3. 總結

邏輯結構與物理結構的對應關系


一 數據結構,相關概念

1. 數據結構:

是相互之間存在一種或多種特定關系的數據元素的集合。不同的數據元素之間不是獨立的,而是存在特定的關系,我們將這些關系成為結構。

2. 數據(Data):

是對信息的一種符號表示。在計算機科學中是指所有能輸入到計算機中并被計算機程序處理的符號的總稱。描述客觀事物的符號,是計算機中可以操作的對象,是能被計算機識別,并輸入給計算機處理的符號集合。(數據不僅包含整型、實型等數值類型,還包括字符及聲音、圖像、視頻等非數值類型。)

3. 數據元素(Data Element):

是數據的基本單位在計算機程序中通常作為一個整體進行考慮和處理。一個數據元素可由若干個數據項組成。

4. 數據項:

一個數據元素可以由若干個數據項組成。(比如:人可以有眼耳口鼻這些數據項)。數據項是數據不可分割的最小單位。

5. 數據對象(Data Object):

是性質相同的數據元素的集合。是數據的一個子集。

6. 容器(container):

裝入數據元素的外部對象。一般是先有數據關系,再有可以裝入數據元素的容器,一個容器對應一個數據元素,可以把它想象成一個紙箱。

7. 結點(Node):

數據關系中,用于建立關系支撐的連接點,比如路由器網關,樹的分叉;與節點接近但有所區別。

8. 迭代器(iterator):

一個超級接口! 是可以遍歷集合的對象,為各種容器提供了公共的操作接口。

9. 前驅 節點:

數據值小于節點n,且與節點n數值最接近的節點(記為節點m)

10. 后繼 節點:

數據值大于節點n,且數值最接近節點n的第一個節點(記為節點m)

11. 檢索(索引 index):

根據索引快速的找到數據元素;

12. 遍歷:

將數據對象中的所有數據元素全部訪問一遍;

13. 動態擴容:

數據對象中的數據元素數量發生變化。

二 數據結構分類

數據結構是計算機中組織、管理和存儲數據的方式,分為?邏輯結構?和?物理結構(存儲結構)。二者的核心區別在于:

  • 邏輯結構:關注數據元素之間的抽象關系(如順序、層次、連接等),與計算機存儲無關。

  • 物理結構:數據在內存中的實際存儲方式(如連續存儲、分散存儲),直接影響程序性能。

1. 邏輯結構分類

邏輯結構的分類與特點

邏輯結構類型描述典型示例應用場景
線性結構數據元素間呈一對一關系,形成序列。數組、鏈表、棧、隊列順序操作(如遍歷、排序)
樹形結構數據元素間呈一對多關系,形成層次結構。二叉樹、B樹、堆、字典樹文件系統、數據庫索引、決策模型
圖結構數據元素間呈多對多關系,形成網絡結構。有向圖、無向圖、鄰接表/矩陣社交網絡、路徑規劃、依賴分析
集合結構數據元素間無明確邏輯關系,僅屬于同一集合。哈希集合、無序列表去重、成員檢測、數學集合運算

1. 集合結構

定義:數據元素之間無明確邏輯關系,僅屬于同一集合。
特點

  • 關注元素的唯一性和存在性,而非順序或關聯。

  • 核心操作:插入、刪除、查找。

常見類型

  1. 哈希集合(HashSet):基于哈希表實現,查找時間復雜度O(1)。

    • 示例:Python的set類型。

  2. 樹集合(TreeSet):基于平衡二叉搜索樹實現,元素有序。

    • 示例:Java的TreeSet

應用場景

  • 數據去重:快速檢測重復元素。

  • 成員檢測:判斷元素是否存在于集合中。

  • 集合運算:并集、交集、差集(如數據庫查詢優化)。

2. 線性結構

定義:數據元素之間存在一對一的順序關系,形成線性序列。每個元素有且僅有一個直接前驅和一個直接后繼。
特點

  • 元素按順序排列,無分支。

  • 支持遍歷、插入、刪除等操作。

常見類型

  1. 數組:連續內存存儲,支持快速隨機訪問。

    • 示例int arr[5] = {1, 2, 3, 4, 5};

  2. 鏈表:通過指針鏈接非連續內存塊,支持動態擴展。

    • 示例:單鏈表、雙向鏈表。

  3. 棧(Stack):后進先出(LIFO),如函數調用棧。

    • 操作push(入棧)、pop(出棧)。

  4. 隊列(Queue):先進先出(FIFO),如任務調度隊列。

    • 操作enqueue(入隊)、dequeue(出隊)。

應用場景

  • 數組:需要快速訪問元素的場景(如排序)。

  • 鏈表:頻繁插入/刪除的場景(如實現隊列)。

  • 棧:撤銷操作、表達式求值。

  • 隊列:消息隊列、打印任務管理。

3. 樹型結構

定義:數據元素之間存在一對多的層次關系,形成樹狀層級結構。
特點

  • 每個節點最多有一個父節點,但可以有多個子節點。

  • 具有唯一的根節點,葉子節點無子節點。

常見類型

  1. 二叉樹:每個節點最多有兩個子節點。

    • 示例:二叉搜索樹(BST)、平衡二叉樹(AVL樹)。

  2. B樹/B+樹:多路平衡查找樹,用于數據庫索引。

  3. 堆(Heap):完全二叉樹,支持快速插入和刪除最值。

    • 類型:最大堆、最小堆。

  4. 字典樹(Trie):用于字符串前綴匹配,如輸入法提示。

應用場景

  • 文件系統:目錄與子目錄的層次關系。

  • 數據庫索引:B+樹加速數據查詢。

  • 哈夫曼編碼:壓縮算法中構建最優前綴樹。

4. 圖狀結構或網狀結構

定義:數據元素之間可存在多對多的復雜關系,形成網絡結構。
特點

  • 頂點(節點)表示實體,邊表示實體間的關系。

  • 邊可帶權重(如距離、成本)或方向(有向圖/無向圖)。

常見類型

  1. 鄰接矩陣:二維數組表示頂點間連接關系。

    • 空間復雜度:O(V2),適合稠密圖。

  2. 鄰接表:鏈表數組存儲每個頂點的鄰居。

    • 空間復雜度:O(V + E),適合稀疏圖。

  3. 有向圖:邊有方向(如微博關注關系)。

  4. 無向圖:邊無方向(如微信好友關系)。

應用場景

  • 社交網絡:用戶之間的關注/好友關系。

  • 路徑規劃:Dijkstra算法求最短路徑。

  • 推薦系統:基于圖的關系挖掘(如PageRank)。

2. 物理結構分類?

物理結構的分類與特點

物理結構類型描述實現方式優缺點適用邏輯結構
順序存儲數據元素在內存中連續存儲。數組、動態數組優點:隨機訪問快;
缺點:插入/刪除效率低
線性結構(數組、棧、隊列)
鏈式存儲數據元素通過指針鏈接,存儲位置不連續。單鏈表、雙向鏈表、樹節點指針優點:插入/刪除靈活;
缺點:訪問效率低
線性結構、樹、圖
索引存儲通過索引表記錄數據地址,數據本身可分散存儲。數據庫索引、文件系統優點:快速定位;
缺點:索引維護開銷
集合、線性結構
散列存儲利用哈希函數計算存儲位置,數據按計算結果存放。哈希表、布隆過濾器優點:查找極快;
缺點:哈希沖突處理
集合、鍵值對存儲

總結對比

存儲結構C語言實現時間復雜度(插入/查找)適用場景
順序存儲數組插入/刪除 O(n),訪問 O(1)靜態數據、高頻隨機訪問
鏈接存儲鏈表插入/刪除 O(1),訪問 O(n)動態數據、頻繁修改
索引存儲結構體數組 + 索引表插入 O(n log n),查找 O(log n)數據庫、文件系統
散列存儲哈希表 + 鏈地址法插入/查找 O(1)(平均)緩存、字典、去重

1. 順序存儲結構

定義:數據元素在內存中按順序連續存放,通過元素下標直接訪問。
特點

  • 物理連續:元素地址連續,無額外指針開銷。

  • 隨機訪問:通過下標直接定位元素,時間復雜度為 O(1)。

特性說明
優點訪問速度快;內存利用率高(無指針開銷)。
缺點插入/刪除需移動大量元素,效率低;容量固定(動態數組擴容有額外成本)。
實現方式數組、動態數組(如 C++ 的?vector)。
適用場景數據量固定或變化小,需頻繁隨機訪問的場景(如排序、矩陣運算)。

示例

int arr[5] = {1, 2, 3, 4, 5};  // 定義數組
printf("%d", arr[2]);          // 直接訪問第3個元素(輸出:3)

2. 鏈接存儲結構

定義:數據元素通過指針鏈接,存儲位置不連續。
特點

  • 動態分配:內存按需分配,支持靈活擴展。

  • 鏈式訪問:通過指針跳轉訪問元素,時間復雜度為 O(n)。

特性說明
優點插入/刪除效率高(僅修改指針);無需預先分配內存。
缺點訪問效率低(需遍歷);指針占用額外內存。
實現方式單鏈表、雙向鏈表、樹結構(如二叉樹的指針實現)。
適用場景頻繁插入/刪除的場景(如隊列、圖結構)。

示例

struct Node { int data; struct Node *next; };  // 定義節點
struct Node a = {10}, b = {20}; a.next = &b;   // 手動鏈接兩個節點
printf("%d", a.next->data);                    // 輸出:20

3. 數據索引存儲結構

定義:通過索引表記錄數據地址,數據本身可分散存儲。
特點

  • 快速定位:索引表存儲鍵與物理地址的映射。

  • 分層管理:索引與數據分離,需維護索引一致性。

特性說明
優點支持高效范圍查詢;適合大規模數據管理。
缺點索引維護復雜(增刪需同步更新);存儲開銷大(需額外索引空間)。
實現方式B樹、B+樹(數據庫索引)、文件分配表(FAT)。
適用場景數據庫索引、文件系統、有序數據查詢(如按范圍搜索)。

示例

int data[3] = {100, 200, 300}, index[3] = {0, 1, 2};  // 數據與索引表
printf("%d", data[index[1]]);                        // 通過索引訪問(輸出:200)

4. 數據散列存儲結構 hash

定義:通過哈希函數計算數據存儲位置,直接定位內存地址。
特點

  • 快速查找:理想情況下時間復雜度為 O(1)。

  • 沖突處理:需解決哈希沖突(如開放尋址法、鏈地址法)。

特性說明
優點查找速度極快;適合精確匹配查詢。
缺點哈希沖突影響性能;不支持范圍查詢。
實現方式哈希表、布隆過濾器、一致性哈希。
適用場景緩存系統(如 Redis)、字典、去重(如?HashSet)。

示例

struct HashNode { int key; struct HashNode *next; } *table[10] = {NULL};  // 哈希表
int idx = 5 % 10; table[idx] = &(struct HashNode){5, NULL};               // 插入鍵5
printf("%d", table[idx]->key);                                            // 輸出:5

5. 總結?

性能對比與分析
操作類型順序存儲(數組)鏈式存儲(鏈表)散列存儲(哈希表)索引存儲(B樹)
隨機訪問O(1)O(n)O(1)(平均)O(log n)
插入/刪除O(n)O(1)O(1)(平均)O(log n)
空間利用率高(連續存儲)低(指針額外開銷)中等(哈希表負載因子)中等(索引結構)
適用場景靜態數據、頻繁訪問動態數據、頻繁修改快速查找、去重有序數據、范圍查詢
存儲結構核心代碼關鍵特點
順序存儲int arr[5]; arr[2]=3;連續內存,直接訪問
鏈接存儲struct Node { ... }; a.next = &b;動態指針,靈活增刪
索引存儲data[index[1]]索引表加速定位
散列存儲table[hash(key)] = &node;哈希函數映射,沖突處理

3. 總結

邏輯結構與物理結構的對應關系
邏輯結構支持的物理結構典型實現示例
線性結構順序存儲、鏈式存儲- 數組(順序存儲)
- 鏈表(鏈式存儲)
樹形結構鏈式存儲、順序存儲(完全二叉樹)- 二叉樹(指針鏈式)
- 堆(數組順序存儲)
圖結構鏈式存儲(鄰接表)、順序存儲(鄰接矩陣)- 鄰接表(鏈表實現)
- 鄰接矩陣(二維數組實現)
集合結構散列存儲、索引存儲- 哈希集合(散列存儲)
- 有序集合(B樹索引存儲)

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

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

相關文章

Vue 兩種導航方式

目錄 一、聲明式導航 二、編程式導航 三、兩句話總結 一、聲明式導航 1. 傳參跳轉&#xff1a; <router-link :to"/user?nameCHEEMS&id114514">Query傳參 </router-link><router-link :to"/user?參數名1參數值1&參數名2參數值2&a…

QTableWidget實現多級表頭、表頭凍結效果

最終效果&#xff1a; 實現思路&#xff1a;如果只用一個表格的話寫起來比較麻煩&#xff0c;可以考慮使用兩個QTableWidget組合&#xff0c;把復雜的表頭一個用QTableWidget顯示&#xff0c;其他內容用另一個QTableWidget。 #include "mainwindow.h" #include &qu…

2025年客運從業資格證備考單選練習題

客運從業資格證備考單選練習題 1、從事道路旅客運輸活動時&#xff0c;應當采取必要措施保證旅客的人身和財產安全&#xff0c;發生緊急情況時&#xff0c;首先應&#xff08; &#xff09;。 A. 搶救財產 B. 搶救傷員 C. 向公司匯報 答案&#xff1a;B 解析&#xff1a;…

python打卡day21

常見的降維算法 知識點回顧&#xff1a; LDA線性判別PCA主成分分析t-sne降維 之前學了特征降維的兩個思路&#xff0c;特征篩選&#xff08;如樹模型重要性、方差篩選&#xff09;和特征組合&#xff08;如SVD/PCA&#xff09;。 現在引入特征降維的另一種分類&#xff1a;無/有…

專業級軟件卸載工具:免費使用,徹底卸載無殘留!

在數字生活節奏日益加快的今天&#xff0c;我們的電腦就像每天都在"吃進"各種軟件。但您是否注意到&#xff0c;那些看似消失的程序其實悄悄留下了大量冗余文件&#xff1f;就像廚房角落里積攢的調味瓶空罐&#xff0c;日積月累就會讓系統變得"消化不良"。…

【Linux】基礎 IO(一)

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux——基礎IO主要包括&#xff1a; 文件基本概念回顧 C文件的操作介紹系統關于文件的基本操作 &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 …

Java 原生實現代碼沙箱之Java 程序安全控制(OJ判題系統第2期)——設計思路、實現步驟、代碼實現

在看這一期之前&#xff0c;需要先看上一期的文章&#xff1a; Java 原生實現代碼沙箱&#xff08;OJ判題系統第1期&#xff09;——設計思路、實現步驟、代碼實現-CSDN博客 Java 程序可能出現的異常情況 1、執行超時 占用時間資源&#xff0c;導致程序卡死&#xff0c;不釋…

常見的降維算法

作業&#xff1a; 自由作業&#xff1a;探索下什么時候用到降維&#xff1f;降維的主要應用&#xff1f;或者讓ai給你出題&#xff0c;群里的同學互相學習下。可以考慮對比下在某些特定數據集上t-sne的可視化和pca可視化的區別。 一、什么時候用到降維&#xff1f; 降維通常…

理解Yocto項目中`${D}`作為模擬目標系統根文件結構的臨時目錄

在Yocto項目中,理解${D}作為模擬目標系統根文件結構的臨時目錄,可以通過以下具象化的比喻和結構解析來把握其核心邏輯: 一、沙盒模型:構建系統的“實驗場地” ${D}的作用類似于建筑師在施工前搭建的1:1實體模型。它完全模仿目標設備的文件系統布局(如/usr/bin、/etc等目錄…

第十課認識約數

課堂學習&#xff1a; 情景引入&#xff1a; 今天我們來認識一下數學中的約數關系&#xff0c;上節課我們了解完倍數之后就已經對約數有了基本的概念&#xff01; 我們按照是否有余數&#xff0c;可以把他們分成兩類 在整數除法中&#xff0c;如果商是整數沒有余數&#x…

【Vue】vuex的getters mapState mapGetters mapMutations mapActions的使用

目錄 一、getters 二、 mapState 三、 mapGetters 四、 mapMutations 五、 mapActions 學到這兒來個小總結&#xff1a;四個map方法的使用 總結不易~ 本章節對我有很大的收獲&#xff0c; 希望對你也是&#xff01;&#xff01;&#xff01; 本節素材已上傳至Gitee&…

html object標簽介紹(用于嵌入外部資源通用標簽)(已不推薦使用deprecated,建議使用img、video、audio標簽)

文章目錄 HTML <object> 標簽詳解基本語法與核心屬性關鍵屬性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同類型的資源1. **嵌入圖像**2. **嵌入音頻**3. **嵌入視頻**4. **嵌入 PDF** 參數傳遞與回退內容**參數&#xff08;<param>&a…

警備,TRO風向預警,In-N-Out Burgers維權風暴來襲

本案是TME律所代理的5月首案&#xff0c;傳奇連鎖快餐品牌In-N-Out Burgers委托維權&#xff01; 案件基本情況&#xff1a; 起訴時間&#xff1a;2025-5-1 案件號&#xff1a;25-cv-04767 品牌&#xff1a;In-N-Out 原告&#xff1a;In-N-Out Burgers 原告律所&#xff…

數據結構算法習題通關:樹遍歷 / 哈夫曼 / 拓撲 / 哈希 / Dijkstra 全解析

已知一棵二叉樹先序遍歷和中序遍歷分別為 ABDEGCFH 和 DBGEACHF&#xff0c;請畫出這個二叉樹的邏輯結構并寫出后序遍歷的序列。 先序遍歷&#xff1a;ABDEGCFH 中序遍歷&#xff1a;DBGEACHF 先序遍歷看出根為A&#xff0c;左子樹DBGE&#xff0c;右子樹CHF A的左子樹 再…

C++GO語言微服務和服務發現

目錄 01 03-go-micro簡介 02 04-服務發現的簡單認識 03 05-consul的安裝 04 06-consul常用的命令 05 07-注冊服務到consul并驗證 06 08-consul健康檢查 07 09-consul結合grpc使用-上&#xff08;只實現grpc遠程調用&#xff09; 08 10-consul結合grpc使用-中&#xff08…

HDFS 常用基礎命令詳解——快速上手分布式文件系統

簡介&#xff1a; 本文面向剛接觸 Hadoop HDFS&#xff08;Hadoop 分布式文件系統&#xff09;的讀者&#xff0c;結合 CSDN 博客風格&#xff0c;系統梳理最常用的 HDFS 客戶端命令&#xff0c;并配以示例和注意事項&#xff0c;幫助你在開發和運維中快速掌握 HDFS 的文件管理…

VUE CLI - 使用VUE腳手架創建前端項目工程

前言 前端從這里開始&#xff0c;本文將介紹如何使用VUE腳手架創建前端工程項目 1.預準備&#xff08;編輯器和管理器&#xff09; 編輯器&#xff1a;推薦使用Vscode&#xff0c;WebStorm&#xff0c;或者Hbuilder&#xff08;適合剛開始練手使用&#xff09;&#xff0c;個…

make和makefile的使用,以及寫一個簡單的進度條程序

1.自動化構建-make/makefile 1.1 背景 一個工程文件中的文件不計其數&#xff0c;其按類型、功能、模塊放在若干目錄中&#xff0c;makefile定義了一系列規則來指定哪些文件需要先編譯&#xff0c;哪些文件需要后編譯&#xff0c;哪些文件需要重新編譯&#xff0c;甚至于過呢…

數據結構中的棧與隊列:原理、實現與應用

前言&#xff1a;棧和隊列是計算機科學中兩種最基礎的線性數據結構&#xff0c;它們的獨特操作規則和廣泛的應用場景使其成為每一位開發者必須掌握的核心知識。本文將通過生活案例、代碼實現和實際應用場景&#xff0c;帶您深入理解這兩種數據結構的精髓。 1.棧&#xff08;Sta…

如何選擇自己喜歡的cms

選擇內容管理系統cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 檢測器的情況下手動檢測 CMS 結論 在開始構建自己的數字足跡之前&#xff0c;大多數人會…