数据结构专题—计算机中常用的数据结构

ANSYS FLUENT UDF 专题培训 CAE行业资深工程师团队,学历硕博为主,均拥有多年客户仿真项目实操经验,理论素养与实战经验双保险。采用线下小班精讲形式,理论知识+案例讲解+上机辅导,附赠培训相关资料,可获取讲师微信课后交流。· 掌握Fluent UDFs的内部数据结构及物理量的获取方式。· 掌握Fluent UDFs的基本编写方式及编译步骤。· 掌握并行计算下Fluent UDFs编写的注意事项。Fluent UDFs常用物理量的获取方式介绍。Fluent UDFs编译方式介绍。Fluent UDFs编写方式介绍。· 掌握常用宏的使用。 阅读详情

前言:

在学习 java 相关技术或者学习mysql 存储引擎 InnoDB 的时候,会发现其底层运用了大量的数据结构。之所以不从java这门语言来展开讲数据结构是因为:数据结构是不分语言不分平台的。如果单纯从一门开发语言讲数据结构会局限与语言本身。所以打算以计算机常用数据结构这一更高的维度来讲数据结构。作为一个专题的目的在于一方面可以对数据结构相关的知识点做统一整理,方便以后查阅;另一方面也希望帮助看到这篇博文的同学,希望给到你想要的东西。

以下内容东拼西凑,有一部分属于作者原创,为尊重知识产权会在最后注明出处及参考文献,在这里感谢前人的奉献❀❀❀。

 

分类:

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 
常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:

è¿éåå¾çæè¿°

每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。

1、数组

数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。

int[] data = new int[100];data[0]  = 1;


优点: 
1、按照索引查询元素速度快 
2、按照索引遍历数组方便

缺点: 
1、数组的大小固定后就无法扩容了 
2、数组只能存储一种类型的数据 
3、添加,删除的操作慢,因为要移动其他的元素。

适用场景: 
频繁查询,对存储空间要求不大,很少增加和删除的情况。

2、栈

栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

如下图所以:

è¿éåå¾çæè¿°

栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

3、队列

队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下: 
这里写图片描述

使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

4、链表

链表的优点: 链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素; 添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;

如下图所示:

è¿éåå¾çæè¿°

缺点: 
因为含有大量的指针域,占用空间较大; 
查找元素需要遍历链表来查找,非常耗时。

适用场景: 
数据量较小,需要频繁增加,删除操作的场景

5、树

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;

在日常的应用中,我们讨论和用的更多的是树的其中一种结构,就是二叉树。 
 è¿éåå¾çæè¿°
二叉树是树的特殊一种,具有如下特点:

1、每个结点最多有两颗子树,结点的度最大为2。 
2、左子树和右子树是有顺序的,次序不能颠倒。 
3、即使某结点只有一个子树,也要区分左右子树。

二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

扩展: 
二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。这些二叉树的功能强大,但算法上比较复杂,想学习的话还是需要花时间去深入的。

6、散列表

散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

记录的存储位置=f(key)

这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构,其示例图如下: 
 è¿éåå¾çæè¿°
从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

7、堆

堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

堆中某个节点的值总是不大于或不小于其父节点的值;

堆总是一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。 
(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2),满足前者的表达式的成为小顶堆,满足后者表达式的为大顶堆,这两者的结构图可以用完全二叉树排列出来,示例图如下: 

因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

8、图

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

按照顶点指向的方向可分为无向图和有向图: 

è¿éåå¾çæè¿°
图是一种比较复杂的数据结构,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构,这里不做展开,读者有兴趣可以自己学习深入。

 

原文链接:https://blog.youkuaiyun.com/yeyazhishang/article/details/82353846

【数据结构功法】第1话 · 数据结构入门竟如此简单? 从今天开始,我将正式开启一个新的打卡专题——【数据结构·水滴计划】,没错!这是今年上半年的一整个系列计划!本专题目的是通过百天刷题计划,通过题目和知识点串联的方式,刷够1000道题!完成对数据结构相关知识的全方位复习和巩固;同时还配有专门的笔记总结和文档教程哦!想要搞定,搞透数据结构的同学,欢迎订阅本专栏!......... 阅读详情

相关推荐

天津大学计算机考研面试算法专题指南

