数据结构基础

数据结构基础知识入门 定义:如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中,以及在此基础上实现某个功能,而执行的相应操作,该操作也叫算法。数据结构 = 个体 + 个体的关系程序 = 数据的存储 + 数据的操作 + 可被计算机所执行的语言数据存储分成两部分1.个体的存储2.个体关系的存储从某种角度而言,数据存储最核心的是个体关系的存储,个体存储可忽略不计。 阅读详情

用程序解决问题时,往往需要将具体问题抽象为数学模型,再用具体算法进行解决,这个抽象数学模型的过程即位分析问题的过程。程序描述数学模型不再是数学方程式,而是采用数据结构。

一、数据结构的基本相关概念
什么是数据结构?数据结构是基本元素,及其之间存在的一种或多种特定关系的集合。

根据不同的数据关系,可以采用不同的数据结构,数据关系的特性分类:
--集合:除了属于某同一集合,并无其他特定关系;
--线性:数据之间存在一对一的关系;
--树:数据之间存在一对多的关系;
--图或网:数据之间存在多对多的关系;

数据类型分类:
--基本数据类型:原子类型、结构类型;原子类型是不可再分解的数据类型;
--抽象数据类型:包括:数据对象、数据关系、基本操作
--多形数据类型:指存在相同关系,但元素值得成分类型不确定;
抽象数据类型分为:
--原子类型;
--固定聚合类型:变量数目和值的成分确定;
--可变聚合类型:变量数目或值得成分不确定;
数据关系:
数据元素之间的关系计算机中有两种不同的表示方法:顺序映像和非顺序映像,由此得到两种不同的存储结构:顺序存储和链式存储。

二、算法效率的度量(运行时间/存储空间复杂度的大O表示)
T(n)=O(f(n))
S(n)=O(f(n))
表示算法执行时间或空间的增长率和f(n)的增长率相同;常见的f(n)有常量阶、线性阶(如f(n)=n)、平方阶(f(n)=n^2)、对数阶(logn)、指数阶(2^n)等;通常我们不希望用指数阶。

三、线性结构
1、线性表
--连续存储顺序表示[原子类型数组];
--链式表示:线性链表(单链表)、循环链表、双向链表......(结点、头/尾结点);链表采用非指针表示,而采用数组标号的方式,称为静态链表。

2、栈LIFO
--同样有两种表示方式(静态/链式、表尾即栈顶、栈底),典型:括号匹配、迷宫问题、算式求解等问题;
--问题简化:如迷宫问题简化为最简单的场景考虑,扩展到整体情形;
--递归与迭代:自上而下/自下而上解决问题;递归函数:通过一系列自己调用自己的函数。

3、队列FIFO
--队头/队尾;双端队列、输出受限双端队列(两端输入一端输出)、输入受限双端队列(两端输出一端输入);
--循环队列:典型共享buffer/读写指针方式;

4、串
--字符串:是由零个或多个字符组成的有限序列;
--连续存储: 定长顺序存储、堆分配存储、链式存储、块链式存储(差别:结点里存储多个字符);
--模式匹配的优化算法KMP;

5、广义数组和广义表
--十字链表:需要标志位标志原子或子表;

四、树结构
--基本定义:根、子树、叶子、孩子、兄弟、双亲... ...数的集合叫森林、层次;
--有序树:各个子树丛左到右有次序,不能互换的树,否则为无序树;
--树的存储法:(数组+index、链表)双亲表示法,孩子表示法,孩子兄弟表示法;

二叉树
--每个节点最多只有两个子树;
--顺序表示:按照次序:从上至下、从左至右连续空间存储;
--链式表示:链表方式
--遍历二叉树:先序、中序、后序(树根的顺序不同:根->左->右;左->根->右;左->右->根);
--线索二叉树:带有"线索标志"如果左孩子没有,指向其前驱;右孩子没有,指向其后继;

最优二叉树(huffman树)
--树的长度(根到每个节点的路径和,路径长度:根到结点分支数目和)最短的树(结点权重*结点深度);
--huffman编码:概率越大路径越短;(试探/回溯=>递归)

平衡二叉树(BalancedBinary Tree 或 Heigh-Balanced Tree)
--所有结点的平衡因子(BF:BalanceFactor)为-1、0和1;
--结点的平衡因子的定义:结点的左子树的深度减去右子树的深度;

