八大基础数据结构

八种数据结构简介 数据结构是计算机存储、组织数据的方式;通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率,这也是判断数据结构优良的两个维度。数据结构的优良将直接影响着我们程序的性能;通常情况下,这两个维度是相悖的,即:更高的运行效率往往存储效率较低,更高的存储效率往往运行效率较低。 阅读详情

数组(Array)

数组是最简单、使用最频繁的一种数据结构。它一种线性表数据结构,用一组连续的内存空间来存储一组相同类型的数据。
在这里插入图片描述
如上图所示,数据是按照顺序存储在内存的连续空间内,arr后面的[]代表下标,由于数据是存储在连续空间内的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标计算出来,从而可以直接访问目标数据,达到随机访问的目的。

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

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

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

队列(Queue)

队列也是一种非常基础的数据结构,其特点是先入先出,也就是我们常听到的FIFO(First in First Out),即操作数据是从两端进行的。
在这里插入图片描述
上图就是生活中常见的使用队列场景,为了更方便大家理解,我再画一个入队列,出队列的示意图,加深大家对队列的印象。
在这里插入图片描述

链表(Linked List)

链表是一种物理存储单元上非连续,非顺序的存储结构。链表有一系列节点组成,所谓节点就是指链表中的每一个元素,每个节点包含两个数据,一个是存储元素的数据域(值),另一个是存储下一个节点地址的指针域。
在这里插入图片描述
通俗点说,链表数据一般都是分散存储于内存中 的,无须存储在连续空间内。这样大家可能还不能直观的感受链表的非连续,我再画一张图:
在这里插入图片描述
假设上图中100-108是一块内存中连续地址的内存分布,假设101、103、106、107这几个内存地址都已经存储数据了,那剩下的100、102、104、105、108是不是就浪费呢,答案是否定的,我们可以使用链表的方式存储数据。

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

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

栈(Stack)

栈也是一种数据呈线性排列的数据结构,和上面的队列相反,栈的特点先进后出、后进先出,就是常说的LIFO(Last in First Out)。
在这里插入图片描述
栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

树(Tree)

树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。
数的结构特点是:

每个节点有零个或多个子节点;

没有父节点的节点称为根节点;

每一个非根节点有且只有一个父节点;

除了根节点外,每个子节点可以分为多个不相交的子树。

我们平时用到最多的就是二叉树,我也以二叉树来为例,先看一下树结构:
在这里插入图片描述
二叉树有几下特点:

  • 每个结点最多有两颗子树,结点的度最大为2。
  • 左子树和右子树是有顺序的,次序不能颠倒。
  • 即使某结点只有一个子树,也要区分左右子树。
  • 个结点的值均大于其左子树上任意一个结点的值。比如 点的值。结点100大于其左子树上的30,18和16。
  • 每个结点的值均小于其右子树上任意 一个结点的值。比如结点 100 小于其右子树上的 120、130 和 135。

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

散列表(Hash)

散列表又叫哈希表,存储的是由键(key)和值(value)组 成的数据,根据键直接访问存储在内存存储位置的数据结构。
在这里插入图片描述
从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。哈希表查找数据的公式为:记录的存储位置=f(key)这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。我们将在后面详细讲解哈希表数据结构。
哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理的不好会浪费大量的时间,导致应用崩溃。

堆(Heap)

堆比较特殊,是一种图的树形结构。被用于实现“优先队列”(priority queues),优先队列是一种数据结构,可以自由添加数据,但取出数据时要从最小值开始按顺 序取出。在堆的树形结构中,各个顶点被称为“结点”(node),数据就存储在这些结点中。
只要满足下面两个特点的树形结构就是堆:

  • 堆是一个完全二叉树(所谓完全二叉树就是除了最后一层其他层的节点个数都是满的)。
  • 堆中每一个节点的值都必须大于等于或者小于其子树中每一个节点的值。

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

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

图(Graph)

图是相对复杂的一种数据结构,由顶点和连接每对顶点的边所构成的图形就是图。
我们先来看图:
在这里插入图片描述
上图中的圆圈叫作“顶点”(Vertex,也叫“结点”),连接顶点的线叫作“边”(Edge)。也就是说,由顶点和连接每对顶点的边所构成的图形就是图。 图按照顶点指向的方向可分为无向图和有向图,像我上面的就叫无向图。
图在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构。常见的图遍历算法就是广度优先算法和深度优先算法。

RT-Thread Studio与CubeMX联合编程(超级详细) RT-Thread Studio与CubeMX联合编程 本文章参考以下文章: https://blog.youkuaiyun.com/qq_40824852/article/details/122596043 https://zhuanlan.zhihu.com/p/395106066 https://blog.youkuaiyun.com/m0_37697335/article/details/108890584 一、简介 经过上次对RT-Thread Studio的初步尝试,发现RT-Thread Studio中存在官方支 阅读详情

相关推荐

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

数据结构基础知识

