数据结构与算法01:绪论【LEARN FROM 李春葆《数据结构教程》】
文章目录
- 0.写在前面
- 1.数据结构总览
- 1.1 内容
- 1.2 数据结构在计算机课程体系(偏软)中的地位
- 1.3 数据结构与程序设计类课程的关系
- 1.4 数据结构的学习目标
- 1.5 数据结构的学习方法
- 2.什么是数据结构
- 2.1 数据结构的定义
- 2.1.1 数据结构中的几个概念
- 2.1.2 一个数据结构的构成
- 2.1.2.1 数据的逻辑结构表示
- 2.1.2.2 数据的存储结构表示
- 2.1.2.3 数据运算
- 2.2 逻辑结构类型
- 2.2.1 集合
- 2.2.2 线性结构
- 2.2.3 树形结构
- 2.2.4 图形结构
- 2.3 存储结构类型
- 2.4 数据类型和抽象数据类型
- 2.4.1 数据类型
- 2.4.2 抽象数据类型
- 3.算法及其描述
- 3.1 什么是算法
- 3.2 算法描述
- 4.算法分析
- 4.1 算法分析概述
- 4.2 算法时间复杂度分析
- 4.2.1 算法分析方式
- 4.2.2 分析算法的执行时间
- 4.2.3 算法的执行时间用时间复杂度来表示
- 4.2.4 简化的算法时间复杂度分析
- 4.2.5 最好、最坏和平均时间复杂度分析
- 4.2.6 算法空间复杂度分析
- 5.数据结构+算法=程序
- 5.1 程序和数据结构
- 5.2 算法和程序
- 5.3 算法和数据结构
- 5.4 数据结构的发展
- 6.总结
- 6.1 从数据结构角度求解问题的过程
- 6.2 算法描述―输出型参数
0.写在前面
关于本文,被收集在我的专栏《数据结构与算法教程笔记》中,笔记整理来自李春葆老师的《数据结构教程第六版》。更多章节可参考该专栏。【该专栏目前处于持续更新状态 -2022/9/11 】
1.数据结构总览
1.1 内容
1.2 数据结构在计算机课程体系(偏软)中的地位
C语言
编译原理
数据库原理
软件工程
1.3 数据结构与程序设计类课程的关系
基本算法设计方法
算法设计方法学
1.4 数据结构的学习目标
掌握数据结构的基本概念、基本原理和基本方法。
掌握数据的逻辑结构、存储结构及基本运算的实现过程。
#mermaid-svg-CX7PXlTiN5WEPry8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .error-icon{fill:#552222;}#mermaid-svg-CX7PXlTiN5WEPry8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CX7PXlTiN5WEPry8 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-CX7PXlTiN5WEPry8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CX7PXlTiN5WEPry8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CX7PXlTiN5WEPry8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CX7PXlTiN5WEPry8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CX7PXlTiN5WEPry8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CX7PXlTiN5WEPry8 .marker.cross{stroke:#333333;}#mermaid-svg-CX7PXlTiN5WEPry8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CX7PXlTiN5WEPry8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .cluster-label text{fill:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .cluster-label span{color:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .label text,#mermaid-svg-CX7PXlTiN5WEPry8 span{fill:#333;color:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .node rect,#mermaid-svg-CX7PXlTiN5WEPry8 .node circle,#mermaid-svg-CX7PXlTiN5WEPry8 .node ellipse,#mermaid-svg-CX7PXlTiN5WEPry8 .node polygon,#mermaid-svg-CX7PXlTiN5WEPry8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CX7PXlTiN5WEPry8 .node .label{text-align:center;}#mermaid-svg-CX7PXlTiN5WEPry8 .node.clickable{cursor:pointer;}#mermaid-svg-CX7PXlTiN5WEPry8 .arrowheadPath{fill:#333333;}#mermaid-svg-CX7PXlTiN5WEPry8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CX7PXlTiN5WEPry8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CX7PXlTiN5WEPry8 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-CX7PXlTiN5WEPry8 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-CX7PXlTiN5WEPry8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CX7PXlTiN5WEPry8 .cluster text{fill:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 .cluster span{color:#333;}#mermaid-svg-CX7PXlTiN5WEPry8 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-CX7PXlTiN5WEPry8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}提炼设计实现求解问题
数据运行-->数据数据逻辑结构数据存储结构数据基本运行:算法掌握算法基本的时间复杂度与空间复杂度的分析方法,能够设计出求解问题的高效算法。
✏️ 同一求解问题通常有多种实现算法,通过时间复杂度与空间复杂度的分析,找出最好的实现算法。
1.5 数据结构的学习方法
理解各种数据结构的逻辑特性和存储结构设计
#mermaid-svg-g0itRNUEhSJwqFEg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .error-icon{fill:#552222;}#mermaid-svg-g0itRNUEhSJwqFEg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-g0itRNUEhSJwqFEg .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-g0itRNUEhSJwqFEg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-g0itRNUEhSJwqFEg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-g0itRNUEhSJwqFEg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-g0itRNUEhSJwqFEg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-g0itRNUEhSJwqFEg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-g0itRNUEhSJwqFEg .marker.cross{stroke:#333333;}#mermaid-svg-g0itRNUEhSJwqFEg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-g0itRNUEhSJwqFEg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .cluster-label text{fill:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .cluster-label span{color:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .label text,#mermaid-svg-g0itRNUEhSJwqFEg span{fill:#333;color:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .node rect,#mermaid-svg-g0itRNUEhSJwqFEg .node circle,#mermaid-svg-g0itRNUEhSJwqFEg .node ellipse,#mermaid-svg-g0itRNUEhSJwqFEg .node polygon,#mermaid-svg-g0itRNUEhSJwqFEg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-g0itRNUEhSJwqFEg .node .label{text-align:center;}#mermaid-svg-g0itRNUEhSJwqFEg .node.clickable{cursor:pointer;}#mermaid-svg-g0itRNUEhSJwqFEg .arrowheadPath{fill:#333333;}#mermaid-svg-g0itRNUEhSJwqFEg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-g0itRNUEhSJwqFEg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-g0itRNUEhSJwqFEg .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-g0itRNUEhSJwqFEg .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-g0itRNUEhSJwqFEg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-g0itRNUEhSJwqFEg .cluster text{fill:#333;}#mermaid-svg-g0itRNUEhSJwqFEg .cluster span{color:#333;}#mermaid-svg-g0itRNUEhSJwqFEg 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-g0itRNUEhSJwqFEg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}映射:计算机中的表示逻辑特性存储结构线性表栈队列串数组树二叉树图掌握各种数据结构算法设计的基本方法
✏️ 只有掌握了数据的存储结构表示,才能在此之上设计算法
#mermaid-svg-jGbJcN6ZqoCsDdhg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .error-icon{fill:#552222;}#mermaid-svg-jGbJcN6ZqoCsDdhg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jGbJcN6ZqoCsDdhg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .marker.cross{stroke:#333333;}#mermaid-svg-jGbJcN6ZqoCsDdhg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .cluster-label text{fill:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .cluster-label span{color:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .label text,#mermaid-svg-jGbJcN6ZqoCsDdhg span{fill:#333;color:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .node rect,#mermaid-svg-jGbJcN6ZqoCsDdhg .node circle,#mermaid-svg-jGbJcN6ZqoCsDdhg .node ellipse,#mermaid-svg-jGbJcN6ZqoCsDdhg .node polygon,#mermaid-svg-jGbJcN6ZqoCsDdhg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .node .label{text-align:center;}#mermaid-svg-jGbJcN6ZqoCsDdhg .node.clickable{cursor:pointer;}#mermaid-svg-jGbJcN6ZqoCsDdhg .arrowheadPath{fill:#333333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jGbJcN6ZqoCsDdhg .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jGbJcN6ZqoCsDdhg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jGbJcN6ZqoCsDdhg .cluster text{fill:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg .cluster span{color:#333;}#mermaid-svg-jGbJcN6ZqoCsDdhg 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-jGbJcN6ZqoCsDdhg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}映射:计算机中的表示运算实现逻辑特性存储结构算法设计利用各种数据结构来求解实际问题
#mermaid-svg-vweDXJdDCkIJlKB8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .error-icon{fill:#552222;}#mermaid-svg-vweDXJdDCkIJlKB8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vweDXJdDCkIJlKB8 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-vweDXJdDCkIJlKB8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vweDXJdDCkIJlKB8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vweDXJdDCkIJlKB8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vweDXJdDCkIJlKB8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vweDXJdDCkIJlKB8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vweDXJdDCkIJlKB8 .marker.cross{stroke:#333333;}#mermaid-svg-vweDXJdDCkIJlKB8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vweDXJdDCkIJlKB8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .cluster-label text{fill:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .cluster-label span{color:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .label text,#mermaid-svg-vweDXJdDCkIJlKB8 span{fill:#333;color:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .node rect,#mermaid-svg-vweDXJdDCkIJlKB8 .node circle,#mermaid-svg-vweDXJdDCkIJlKB8 .node ellipse,#mermaid-svg-vweDXJdDCkIJlKB8 .node polygon,#mermaid-svg-vweDXJdDCkIJlKB8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vweDXJdDCkIJlKB8 .node .label{text-align:center;}#mermaid-svg-vweDXJdDCkIJlKB8 .node.clickable{cursor:pointer;}#mermaid-svg-vweDXJdDCkIJlKB8 .arrowheadPath{fill:#333333;}#mermaid-svg-vweDXJdDCkIJlKB8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vweDXJdDCkIJlKB8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vweDXJdDCkIJlKB8 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-vweDXJdDCkIJlKB8 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-vweDXJdDCkIJlKB8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vweDXJdDCkIJlKB8 .cluster text{fill:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 .cluster span{color:#333;}#mermaid-svg-vweDXJdDCkIJlKB8 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-vweDXJdDCkIJlKB8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}求解问题数据如何表示(选择合适的数据结构)数据运算如何实现数据运算如何高效实现演绎和归纳相结合
#mermaid-svg-2EjO7BbaOhKeSR8n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .error-icon{fill:#552222;}#mermaid-svg-2EjO7BbaOhKeSR8n .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2EjO7BbaOhKeSR8n .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-2EjO7BbaOhKeSR8n .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2EjO7BbaOhKeSR8n .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2EjO7BbaOhKeSR8n .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2EjO7BbaOhKeSR8n .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2EjO7BbaOhKeSR8n .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2EjO7BbaOhKeSR8n .marker.cross{stroke:#333333;}#mermaid-svg-2EjO7BbaOhKeSR8n svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2EjO7BbaOhKeSR8n .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .cluster-label text{fill:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .cluster-label span{color:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .label text,#mermaid-svg-2EjO7BbaOhKeSR8n span{fill:#333;color:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .node rect,#mermaid-svg-2EjO7BbaOhKeSR8n .node circle,#mermaid-svg-2EjO7BbaOhKeSR8n .node ellipse,#mermaid-svg-2EjO7BbaOhKeSR8n .node polygon,#mermaid-svg-2EjO7BbaOhKeSR8n .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2EjO7BbaOhKeSR8n .node .label{text-align:center;}#mermaid-svg-2EjO7BbaOhKeSR8n .node.clickable{cursor:pointer;}#mermaid-svg-2EjO7BbaOhKeSR8n .arrowheadPath{fill:#333333;}#mermaid-svg-2EjO7BbaOhKeSR8n .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2EjO7BbaOhKeSR8n .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2EjO7BbaOhKeSR8n .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-2EjO7BbaOhKeSR8n .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-2EjO7BbaOhKeSR8n .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2EjO7BbaOhKeSR8n .cluster text{fill:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n .cluster span{color:#333;}#mermaid-svg-2EjO7BbaOhKeSR8n 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-2EjO7BbaOhKeSR8n :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}演绎学习训练归纳总结数据结构鱼(内容):基本概念,基本原理和基本方法练习(作业和编程)渔(方法):求解问题的能力
2.什么是数据结构
2.1 数据结构的定义
2.1.1 数据结构中的几个概念
数据:所有能够输入到计算机中,且能被计算机处理的符号的集合。数据结构中主要讨论结构化数据。
数据元素:是数据(集合)中的一个“个体”,它是数据的基本单位。
数据项:数据项是用来描述数据元素的,它是数据的最小单位。
数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象是所有整数的集合。默认情况下,数据结构中讨论的数据都是数据对象。
数据结构:是指带结构的数据元素的集合。
#mermaid-svg-kwU689xqMXDizx2o {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kwU689xqMXDizx2o .error-icon{fill:#552222;}#mermaid-svg-kwU689xqMXDizx2o .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kwU689xqMXDizx2o .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kwU689xqMXDizx2o .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kwU689xqMXDizx2o .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kwU689xqMXDizx2o .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kwU689xqMXDizx2o .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kwU689xqMXDizx2o .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kwU689xqMXDizx2o .marker.cross{stroke:#333333;}#mermaid-svg-kwU689xqMXDizx2o svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kwU689xqMXDizx2o .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kwU689xqMXDizx2o .cluster-label text{fill:#333;}#mermaid-svg-kwU689xqMXDizx2o .cluster-label span{color:#333;}#mermaid-svg-kwU689xqMXDizx2o .label text,#mermaid-svg-kwU689xqMXDizx2o span{fill:#333;color:#333;}#mermaid-svg-kwU689xqMXDizx2o .node rect,#mermaid-svg-kwU689xqMXDizx2o .node circle,#mermaid-svg-kwU689xqMXDizx2o .node ellipse,#mermaid-svg-kwU689xqMXDizx2o .node polygon,#mermaid-svg-kwU689xqMXDizx2o .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kwU689xqMXDizx2o .node .label{text-align:center;}#mermaid-svg-kwU689xqMXDizx2o .node.clickable{cursor:pointer;}#mermaid-svg-kwU689xqMXDizx2o .arrowheadPath{fill:#333333;}#mermaid-svg-kwU689xqMXDizx2o .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kwU689xqMXDizx2o .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kwU689xqMXDizx2o .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-kwU689xqMXDizx2o .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-kwU689xqMXDizx2o .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kwU689xqMXDizx2o .cluster text{fill:#333;}#mermaid-svg-kwU689xqMXDizx2o .cluster span{color:#333;}#mermaid-svg-kwU689xqMXDizx2o 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-kwU689xqMXDizx2o :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}数据结构数据对象:相同性质的数据元素的集合结构:数据元素之间的关系构成结构
2.1.2 一个数据结构的构成
- 数据的逻辑结构:数据元素之间的逻辑关系
- 数据的存储结构(或物理结构):数据元素及其关系在计算机存储器中的存储方式
- 数据运算:施加在该数据上的操作
2.1.2.1 数据的逻辑结构表示
数据的逻辑结构是面向用户的,它有多种表示形式。
二元组是一种通用的逻辑结构表示方法。
每个关系的用若干个序偶来表示
2.1.2.2 数据的存储结构表示
1️⃣ 数据在计算机存储器中的存储方式就是存储结构。它是面向程序员的。逻辑结构映射存储结构。
2️⃣ 设计存储结构的这种映射应满足两个要求:
存储所有元素
存储数据元素间的关系
结构体数组(顺序存储结构)
- 所有元素占用一整块内存空间
- 逻辑上相邻的元素,物理上也相邻。
链表(链式存储结构)
- 一个逻辑元素用一个结点存储,每个结点单独分配,所有结点的地址不一定是连续的。
- 用指针来表示逻辑关系。
2.1.2.3 数据运算
数据运算是对数据的操作。分为两个层次:运算描述 和 运算实现。
- 同一逻辑结构可以对应多种存储结构。
- 同样的运算,在不同的存储结构中,其实现过程是不同的
2.2 逻辑结构类型
各种各样的数据呈现出不同的逻辑结构,归纳为4种。
2.2.1 集合
- 元素之间关系:无。
- 特点:数据元素之间除了“属于同一个集合”的关系外,别无其他逻辑关系。是最松散的,不受任何制约的关系。
2.2.2 线性结构
- 元素之间关系:一对一。
- 特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且仅有一个前驱元素和一个后继元素。
2.2.3 树形结构
- 元素之间关系:一对多。
- 特点:开始元素唯一,终端元素不唯一。除终端元素以外,每个元素有一个或多个后继元素;除开始元素外,每个元素有且仅有一个前驱元素。
2.2.4 图形结构
- 元素之间关系:多对多。
- 特点:所有元素都可能有多个前驱元素和多个后继元素。
2.3 存储结构类型
在软件开发中,人们设计了各种存储结构。 归纳为4种基本的存储结构。
- 顺序存储结构
- 链式存储结构
- 索引存储结构
- 哈希(散列)存储结构
2.4 数据类型和抽象数据类型
2.4.1 数据类型
1️⃣ 在高级程序语言中提供了多种数据类型。不同数据类型的变量,其所能取的值的范围不同,所能进行的操作不同。
2️⃣ 数据类型 是一个值的集合和定义在此集合上的一组操作的总称
3️⃣ 数据类型和数据结构的关系:数据类型就是已经实现了的数据结构。
2.4.2 抽象数据类型
1️⃣ 抽象数据类型(ADT)指的是从求解问题的数学模型中抽象出来的数据逻辑结构和运算(抽象运算),而不考虑计算机的具体实现。
2️⃣ 抽象数据类型 = 逻辑结构 + 抽象运算
3️⃣ 抽象数据类型实质上就是对一个求解问题的形式化描述(与计算机无关),程序员可以在理解基础上实现它。
3.算法及其描述
3.1 什么是算法
数据元素之间的关系有逻辑关系和物理关系,对应的运算有基于逻辑结构的运算描述和基于存储结构的运算实现。
1️⃣ 数据是各种信息的表现形式
2️⃣ 算法表现为“处理”和“数据”的结合
通常把基于存储结构的运算实现的步骤或过程称为算法。更一般地,算法
是 解决问题的处理步骤
✏️ 算法的五个重要的特性
有穷性
:在有穷步之后结束,算法能够停机。确定性
:无二义性。可行性
:可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行。输入
:0个或多个输入【表示存在数据处理】输出
:1个或多个输出【表示存在数据处理】
✏️ 算法和程序的区别
程序
是指使用某种计算机语言对一个算法的具体实现,即具体要怎么做。程序不一定满足
有穷性
算法
侧重于对解决问题的方法描述,即要做什么。算法一定满足
有穷性
算法用计算机语言描述 --> 程序
3.2 算法描述
❓ 如何描述输出型参数
数据结构与算法01:绪论【LEARN FROM 李春葆《数据结构教程》】相关推荐
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法 pdf_整理一个月完成的数据结构与算法PDF和测试代码免费拿
点击上方「10分钟编程」关注我呦 让我们每天「博学」一点点 数据结构与算法 作为一名2021届的学生,今年7月份就要面临秋招了,那么对于应届生来说,要想脱颖而出,笔试就显得太重要了,算法题是笔试环节的 ...
- 数据结构与算法(Java版) | 本套系列教程的内容介绍
文章目录 本套系列教程的内容介绍 第一章节:内容介绍和授课方式 第二章节:数据结构与算法的介绍 第三章节:稀疏数组和队列 第四章节:链表 第五章节:栈 第六章节:递归 第七章节:排序算法 第八章节:查 ...
- 数据结构与算法(Java版) | 本套系列教程的课程亮点和授课方式
接下来,在这一讲,我会花一点时间同同学们达成一个共识,就是我们这套系列教程在讲述的时候,究竟是以一种什么方式来讲述的.我希望,经过我的讲解之后,大家能够对我们这套系列教程的课程亮点和授课方式达成如下这 ...
- 【数据结构-ZZU】01. 绪论
一.绪论 1. 理解数据元素.数据结构.数据的逻辑结构与物理结构.逻辑结构与物理结构间的关系. 基本概念: 数据结构:指相互之间存在一种或多种特定关系的数据元素的集合.(数据结构就是研究数据的逻辑结构 ...
- 数据结构与算法01:一张图概括【数据结构】是什么?(大白话+图解)
大白话+图解,数据结构到底是什么? 数据结构:数据结构(data structure)描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构.数据的存储结构和数据的运算. ...
- DAY 21冲击蓝桥杯——Python数据结构与算法01 时间复杂度
是指算法的执行效率 算法的执行时间与算法的输入值之间的关系 for/while循环 O(n) 无循环 则为常量O(1) 常见时间复杂度案例分析: O(1): def O1(num):i=numj=nu ...
- 数据结构和算法———P1 绪论
逻辑结构 集合结构 线性结构 树形结构 图形结构 物理结构 顺序存储 链式存储 – 内容+指针 – 指针指向下一个地址
- java数据结构与算法_清华大学出版社-图书详情-《数据结构与算法分析(Java版)》...
前 言 数据结构是计算机程序设计重要的理论技术基础,它不仅是计算机学科的核心课程,而且已经成为计算机相关专业必要的选修课.其要求是学会分析.研究计算机加工的数据结构的特性,初步掌握算法的时间和空间分析 ...
- python数据结构和算法讲解_【学习】python数据结构和算法
二.算法分析 2.2 什么是算法分析 大O表示法 image.png 2.3 python数据结构的性能 列表 image.png 字典 image.png 说一下list[index]的o(1)原理 ...
最新文章
- 一文讲解图像插值算法原理!附Python实现
- 思科3750开启策略路由功能
- java连接redis无法连接,报异常RedisConnectionException
- python学习手册条件-总算晓得python学习手册正式版
- 实现JavaScript数组拍平/扁平化的方法
- 1 分钟教会你用 Spring Boot 发邮件
- 拉里.埃里森_耶鲁大学演讲
- 亲自己主动手从源代码 构建 Groovy 2.3.8 公布包
- SAP Spartacus travis ci-scripts 下面 e2e-cypress.sh 的实现分析
- 基于android的交流平台,基于Android的移动学习交流平台的设计与实现
- 关于vertical layout不能水平居中对齐的原因
- 推荐系统:非个性化推荐Non-personalized recommendation
- 将 url query参数 字符串转换为JSON 对象
- 2020计算机核心期刊,中国科技核心(2019–2020中文核心期刊目录)
- 根号n向下取整的c语言编程,【向上取整/向下取整】C语言向上或向下取整 函数...
- 北京航空航天大学计算机考研资料汇总
- dell刷sn_像API一样地通过Dell设备SN号自动获取准确的设备型号
- (ICCV 19) Deep Closest Point: Learning Representations for Point Cloud Registration
- python最大分词_北大开源了Python中文分词工具包,准确度远超Jieba
- js 清除对象里的属性值为空的属性
热门文章
- python拼写检查_python 英语单词拼写检查算法
- 锐捷交换机密码恢复操作
- HDU6441 Find Integer(2018CCPC网络赛,费马大定理)
- 说话干嘛要“之道”啦?(1-10)
- unity 报错 Some objects were not cleaned up when closing the scene. 原因与方案
- 华为设备SEP配置命令
- 小球碰撞python代码_python开发的小球完全弹性碰撞游戏代码_python_脚本之家
- 从乡巴佬到世界首富,连续7年蝉联全球最大公司:真正厉害的人,都敢于不走寻常路...
- RW Utility工具使用介绍
- QIODevice::write : device not open