htmltable {th, td {th {pre {简介:天津大学计算机考研面试的复试环节要求考生对算法有深入理解和应用能力,本专题涵盖了从基础的排序、查找算法到复杂的图论算法、动态规划和数据结构等,旨在帮助考生全面掌握算法知识。此外,还强调了递归、分治策略、字符串处理、计算几何以及概率和统计在算法中的应用。考生不仅需要重视理论学习,还要通过编程练习来提高解决实际问题的能力,为面试和职业发展打下坚实基础。

weixin_36444661的博客 1045

计算机数据结构(详细)

计算机操作系统(详细),由本人借鉴王道原创,用于辅导23年昆明理工大学877复试考研班辅助使用。原稿写自幕布。希望我带的学生都上岸!!!

weixin_42303403的博客 3378

SIwave:在 SIwave 中释放计算频率扫描的强大功能

AEDT 的电路工具允许注入正确的电压和电流。要使用电路工具,SIwave 必须首先使用 PI 求解器求解结构的 S 参数。

jkh920184196的博客 1475

数据结构:八种数据结构大全

数据结构 1.1 数据结构概述 数据结构是计算机存储、组织数据的方式;通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构的优良将直接影响着我们程序的性能;常用的数据结构有:数组(Array)、栈(Stack)、队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)、散列表(Hash)等; 1.2 数据结构的分类 1.2.1 排列方式 1)集合 集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系; 2)线性结构 线性

緑水長流*z 24万+

单片机如何获得5V电源

在单片机实际设计中,有时会需要在电路中用到5V电压源,那么这个常见的实验需求有哪些办法解决呢,我综合网上的资料,概括一下: 1)USB    这种方法在我们直接将单片机板与电脑连接调试的时候,算是简单又方便的办法了,但如果我所要得到的成品不直接连接外部的器件,这就得舍弃。     常用的,USB/5V插头线,这是一种专门的电源线,一端是USB通用接口,可以直插USB端口,另一端是内正外负电压

Echo_Ana的博客 3万+

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战中文教程,旨在帮助用户从零开始掌握这一先进的仿真框架。内容涵盖从环境安装、运行第一个“Hello World”仿真,到深入理解实体、组件、想定编辑器等核心概念,并进阶探讨动力学建模、传感器仿真与红蓝对抗想定构建。最后,指南还提供了效能分析与实战排错技巧,帮助用户将仿真结果转化为有价值的量化数据,适用于军事、航空航天等领域的复杂系统行为模拟研究。

weixin_29294395的博客 355

九大常见数据结构

数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。 常用的数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。 1、数组 数组可以说是最基本最常见的数据结构。数组

hanjiaqian的博客 1万+

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3795

数据结构(全)

线性结构, 树形结构, 图结构, 排序, 查找, 数据结构, 算法

s6664的博客 11万+

别再只调电位器了!用单片机PWM控制LM317输出电压,精度和玩法都多了

本文探讨了如何利用单片机PWM控制LM317输出电压,替代传统的电位器调节方案。通过PWM信号的有源滤波和运放处理,实现了更高精度(±5mV)、更好温度稳定性(0.01%/°C)的数控稳压电源设计,支持远程控制和可编程曲线输出,为经典电路注入数字化智能。

weixin_29164497的博客 356

毕设-MobileNetV4:给YOLOv8装上轻量化“引擎”——通用瓶颈与C2f融合的实战教程

本文介绍了一种将MobileNetV4与YOLOv8结合的目标检测模型轻量化方案。MobileNetV4通过通用瓶颈(UB)结构实现多任务适配,其核心改进包括动态卷积核、注意力机制和多路径特征聚合,显著提升特征提取能力。作者详细阐述了如何在YOLOv8框架中实现MobileNetV4的通用瓶颈模块,包括"膨胀-卷积-注意力-压缩"的流程设计,并构建完整的backbone网络。该方案通过融合MobileNetV4的轻量化优势与YOLOv8的高效检测架构,在移动设备上实现了精度与速度的良好平

FJN110的博客 504

Linux Shell底层原理与工程实践:从命令误解到生产级脚本

Shell是Linux系统中连接用户与内核的关键解释器,其本质远不止命令行工具集合——它承担词法解析、进程调度、环境继承与I/O重定向等核心职责。理解波浪号展开、参数扩展、通配符匹配及环境变量继承机制,是规避rm误删、for循环崩溃、变量未定义等高频故障的前提。在DevOps与自动化运维场景中,shell脚本的健壮性直接决定服务稳定性;结合set -euo pipefail、IFS控制、安全引号引用和find -print0流式处理,可构建真正生产可用的脚本。本文聚焦shell真实运行逻辑与典型排障路径,覆

weixin_34417200的博客 257

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 49

数据结构常用常考经典习题【按十大专题总结】

以下都是小旭大一下学期在家上网课的时候,根据教授所出的试题,一份份手写搞成图片粘进word里面的,现在免费做一个小汇总,主要涵盖了一些简单的介绍和10次线下作业及2次思维训练,涵盖了几乎所有的经典习题类型,方便大家借鉴交流~ 下面小旭先简单地介绍下数据结构的定义、研究对象和意义

米莱虾 7771

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C3k2结构,全网最详细教程