算法+数据结构=程序设计 一、数据结构的基本概念 1.1 数据结构是带“结构”的数据元素的集合。结构是指数据元素之间的关系。 数据结构包括(数据)逻辑结构和物理结构(也称存储结构)两个层次。 数据的逻辑结构分为线性结构和非线性结构。线性结构典型的有线性表,栈、队列(操作受限的线性表),数组。具有线性结构的数据元素之间的关系是一对一的。非线性结构包括集合结构、树形结构、图状/网状结构。具有非线性结构的数据元素之间的关系是多对多的。 数据的存储结构包括顺序存储、链式存储、散列存储、索引存储。 每一种逻辑结构都可

qq_43015237的博客 2028

Python Selenium调用IE11报错全解析:从环境配置到稳定运行

在Web自动化测试领域,Selenium作为主流的跨浏览器测试框架,其核心原理是通过WebDriver协议与不同浏览器的驱动程序进行通信,实现对浏览器行为的模拟与控制。这一技术为软件测试的自动化、回归测试的效率提升提供了重要价值,广泛应用于金融、政务等对遗留系统兼容性要求高的行业场景。然而,当技术栈涉及过时的浏览器如IE11时,环境配置的复杂性显著增加,特别是Python与Selenium的组合常遭遇驱动兼容性、安全设置等挑战。本文聚焦于解决Python Selenium驱动IE11时的典型报错问题,深入剖

weixin_28834765的博客 323

数据结构入门学习(非常详细)从零基础入门到精通,看完这一篇就够了。