五、图结构
基本定义:
每个元素为顶点;有向图:弧、起始点为弧尾,终点为弧头;有向图与无向图,有向完全图;稀疏图与稠密图;子图;无向图连接的两个顶点互为邻接点;弧/边上的数称为权;相关的边为度(入度/出度);

最后一个顶点和第一个顶点相同的路径称为回路或环;顶点不重复出现的路径为简单路径;除了第一个顶点和最后一个顶点其他都不相同的回路称为简单回路或简单环。

任意顶点都有路径,则这两个顶点是连通的;任意两点都连通的图叫连通图;非连通图有多个连通分量,连通分量是无向图中的极大连通分量。有向图中相应称为强连通图和强连通分量。

生成树是一个极小的连通子图,包含图中的所有顶点,但足以构成一颗树含(n-1)条边。

图的存储结构:
--数组表示法/矩阵;
--邻接表:以各个顶点为头结点的单链表组成;
--十字链表:有向图,邻接表加逆邻接表;一个结点包含邻接表和逆邻接表两个链表;
--邻接多重表:类似十字链表,每个节点表示边的信息,分别存储该节点相关的两个顶点各自的下个相关的边的信息;

图的遍历:深度优先与广度有先

最小生成树(带边权值求和最小的树):Prim及Kruskal,两种算法差别:Prim采用已经在生成树中的顶点寻找下一条边,而Kruskal一直取最小边来判断;

拓扑排序/关键路径(基于有向无环图)
--拓扑排序,AOV(Activity On Vertex Network顶点表示活动,而弧表示优先关系的有向无环图)。处理在有向图中选一个没有入度的顶点输出,从图中删除所有以此顶点为尾的弧;
--关键路径(Critical Path),AOE(Activity on Edge)即边表示活动的网络。AOE网是一个边带权值的有向无环图,AOE网可以用来估算工程耗费的时间。零入度的顶点叫源点,出度为零的顶点叫汇点。零点到汇点之间的最长路径叫关键路径。因此非关键活动并不能加快工程进度。

最短路径问题
--某一源点到其他终点的最短路径;(Dijkstra算法,按路径长度递增)。
--每一顶点之间的最短路径;(重复执行Dijkstra 多次/Floyd算法,不停迭代n^3... ...);

六、动态内存管理
基本概念
--已经分配给用户使用内存称为"占用块";未曾分为用户使用的内存块"空闲块"或"可利用空间块";
--记录"空闲块"链式结构的可利用空间表;
--可利用空间表根据不同分配方式的三种结构形式:1、固定相同存储空间大小;2、受限可变(即存在多种固定的大小);3、完全不固定大小可变;[存储块与存储池]
--分配算法:首次拟合法、最佳拟合法、最差拟合法;

边界标识法
--在每个存储空间的头部和尾部增加标识信息,表识当前块信息、链表信息以及是否使用;
--相邻存储区域连续都不使用的时刻可以进行合并;
--循环链表法可以没有固定的链表头,依据不同的分配算法;

伙伴系统
--空间大小为2^k次方,当需要分配的空间没有空闲表时,可以从大的空间拆分得来,m类空间大小,需要m可用空间链表指针,内存块带有标识头信息;
--只有互为伙伴的(即从一块内存分配出来的)内存才可以在释放的时候合并,亦即连续空间不一定可以做合并;
--优点:简单、速度快;缺点:容易产生内存碎片;

无用单元收集两个途径
--引用(使用)记数器:只有当记数器值为0时,才可以释放该空间;
--直到可利用空间表为空时,中断程序执行,将所有未使用的空间重新链接成新的可使用空间表;

存储压缩
可用空间表为连续存储空间(堆?);对于释放出空间碎片需要进行存储压缩,一般两种方式:
--一旦用户释放即可进行压缩;
--指示可用空间指针一直往上增加,只有没有剩余可用空间时再进行压缩。
算法基础篇之数据结构基础 常用数据结构 阅读详情

相关推荐

Python数据结构——基础数据结构

