数据结构—(概述)

目录

一 数据结构,相关概念

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(V²),适合稠密图。

  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.mzph.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;大多数人会…