引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。DCNv4在多个任务中表现出色,包括图像分类、实例和语义分割,特别是在图像生成方面表现突出。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2665

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【数据结构】:顺序表专题

本篇将介绍线性数据结构中的顺序表专题(),其本质就是数组。一句话总结顺序表:顺序表就是经过封装后提供了许多现成方法的一种数据结构,其底层是数组。那已经有了数组,为什么还需要顺序表呢?当我们需要对数组中的某些数据进行处理(包括增删查改等),此时我们需要找到数组中有元素个数,再通过循环或其他方式插入,删除数据。这样以来就十分麻烦,而顺序表就方便解决了这些问题。此外,顺序表是线性表的一种。顺序表的特性:物理结构是连续的,逻辑结构一定是连续的。(物理结构:数据在内存上是连续存储的,是硬件层面上的。

2301_80827065的博客 1131

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【数据结构初阶】顺序表专题

动态顺序表的实现 增删查改

凤年徐的博客 2851

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构专题

绪论 数据结构的基本概念 基本概念和术语 数据结构三要素 算法和算法评价 算法的基本概念 算法效率的度量 线性表 线性表的定义和基本操作 线性表的定义 线性表的基本操作 线性表的顺序表示 ...

amf12345的博客 264

计算机考研之数据结构:斐波那契数列专题(2)

在中分析用递归方式描述的斐波那契数列的时间复杂度,还计算了斐波那契数列的通项。其时间复杂度为指数级,不是一个有价值的算法。实现斐波那契数列,通常作为我这里的一道面试题,多数来面试的给出的都是上面那个“没有价值”的实现方法。对于斐波那契数列的实现,除了递归(最不提倡的)之外,还有其他方法。

计算机科学、人工智能、数据分析和大数据方向的研发和教学。 1456

数据结构-----顺序表专题

然后我们开始for循环,因为一共size个元素,我们最后一个元素的位置是size-1,让size-1往前挪动到size-2的位置,所以i<size-1后,如果大于就结束循环,循环里面,我们把i+1的位置挪动到i的位置,然后完成这些之后让size--,就ok啦。空间申请成功后,由于我们是尾插入,我们找到arr最后一个元素,就是size的位置,例如有效个数是4,那么最后一个数就是4,(顺序表基层结构是数组,数组是一个连续存放的结构),所以在最后一个地方我们插入x,然后让size++。

2301_81286037的博客 1063

数据结构——顺序表专题

什么是数据结构呢?· 数据结构是由“数据”和“结构”两词组合⽽来。· 概念:数据结构是计算机存储、组织数据的⽅式。· 数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数据元素之间呈现的结构。总结:1)能够存储数据(如顺序表、链表等结构)2)存储的数据能够⽅便查找。

optimistic_chen的博客 1543

Java数据结构和算法中文第二版.pdf免费下载

第二版的新颖之处。 本书的第二版在第一版的基础上有所扩充,使之能更好地适应教师的计算机科学课堂教学,并使读者在阅读上更加容易。除去新增的章节,还添加了章末问题、实验和编程作业。 新增章节 在本版中加入了许多有趣的新内容。其中许多为编制上机作业提供了基础。这些新主题有: ● 深度优先搜索和游戏模拟 ● 约瑟夫(Josephus)问题 ● 数据压缩中的赫夫曼编码 ● 旅行售货员问题 ●

挨踢书吧 7120

数据结构的开始之顺序表专题

本文介绍了数据结构中顺序表的相关概念和实现。主要内容包括:1.数据结构基础概念,说明了数据结构是组织和存储数据的方式,并解释了学习数据结构的必要性;2.顺序表与数组的区别,指出顺序表是基于数组的封装;3.顺序表的分类,包括静态和动态顺序表;4.动态顺序表的具体实现,通过三个文件(SeqList.h、SeqList.c、Test.c)展示了初始化、增删改查等操作的代码实现。文章通过具体代码示例,详细讲解了动态顺序表的各种操作实现方法。

2501_91275995的博客 1375

数据结构之顺序表专题

数据结构是由。

2301_80412235的博客 1147

常见的数据结构学习

对于基础数据结构的基本学习 1、二叉树 2、红黑树 红黑树也叫二叉自平衡树,是在二叉树的基础上,增加了自平衡功能。不至于让二叉树一端结点数过于多,而导致整棵树的高度过高,从而影响遍历效率。在Java1.8以后,将HashMap的底层链表已经优化成了红黑树。 性质1:每个节点要么是黑色,要么是红色。 性质2:根节点是黑色。 性质3:每个叶子节点(NIL)是黑色。 性质4:每个红色结...

Lonely passerby 195
上一篇: 二进制运算专题 — java中常用的二进制运算
下一篇: 分布式架构专题(一)概述
MoveFlower
博客等级 码龄10年 23粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值