以上是Python中的五种基础数据结构的简要介绍,它们在编程中非常有用。增加元素:可以使用 append() 方法向列表末尾添加新元素。修改元素:列表是可变的,可以通过索引来修改元素的值。索引和切片:可以使用索引和切片来访问字符串中的字符。获取元素:使用索引(从0开始)来访问列表中的元素。获取元素:使用索引来访问元组中的元素,与列表相似。添加键值对:可以通过赋值来添加新的键值对。不可变性:元组的元素不可被修改。获取值:通过键来访问字典中的值。去重:集合自动去除重复的元素。

Echo_Wish 2735

数据结构初识

数据时用来描述世界上客观事物的属性的数、字符等符号集合,这些符号集合可以被计算机识别。

weixin_45814268的博客 852

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

数据结构知识点总结

一,数据结构的一般概念 数据:所有能被输入到计算机并被处理的符号的集合 数据元素:数据的基本单位 数据项:构成数据的不可分割的最小单位,一个数据元素有若干个数据项组成。 ......

qq_45228323的博客 4万+

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7237

001、数据结构概念

1.什么是数据? 信息的载体,它能被计算机识别、存储和加工处理。它是计算机程序加工的 ’原料‘。 2.数据元素? 数据的基本单位,有些情况下数据元素也称为元素、节点、顶点、记录。 3.数据类型? 所谓数据类型是一个值的集合以及在这些值上定义的一组操作的总称。 例如C语言的”整数类型“就定义了一个整数的可取值得范围(“其最大值int-max依赖于具体机器”)以及对整数可施加的加、减、乘、除和取模等操...

风子的博客 1663

解决Keil uVision许可证管理中Unknown Product错误

嵌入式开发中,IDE工具的许可证管理是确保开发环境正常运行的关键环节。Keil uVision作为ARM架构的主流开发工具,其许可证系统采用加密验证机制,通过产品版本识别实现授权控制。当出现Unknown Product错误时,通常源于版本兼容性问题或区域发行版差异,这直接影响开发工具链的可用性。特别是在维护历史项目或使用中国特供版时,开发者常会遇到此类问题。通过分析许可证类型、调整安装配置或建立虚拟化开发环境等工程实践方案,可以有效解决这类授权验证故障,保障嵌入式项目的持续集成与交付效率。

weixin_33743248的博客 363

01数据结构基本概念

1.1基本概念 数据,数据元素,数据对象,数据类型,抽象数据类型,数据结构 注意: 数据类型:原子类型,结构类型,抽象数据类型{   原子类型:其值不可再分的数据类型;   结构类型:其值可以再分成若干成分的数据类型   抽象数据类型:抽象数据组织和与之相关的操作 } 通常用数据对象,数据关系,基本操作集这样的三元组来表示抽象数据类型。 数据结构是互相之间存在一种或者多种特定关系...

will5451的博客 981

基于传统算法的半导体晶圆缺陷检测原理及代码(二)

了解基于传统算法的半导体晶圆缺陷检测原理和方法,对于深入理解半导体制造工艺和质量控制具有重要意义。在半导体制造技术持续创新的浪潮中,基于传统算法的缺陷检测技术也将不断演进,为半导体产业的高质量发展提供坚实可靠的技术支撑,确保在芯片制造的每一个环节都能精准识别和管控缺陷,推动半导体产业迈向更高的发展水平。基于传统算法的半导体晶圆缺陷检测技术在半导体制造的长期发展历程中扮演了重要角色,凭借其成熟的技术体系、较快的检测速度和相对较低的成本,在各个工艺阶段为保障晶圆质量发挥了关键作用。

m0_44975814的博客 2219

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

python基础数据结构

python基础数据结构

If you can dream it,you can do it. 378

【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板

NPU(Neural Processing Unit) 是专门用于人工神经网络推理与训练的处理器,具备高并行、低功耗、低延迟等特点。它是边缘 AI、自动驾驶、智能摄像头、语音识别等场景中的关键硬件。

moton2017的博客 2249

数据结构基础入门

新手不用追求“一次学完所有数据结构”,先吃透本文讲的数组、链表、栈、队列、哈希表这5种基础结构,再逐步学习树(二叉树、红黑树)、图、堆等更复杂的结构。记住:数据结构的核心是“解决数据处理的效率问题”,学习的关键是“理解本质、动手实践、学以致用”。只要坚持练习,你会发现它并没有那么难,而且会成为你编程路上的“得力助手”。