数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的[逻辑结构](https://baike.baidu.com/item/%E9%80%BB%E8%BE%91%E7%BB%93%E6%9E%84/9663235?fromModule=lemma_inlink "逻辑结构")和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。

Javachichi的博客 2万+

均值场博弈_平均场博弈(mean field game)

The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。...

weixin_34773479的博客 3682

Claude Code vs Codex实战对比:哪个更适合你的Next.js项目?(含真实案例)

本文通过两个真实的Next.js项目案例,深度对比了Claude Code与Codex在UI实现和业务逻辑构建中的表现。Claude Code在代码质量、设计还原度和架构完整性方面优势明显,适合对可维护性要求高的生产级项目;而Codex则以快速响应和低成本见长,更适合原型开发或内部工具。文章提供了基于项目类型、团队能力和成本效益的详细选择策略。

weixin_29201859的博客 809

【基础知识】6、数据结构知识点

数据结构基础知识

呆呆的猫的博客 1万+

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 403

常见的数据结构总结(8种)

1. 顺序表(数组 Array)2. 链表 3. 栈(Stack)4. 队列(Queue)5. 树(Tree)6. 堆(Heap)7. 图(graph)8. 散列表(Hash)

m0_60416282的博客 2万+

串口调试神器诞生记:我是如何用Cursor+AI自动生成C#上位机的(含VSCode插件清单)

本文详细介绍了如何利用Cursor和AI技术快速开发C#上位机程序,实现高效的串口通讯调试。从开发环境搭建到代码自动生成,再到性能优化和功能增强,全面展示了AI辅助开发在串口调试中的实际应用和显著效率提升。

weixin_28340315的博客 301

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构

本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过来弥补参数大幅减少的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和五种模型,以满足不同的需求。

Limiiiing的博客 2975

【数据结构基础】之八大排序(C语言实现)

算法和数据结构是有一定的关联的,八大排序算法在数据结构里算是比较重要的一个部分,今天本篇博客将介绍八大排序算法的原理和实现。

wszhj_的博客 1724

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

算法大师! 1236

基础数据结构——八大排序详解

1、排序的分类: 内排序:排序的整个过程中,待排序的所有记录全部放在内存中 外排序:由于排序的记录个数太多,不能同时放在内存,整个排序需要在内外存之间交换数据才能进行

仟各的博客 9544

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

DataWorld|八大数据结构基础知识

@[FAT-Remcal|Coding诗酒醉年华] DataWorld|八大数据结构基础知识 转载:大数据文摘 编译:Hope、睡不着的iris、胡笳、云舟 摘要 瑞士计算机科学家Niklaus Wirth在1976年写了一本书,名为《算法+数据结构=编程》。40多年后,这个等式仍被奉为真理。这就是为什么在面试过程中,需要考察软件工程师对数据结构的理解。 几乎所有的问题都需要面试者对数据结构有深刻...

RikLiOnline 431

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

八大基础数据结构:从数组到图,一篇文章掌握选型与工程实践

数据结构是计算机存储、组织数据的基础方式,也是算法设计与系统性能优化的核心前提。从数组的连续内存寻址到链表的指针串联,从栈的先进后出到队列的先进先出,再到哈希表、树、堆和图的分支与网络模型,每一种结构都对应着特定的时间代价与约束规则。理解这些底层结构的原理,能帮助开发者在缓存设计、Top K统计、任务调度、图遍历等真实场景中做出合理选型。哈希表以空间换时间实现O(1)查找,堆则用O(log n)代价维护动态最值,B+树支撑数据库范围查询。本文结合时间复杂度分析与工程踩坑经验,系统梳理八大基础结构的特点、适用

weixin_29240343的博客 246

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++ 数据结构 八大基础排序算法专题

本文系统介绍了8种经典排序算法:冒泡排序(稳定、O(n²))、快速排序(不稳定、平均O(nlogn))、希尔排序(不稳定、改进插入排序)、归并排序(稳定、O(nlogn)需额外空间)、堆排序(不稳定、原地O(nlogn))、插入排序(稳定、近乎有序时高效)、选择排序(不稳定、交换次数少)、计数排序(稳定非比较、O(n+k)整数专用)。每种算法均从核心概念、实现思路、代码示例(C++)、时空复杂度、优缺点等维度进行解析,并标注稳定性、原地性等关键特征。

2301_80252792的博客 565

数据结构基础知识及八大排序算法详解

数据结构基础知识及八大排序算法详解 1.什么算法的时间复杂度? ——度量一个算法执行时间的两种方法(1)事后统计方法(2)事前估算方法(通过预测时间复杂度) 2.什么是时间频度? ——基本介绍: 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。[举例说明] ——比如计算 1-100 所有数字之和, 我们设计两种算法: 第一种:T(n)=n+1 int total=0; int end=100; //

weixin_44863569的博客 795

基础数据结构---八大排序

文章目录1.(简单)直接插入排序2.希尔(shell)排序3.冒泡排序4.快速排序5.选择排序6.堆排序7.归并排序8.基数排序 排序 : 笔试和面试的重点.1.算法描述;2.实现;3.效率分析(时间复杂度,空间复杂度,稳定性) 难点 : 排序算法太多 稳定性 : 针对关键字相同的数据(相同的数字),排序前如果A在A’的前面,排序后还能保证A在A’的前面则算法稳定,否则不稳定;有没有跳跃的交换数据,有则不稳定,没有则稳定 第一个排序:(简单)直接插入排序.特点 数据越有序越快,完全有序则为O(n) 第二个排

“ 七柒啊 ”的博客 465

数据结构与算法基础--八大排序

1、冒泡排序 1、我们一共需要排n-1趟,因为最后一趟剩一个数的时候它是最小,循环一趟我们会出来一个最大的数,有序区加一,无序区减一 2、无序区的范围为n-i-1(n为长度,i 为第 i 趟),如下指针不会指向1,1后面没有数要比较了,所以需要我们减一 代码 def Bobble_sort(k): for i in range(len(k)-1):#趟数 for j in range(len(k)-i-1):#范围 # if k[i]>k[j]:

a 147

数据结构与算法基础(三)八大排序算法

这里我们主要来讲讲八大排序算法 首先呢,我们来明确一些概念问题 1.如何衡量一个算法的优劣: 从两方面来说:时间复杂度 和 空间复杂度 ①时间复杂度:一个算法运行需多长时间 ②空间复杂度:一个算法运行时需占用多少内存 2.时间复杂度:一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示.若有某个辅助函数f(n)使得当n趋近无穷大时,T(n)/f(n)的极限值为不等于...

Mikasa的博客 461

数据结构入门:八大数据结构和三大算法(不断更新中)

文章目录数据结构基本定义和类型八大数据结构概述数组(Array)STL--vector链表( Linked List)链表的实现链表的STL实现栈( Stack)栈的实现:基于数组的栈实现基于结构体和指针的栈的实现栈的STL实现:队列(Queue)基于结构体和指针的队列的实现STL队列双端队列(可以同时对队首和队尾操作)优先队列树( Tree)树的数据结构实现二叉搜索树(BST)平衡二叉树和红黑树红黑树B-treeB+树区间树(线段树):STL中set的实现图(Graph)图的遍历图的拓扑排序图的最小生成树

AEI的博客 2586

基础不牢,地动山摇,字节大牛带你深耕数据结构与算法

基础知识就像是一座大楼的地基,它决定了我们的技术高度。而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”要到位。——数据结构与算法之美数据结构与算法是所有计算机语言的基础,也是决定一个程序员在编码路上能走多远的重要变量之一。在笔试的时候,最主要的就是靠算法题。像拼多多、头条这种大公司,上来就来几道算法题,如果你没AC出来,面试机会都没有。

m0_57042151的博客 136

【数据结构】常见数据结构汇总

数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的,但是我们可以使用指针等道具,构造出类似“树形”的复杂结构。下面介绍八个常见的数据结构。

DreamSun的博客 1257

数据结构-头插法和尾插法

头插法 void HeadCreatList(List *L) //头插法建立链表 { List *s; //不用像尾插法一样生成一个终端节点。 L->next = NULL; for (int i = 0; i < 10; i++) { s = (struct List*) malloc(sizeof(struct List));//s指向新申请的节点 ...

数据飓风 4万+

如何学习数据结构?有阿里P9把数据结构从源码讲解出来了,你还不看!

编程如果只是一个为了解决生活温饱的工具,那你可以完全忽略数据结构,算法,你的目标很容易实现;但如果你是热爱编程,把它当做对生活的追求,想在这一行走的更远,更久,那么在你的学习规划中,她们便是必不可少的一种语言;

m0_57042151的博客 460
上一篇: 数据的逻辑结构和存储结构(物理结构)详解
下一篇: ArrayList源码分析
FLY翔仔
博客等级 码龄7年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值