回炉重造之数据结构【一】绪论
数据结构的基本概念
基本概念和术语
1、数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。
2、数据元素:数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位。
3、数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集
同一个数据对象里的数据元素,可以组成不同的数据结构
4、数据类型:数据类型是一个值的集合和定义在此集合上的一组操作的总称
(1)原子类型:其值不可再分的数据类型
(2)结构类型:其值可以再分解为若干成分(分量)的数据类型
(3)抽象数据类型(ADT):抽象数据组织及与之相关的操作
抽象数据类型=(数据对象,数据关系,基本操作)
定义一个ADT,就是“定义”一种数据结构
ADT用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。
ADT分类:原子类型、固定聚合类型、可变聚合类型
5、数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据结构=逻辑结构+存储结构+数据的运算
(2)一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
不同的数据元素,可组成相同的数据结构
数据结构的三要素
1、数据的逻辑结构:
(1)定义:逻辑结构指数据元素之间的逻辑关系,即从逻辑关系上描述数据。与数据的存储无关,独立于计算机。
(2)分类:
#mermaid-svg-agtuNOChR682F4yY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-agtuNOChR682F4yY .error-icon{fill:#552222;}#mermaid-svg-agtuNOChR682F4yY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-agtuNOChR682F4yY .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-agtuNOChR682F4yY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-agtuNOChR682F4yY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-agtuNOChR682F4yY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-agtuNOChR682F4yY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-agtuNOChR682F4yY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-agtuNOChR682F4yY .marker.cross{stroke:#333333;}#mermaid-svg-agtuNOChR682F4yY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-agtuNOChR682F4yY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-agtuNOChR682F4yY .cluster-label text{fill:#333;}#mermaid-svg-agtuNOChR682F4yY .cluster-label span{color:#333;}#mermaid-svg-agtuNOChR682F4yY .label text,#mermaid-svg-agtuNOChR682F4yY span{fill:#333;color:#333;}#mermaid-svg-agtuNOChR682F4yY .node rect,#mermaid-svg-agtuNOChR682F4yY .node circle,#mermaid-svg-agtuNOChR682F4yY .node ellipse,#mermaid-svg-agtuNOChR682F4yY .node polygon,#mermaid-svg-agtuNOChR682F4yY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-agtuNOChR682F4yY .node .label{text-align:center;}#mermaid-svg-agtuNOChR682F4yY .node.clickable{cursor:pointer;}#mermaid-svg-agtuNOChR682F4yY .arrowheadPath{fill:#333333;}#mermaid-svg-agtuNOChR682F4yY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-agtuNOChR682F4yY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-agtuNOChR682F4yY .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-agtuNOChR682F4yY .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-agtuNOChR682F4yY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-agtuNOChR682F4yY .cluster text{fill:#333;}#mermaid-svg-agtuNOChR682F4yY .cluster span{color:#333;}#mermaid-svg-agtuNOChR682F4yY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-agtuNOChR682F4yY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
数据的逻辑结构
线性结构
非线性结构
一般线性表
受限线性表
线性表推广
栈和队列
串
数组
集合
树形结构
图状结构
一般树
二叉树
有向图
无向图
注:线性结构:一对一;树形结构:一对多;图状结构或网状结构:多对多。
2、数据的存储结构
(1)定义:存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。
(2)分类:
#mermaid-svg-sfkIV3ESlPSiVxld {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .error-icon{fill:#552222;}#mermaid-svg-sfkIV3ESlPSiVxld .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sfkIV3ESlPSiVxld .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sfkIV3ESlPSiVxld .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sfkIV3ESlPSiVxld .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sfkIV3ESlPSiVxld .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sfkIV3ESlPSiVxld .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sfkIV3ESlPSiVxld .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sfkIV3ESlPSiVxld .marker.cross{stroke:#333333;}#mermaid-svg-sfkIV3ESlPSiVxld svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sfkIV3ESlPSiVxld .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .cluster-label text{fill:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .cluster-label span{color:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .label text,#mermaid-svg-sfkIV3ESlPSiVxld span{fill:#333;color:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .node rect,#mermaid-svg-sfkIV3ESlPSiVxld .node circle,#mermaid-svg-sfkIV3ESlPSiVxld .node ellipse,#mermaid-svg-sfkIV3ESlPSiVxld .node polygon,#mermaid-svg-sfkIV3ESlPSiVxld .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sfkIV3ESlPSiVxld .node .label{text-align:center;}#mermaid-svg-sfkIV3ESlPSiVxld .node.clickable{cursor:pointer;}#mermaid-svg-sfkIV3ESlPSiVxld .arrowheadPath{fill:#333333;}#mermaid-svg-sfkIV3ESlPSiVxld .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-sfkIV3ESlPSiVxld .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-sfkIV3ESlPSiVxld .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-sfkIV3ESlPSiVxld .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-sfkIV3ESlPSiVxld .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-sfkIV3ESlPSiVxld .cluster text{fill:#333;}#mermaid-svg-sfkIV3ESlPSiVxld .cluster span{color:#333;}#mermaid-svg-sfkIV3ESlPSiVxld div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-sfkIV3ESlPSiVxld :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
数据的存储结构
顺序存储
非顺序存储
链式存储
索引存储
散列存储
a)顺序存储:物理上必须连续;会有碎片产生
b)非顺序存储:各个数据元素在物理上可以是离散的
3、数据存储结构的影响
(1)影响存储空间分配的方便程度;
(2)影响对数据运算的速度;
4、数据的运算:针对某种逻辑结构,结合实际需求,定义基本运算
算法和算法评价
算法的基本概念
1、算法:算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。
2、算法的特性:有穷性、确定性、可行性、输入、输出。
3、一个“好”的算法应考虑的目标:正确性、可读性、健壮性、效率与低存储量需求
算法效率的度量
1、时间复杂度:一个语句在算法中被重复执行的次数, T ( n ) = O ( f ( n ) ) T(n)=O(f(n)) T(n)=O(f(n))。
2、空间复杂度:算法所耗费的存储空间(如递归调用的深度), S ( n ) = O ( g ( n ) ) S(n)=O(g(n)) S(n)=O(g(n))。
3、加法规则: T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( m a x ( f ( n ) , g ( n ) ) ) T(n)=T_1(n)+T_2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
4、乘法规则: T ( n ) = T 1 ( n ) × T 2 ( n ) = O ( f ( n ) ) × O ( g ( n ) ) = O ( f ( n ) × g ( n ) ) T(n)=T_1(n)\times T_2(n)=O(f(n))\times O(g(n))=O(f(n)\times g(n)) T(n)=T1(n)×T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))
5、常见的渐近时间复杂度:常对幂指阶
O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
#mermaid-svg-YLHZy9ysNfrPLIfh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .error-icon{fill:#552222;}#mermaid-svg-YLHZy9ysNfrPLIfh .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YLHZy9ysNfrPLIfh .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-YLHZy9ysNfrPLIfh .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YLHZy9ysNfrPLIfh .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YLHZy9ysNfrPLIfh .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YLHZy9ysNfrPLIfh .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YLHZy9ysNfrPLIfh .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YLHZy9ysNfrPLIfh .marker.cross{stroke:#333333;}#mermaid-svg-YLHZy9ysNfrPLIfh svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YLHZy9ysNfrPLIfh .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .cluster-label text{fill:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .cluster-label span{color:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .label text,#mermaid-svg-YLHZy9ysNfrPLIfh span{fill:#333;color:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .node rect,#mermaid-svg-YLHZy9ysNfrPLIfh .node circle,#mermaid-svg-YLHZy9ysNfrPLIfh .node ellipse,#mermaid-svg-YLHZy9ysNfrPLIfh .node polygon,#mermaid-svg-YLHZy9ysNfrPLIfh .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YLHZy9ysNfrPLIfh .node .label{text-align:center;}#mermaid-svg-YLHZy9ysNfrPLIfh .node.clickable{cursor:pointer;}#mermaid-svg-YLHZy9ysNfrPLIfh .arrowheadPath{fill:#333333;}#mermaid-svg-YLHZy9ysNfrPLIfh .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YLHZy9ysNfrPLIfh .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YLHZy9ysNfrPLIfh .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-YLHZy9ysNfrPLIfh .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-YLHZy9ysNfrPLIfh .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YLHZy9ysNfrPLIfh .cluster text{fill:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh .cluster span{color:#333;}#mermaid-svg-YLHZy9ysNfrPLIfh div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YLHZy9ysNfrPLIfh :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}
绪论
数据结构
逻辑结构
存储结构
数据运算
线性结构/一对一
非线性结构
集合
树结构/一对多
图结构/多对多
ADT
数据对象
数据关系
基本操作
算法
特性
有穷性,确定性,可行性,输入,输出
度量
时间复杂度
空间复杂度
回炉重造之数据结构【一】基本概念相关推荐
- 《回炉重造 Java 基础》——集合(容器)
整体框架 绿色代表接口/抽象类:蓝色代表类. 主要由两大接口组成,一个是「Collection」接口,另一个是「Map」接口. 前言 以前刚开始学习「集合」的时候,由于没有好好预习,也没有学好基础知识 ...
- 真人电影中的幻想生物迷墙:索尼克为什么被骂到回炉重造?
<大侦探皮卡丘>上映在即,当网友们对着雷佳音配音的皮卡丘大呼好萌好萌时,我们仿佛又来到了大型真香现场--明明在几个月之前,当人们看到毛茸茸的大叔音皮卡丘时还每个细胞都充满了拒绝. 也有一种 ...
- 机器人学回炉重造(2-4):运动学奇异位型分析
文章目录 什么是运动学奇异位型? 例子:平面二连杆机械手的奇异位型 奇异位型解耦 腕部奇异位型 手臂奇异位型 转载:6轴串联关节机器人的奇异点 参考文献 什么是运动学奇异位型? 在初步系统地了解了机器 ...
- Vue回炉重造之封装防刷新考试倒计时组件
你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...
- 机器人学回炉重造(1-2):各种典型机械臂的正运动学建模(标准D-H法)
文章目录 写在前面 三连杆平面机械臂 平行四边形操作臂 闭链结构 例:平行四边形操作臂 球形臂 拟人臂 球腕 斯坦福机械臂 带球形手腕的拟人化机械臂 DLR机械臂 参考文献 写在前面 本文所有机械臂均 ...
- 机器人学回炉重造(5-2):关节空间规划方法——梯形加减速(与抛物线拟合的线性函数)、S型曲线规划
文章目录 写在前面 学习代码都记录在[个人github](https://github.com/xuuyann/RobotLearningCode)上,欢迎关注~ 梯形加减速(与抛物线拟合的线性函数) ...
- Vue回炉重造之封装一个实用的人脸识别组件
你好,我是Vam的金豆之路,可以叫我豆哥.2019年年度博客之星.技术领域博客专家.主要领域:前端开发.我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀 ...
- 机器人学回炉重造(2-3):基本雅可比矩阵与其他雅可比矩阵
文章目录 基本雅可比矩阵 定义 求法 其他雅可比矩阵 定义 求法 补充:几何雅可比与解析雅可比 基本雅可比矩阵 定义 用笛卡尔坐标描述线速度(linear velocity)和角速度(angular ...
- javacript回炉重造之基础细节点
ascript之回炉重造 var n5=2e5 2*10的五次方 0x开头十六进制 0o开头八进制 0b开头二进制 typeof 用于检测数据类型 值类型(基本类型):字符串(String).数字(N ...
最新文章
- 全连接条件随机场_最新:通沪铁路一期连接上海虹桥站和上海站,二期连接浦东机场和上海东站...
- Java实现前中后序线索化二叉树以及遍历
- Python:3种方式实现随机生成8位字符
- 新赛题上线!2021CCF大数据与计算智能大赛全面开赛!
- [Android Pro] Android 6.0 Root
- 如何利用Python批量将Word中的信息提取到Excel?
- vue内容横向循环滚动_vue文字横向滚动公告
- 诗与远方:无题(七十三)
- MFC通过sql访问excel的方法
- SQL-SERVER2008登录错误233
- 团队协助 开源项目_适合小团队的协作工具,良心开源项目管理工具
- 在主函数中输入10个等长的字符串。用另一函数对他们排序
- win10字体显示Mac效果+Chrome字体效果增强
- 微信浏览器禁止下载的处理方法-跳转浏览器打开
- 介绍字模软件使用场景
- Kafka集群搭建与测试详细教程 | 附带详详细截图
- C++著名库的比较和学习经验
- 应用文件夹加入环境变量
- 蔡康永的说话之道总结
- 计算机程序漏洞用英语怎么说,安全漏洞的英文
热门文章
- 怎样做一道阿尔法贝塔剪枝的题(图解)
- 基于AD的表单认证 Moss2010
- 【源码】基于Simulink的混合动力汽车模型
- PHP Web程序设计与Ajax技术pdf
- 历届图灵奖获得者和主要贡献
- c语言编写一个猜数字游戏编写
- 使用Python暴力破解密码
- 支付宝支付成功后session失效
- linux蓝牙hcd,Ubuntu下蓝牙设置
- mysql 高并发下查询很慢_MySQL-高并发优化