Aayu_的博客 819

RAP 语义键:让 UUID 世界变得可读、可导航、可校验

RAP 语义键的核心价值与实现要点 语义键(Semantic Key)是 ABAP RAP 模型中连接技术实现与业务体验的关键设计:通过为实体指定一组业务可读的标识字段(如订单号、物料编码等),在保持技术主键(如UUID)不变的同时,显著提升用户界面的可读性和导航体验。 主要优势: 提升UI可读性:Fiori元素会突出显示语义键字段,帮助用户快速识别关键业务数据 改善导航体验:OData URL会使用可读的语义键而非技术ID,便于分享和排查问题 降低沟通成本:业务人员能准确引用有意义的业务标识而非技术ID

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Numpy-基础数据结构

Numpy是python中一个运行速度非常快的的数学库,主要用于数组计算,包含: 一个强大的N维数组对象 ndarray 广播功能函数 线性代数、傅里叶变换、随机数生成等功能 接下来,我会系列介绍Numpy的知识点,包含其基础数据结构,通用函数,索引及切片,随机数生成,数据的读取与输出。 本篇先从numpy的基础数据结构开始。事实上,pyhton中一个更常用且强大的工具包pandas就是在nu...

大志的博客 1194

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据结构——基础

本篇博客记录了有关数据结构的一些基础知识。求点赞收藏加关注!!!

2301_80401288的博客 1191

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据结构基础系列_数据结构基础

数据结构基础系列I recently graduated from a coding bootcamp. By the end, I now feel comfortable creating a web application from ideation through to completion. However, I know that there are gaps in my knowle...

weixin_26705651的博客 268

算法基础之基础数据结构

算法与数据结构的关系是密不可分的。在很多复杂的算法实现过程中,我们都会先考虑如何设计它的数据结构使得算法实现变得简单,如何组织数据能够获得最佳的性能,所以这里准备写一些算法当中使用到的基础的数据结构,它们可以说是进一步学习算法的基石。   本文首先介绍一下线性数据结构,其余数据结构后续会继续进行补充     线性数据结构的存储方式分为顺序存储和链式存储,对于顺序存储一般对应的也就是程序

pwy1024的博客 546

零基础小白如何自学数据结构

零基础学习数据结构是一项需要持续投入精力的任务,从基础的线性数据结构到更复杂的非线性数据结构,再到更深入的应用与优化,逐步掌握各类数据结构的使用方法和效率分析,是提升编程能力的重要路径。通过系统化学习、实践应用、总结与复习,不仅能提高编程技巧,还能在实际开发中做出更合理的设计和优化。

小宝哥Code的专栏 1480

Redis基础数据结构

最近在整理Redis相关的基础数据结构,感谢http://zhangtielei.com/posts/blog-redis-dict.html博客上的分享,基于博主整理了一下思维导图,方便需要的同学参考~

yiranyaoqiu的专栏 847

数据结构的基础

开发工具与关键技术:数据结构的基础 作者:卢雅婷 撰写时间:2020/04/28 为了更好的提高程序的执行效率这样的问题,让学生更快地编写出更高效的程序,数据结构和算法这门课程也随之发展起来了。在这个广泛采用可视化设计的今天,要想成为一个专业的程序开发人员,至少需要满足 (1) 能熟练地选择和设计各种业务逻辑的数据结构和算法 (2) 至少能熟练地掌握一门程序设计语言 (3) 熟知所涉及的相关应用领...

weixin_44538353的博客 1388

java 基础数据结构_Java实现的基础数据结构

Java实现的基础数据结构0,常用的基础数据结构图1 基础数据结构&相关特性图2 Java自带的类集框架&继承关系图1,数组【Array】特点:长度固定、查找方便【直接使用index查找即可】、增加、删除麻烦。图3 数组【查找直接使用index指针即可直接查询】图4 数组添加【需要重新创建新数组对象并产生垃圾空间】图5 数组删除【需要重新创建新数组并且产生垃圾空间】①创建实例化数组...

weixin_42133329的博客 228
上一篇: WCDMA的小区搜索与系统消息接收
下一篇: 算法设计分析基础
究理观心
博客等级 码龄10年 184粉丝 111原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值