冯毅《数据结构》ch_第1页
冯毅《数据结构》ch_第2页
冯毅《数据结构》ch_第3页
冯毅《数据结构》ch_第4页
冯毅《数据结构》ch_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构第一章绪论|冯毅Contents本章内容概览冯毅《数据结构》第一章绪论01数据结构实例与研究内容02基本概念与核心术语03数据的逻辑结构与存储结构04抽象数据类型的设计与实现05算法设计与效率分析CHAPTER01数据结构实例与研究内容从飞机订票、物料清单到邮递员送信,理解数据结构的三类典型应用场景CHAPTER01·绪论什么是数据结构?数据结构是计算机专业的核心基础课程,研究非数值计算问题中数据的逻辑组织方式、存储方法以及基于此的操作算法设计,是操作系统、编译原理、数据库、人工智能等后续课程的理论基石。大学计算机专业课堂教学场景01研究非数值计算程序中的操作对象及其相互关系,解决"数据如何组织"和"操作如何高效"两大核心问题。021968年始于美国大学计算机系教学计划,现已成为全球计算机类专业不可或缺的专业基础课程。03为操作系统、编译原理、数据库、人工智能、计算机网络等后续课程提供数据组织与算法设计的理论基础。04从逻辑结构到存储结构再到算法设计,三个层面逐层递进,培养针对实际问题选择或设计恰当数据结构的能力。CaseStudy·实例一飞机订票系统(线性结构)飞机订票系统是线性数据结构的典型应用——航班记录按顺序线性排列,每条记录包含航班号、城市、时间、票价等字段,查询与订票操作本质上是线性表上的遍历与更新,揭示了"一对一"关系的数据组织方式。01数据元素构成:航班信息表中每条记录包含航班号、起始城市、到达城市、起降时间、票价和剩余座位等字段,构成一个数据元素02查找操作:客户通过起始城市和起降时间查找航班,系统沿线性表逐条比对匹配,体现了线性结构上的查找操作03更新操作:订票操作根据客户输入的姓名、证件号、航班号和票数,更新对应记录的座位信息,体现了线性表上的更新操作04广泛应用:同类线性结构广泛应用于学籍管理、选课系统、网上购物订单、仓库账目管理等各类信息管理场景机场航班信息显示屏——线性表在现实系统中的典型载体DATASTRUCTURES·TREE实例二:物料清单BOM(树结构)物料清单BOM是制造业信息系统的核心部件,用树形结构描述产品的层次化配套关系——产品为树根、组件为中间节点、零件和原材料为叶子,相比线性罗列更能清晰表达'一对多'的层级从属关系。制造业工厂生产线——BOM驱动生产管理的实际场景01BOM完整配套清单:包含所有子件、零件、原材料的清单及数量,描述产品从成品到原材料的完整配套层次02树形优于线性罗列:线性罗列丢失层次关系,不利于产品设计与改进;树形结构以树根-枝干-叶子清晰呈现一对多的层级从属03遍历驱动生产管理:接收订单时对树逐层遍历检查库存状态,本厂件排产、外构件下单,驱动生产管理流程04二叉树优化策略:将通用树转化为每个节点最多两个分叉的二叉树后,增删改查算法更加简洁成熟CHAPTER01·数据结构基础实例三:邮递员送信(图结构)邮递员送信问题是经典"中国邮路问题"的直观呈现,用顶点表示地点、边表示通路构建图结构,揭示数据元素之间"多对多"的复杂关系。01邮递员从邮局出发经过所有送信地点后返回,要求路线总长度最短,这是经典的"中国邮路问题"02用顶点表示地点、两点间连线表示通路、边上的权值表示距离,构建出描述多对多关系的"图"数据结构03图结构突破线性结构的"一对一"和树结构的"一对多"限制,能表达任意两个元素之间都可能存在关联的复杂网络04城市物流配送、网络布线、道路规划、社交网络分析等场景均以图结构作为核心建模工具邮递员送信路线示意·城市道路网络构成图结构的天然应用场景DATASTRUCTUREFUNDAMENTALS从实例看数据结构的研究内容三个案例揭示了数据结构研究的三大核心维度:数据的逻辑结构(元素间的内在关系)、数据的存储结构(在计算机中的表示方式)、以及基于存储结构的操作算法设计,三者层层递进构成完整研究框架。逻辑结构研究数据元素之间的固有关系:线性(一对一)、树形(一对多)、图形(多对多)或集合(无特定关系)独立于计算机实现,是对问题本质的数学抽象,决定了后续存储和算法的基本框架线性·树形·图形存储结构将逻辑结构映射到计算机内存:顺序存储利用连续空间,链式存储通过指针连接分散节点同一逻辑结构可有多种存储方案,不同方案在空间利用率和操作效率上各有优劣顺序·链式运算与算法在特定存储结构上设计查找、插入、删除、排序、遍历等基本操作的具体实现步骤算法设计的核心目标是提高效率——用更少的时间和更少的存储空间完成相同的数据处理任务时间·空间CHAPTER02基本概念与核心术语数据、数据元素、数据对象、数据结构——建立精确的学科语言体系CHAPTER01·FUNDAMENTALS数据、数据元素与数据对象数据、数据元素、数据对象是数据结构中三个层次递进的基础概念:数据是广义的符号集合,数据元素是数据的基本单位(个体),数据对象是性质相同的数据元素的集合(子集),三者构成从宏观到微观的认知体系。数据(Data)描述客观事物的数、字符及所有能输入计算机并被处理的符号集合,是程序加工的原料和输出结果。分为数值性数据(整数、实数、复数等,用于科学计算)和非数值数据(字符、声音、图像等,用于信息管理)。符号集合数据元素(DataElement)数据的基本单位,也称为记录、结点或顶点,在程序中通常作为一个整体进行考虑和处理。一个数据元素可由多个数据项组成,如学生记录包含学号、姓名、成绩等,数据项是不可分割的最小单位。基本单位数据对象(DataObject)性质相同的数据元素的集合,是数据的一个子集,如所有整数构成整数数据对象。实际应用中,数据结构操作的对象通常是某个特定的数据对象,而非全部数据。性质相同CHAPTER01·FUNDAMENTALS数据结构的定义与表示数据结构形式化定义为二元组(D,S)——D是数据元素的有限集合,S是D上关系的有限集合。不同的关系赋予相同数据集以不同的结构特性。01形式化定义(D,S)D为数据元素的有限集,S为D上关系的有限集,关系决定了元素之间的逻辑联系。02同一集合·不同结构相同元素集合D可定义不同的关系S,如学生集合可按学号排序或按班级分组。03三位一体逻辑结构、存储结构与数据运算三方面构成有机整体,缺一不可。04序偶表示关系可用序偶⟨x,y⟩表示,序偶的集合构成了数据结构中的关系集合S。CHAPTER03数据的逻辑结构与存储结构四种逻辑结构与两大存储方式——理解数据组织的核心分类框架DataStructure·LogicalClassification四种基本逻辑结构按数据元素之间的逻辑关系,数据结构可分为集合、线性、树形和图状四种基本类型,分别对应"无关系"、"一对一"、"一对多"和"多对多"四种关系模式,从简到繁覆盖所有数据组织场景。集合结构元素间除"同属一个集合"外无其他关系,是最松散的组织形式,如整数集合、字符集合无关系线性结构元素存在一对一的前驱-后继关系,每个元素至多一个前驱和一个后继,如排队序列、时间线一对一树形结构元素存在一对多的层次关系,每个元素至多一个前驱但可有多个后继,如组织架构、文件系统一对多图状结构元素间存在多对多关系,任意两元素均可相连,如交通网络、社交网络、通信网络多对多STORAGESTRUCTURE两大存储结构:顺序vs链式顺序存储利用连续内存实现随机访问但增删代价高;链式存储通过指针连接节点,增删灵活但不支持随机访问。两者互补,需按场景选择。顺序存储结构连续内存+随机访问逻辑相邻元素存放在物理相邻的连续存储单元中,通过下标可直接计算地址,访问效率高增删代价高插入需后移后续元素,删除需前移后续元素;但存储密度高,无额外指针开销典型实现:数组适用于元素数量相对固定、查找频繁而增删较少的场景,如静态数据表链式存储结构指针连接+分散存放元素存放在任意位置的存储单元中,通过指针域记录后继元素的地址,物理位置无需连续增删灵活高效只需修改相关指针,无需搬移其他元素;但每个节点需额外存储指针,增加空间开销典型实现:链表适用于元素数量动态变化、频繁增删但对随机访问需求较低的场景,如动态队列Chapter01·DataStructures扩展存储方式:索引与散列索引存储通过附加索引表加速数据定位,散列存储通过哈希函数将关键字直接映射到地址实现近乎即时的查找,两者是对顺序和链式存储的重要扩展,在数据库和大规模数据检索中发挥关键作用。01索引存储在主数据区外建立索引表,记录关键字与存储地址的对应关系,类似书的目录,加速目标定位索引表02索引策略索引表可按关键字排序(如B+树索引),也可按区域分组(如分块索引),不同索引策略适配不同查询模式B+树03散列存储通过散列函数将元素关键字直接计算为存储地址,理想情况下查找时间复杂度为O(1)O(1)04散列冲突不同关键字映射到同一地址是核心挑战,常用链地址法和开放地址法解决链地址法CHAPTER04抽象数据类型的设计与实现从数据封装到接口定义——掌握数据结构的描述框架与设计方法论DATATYPE&ADT从数据类型到抽象数据类型数据类型定义了值的范围和允许的操作,抽象数据类型ADT将这一思想推广到复杂数据结构——封装数据对象、数据关系和基本操作为一体,对外暴露接口、隐藏实现细节,是数据结构设计的核心方法论。01一组值的集合及定义在该集合上的一组操作的总称,如C语言中int定义了整数范围和算术运算02分为原子类型(不可再分,如int、char)和结构类型(可分解为若干成分,如struct)03数学模型+定义在该模型上的一组操作,形式化为三元组:(数据对象,数据关系,基本操作)04核心思想是"信息隐藏"——使用者只需了解接口的功能和调用方式,无需关心底层存储和实现DATATYPE数据类型值域+操作ABSTRACTDATATYPE抽象数据类型数据对象·数据关系·基本操作封装三要素为一体对外暴露接口,隐藏实现细节ADTFormalDefinitionADT的三元组表示法抽象数据类型ADT用三元组(数据对象,数据关系,基本操作)形式化描述。每个基本操作需明确操作名、初始条件、操作过程和结果,这种规范化表达确保了数据结构设计的严谨性和可实现性。数据对象定义描述ADT所包含数据元素的性质和特征,明确数据对象是什么、由哪些成分组成。数据对象是ADT的基础载体,决定了类型能够处理的信息范畴。元素性质数据关系定义描述数据元素之间的逻辑结构特征,如线性关系中的前驱-后继、树形关系中的父子层次。关系定义决定了ADT的组织方式和访问路径。逻辑结构基本操作定义列出ADT必须支持的核心操作(如初始化、插入、删除、遍历),每个操作需明确四要素。操作集合定义了ADT的功能边界和行为规范。核心操作操作四要素操作名称(做什么)、初始条件(执行前提)、操作过程(执行步骤)、结果(产生的效果)。四要素确保操作语义精确无歧义,便于实现和验证。四要素Chapter1·ADTADT的表示与实现ADT的实现分为"表示"和"实现"两步:用结构体定义数据的物理存储,用函数编写基本操作的具体代码,通过封装实现接口与实现的分离,使得底层修改不影响上层调用,是软件工程中模块化设计的基石。表示(Representation)用C语言struct定义数据存储格式,将ADT中描述的数据对象转化为具体的内存布局,确定数据在计算机中的物理存储方式结构体实现(Implementation)用C语言函数编写每个基本操作的代码,将ADT中描述的操作转化为可执行的具体算法,完成从抽象描述到实际功能的转换算法封装原则对外暴露函数接口(如InitTruck、Load),隐藏内部存储细节,实现接口与实现的分离,保护数据不被外部直接访问和修改接口分离实现可替换只要接口不变,底层存储从顺序改为链式或从数组改为散列,调用代码无需修改,支持灵活优化和版本升级模块化Chapter05算法设计与效率分析从算法定义到复杂度评估——掌握衡量程序性能的科学方法DesignRequirements算法设计的四个要求好算法需满足正确性、可读性、健壮性和高效率四个要求。正确性是底线,分四个层次递进验证;可读性保障可维护性;健壮性确保异常输入下的安全运行;高效率追求最少的时间和空间开销。Correctness正确性对合法输入在有限时间内得出正确结果,分无语法错误、典型输入正确、边界正确、任意输入正确四个层次4层次递进Readability可读性算法逻辑清晰、结构规范,便于阅读理解、调试和维护,避免过于晦涩的"巧妙"写法可维护性Robustness健壮性对不合法的输入数据能做出恰当处理或返回错误提示,而非崩溃或产生不可预知结果安全运行Efficiency高效率在满足正确性的前提下,尽可能减少执行时间和存储空间占用时间+空间Chapter01·Fundamentals时间复杂度:大O表示法时间复杂度用大O记号描述算法基本操作执行次数随问题规模n增长的变化趋势,忽略常数系数和低阶项,聚焦于算法效率的数量级特征,提供了一种与硬件和编程语言无关的效率评估方法。语句频度某条语句在算法中被重复执行的次数,所有语句频度之和构成算法的时间开销T(n)T(n)大O表示法T(n)=O(f(n)),取T(n)中增长最快的最高阶项并忽略常数系数,描述效率的数量级O(f(n))分析步骤确定基本操作→统计次数→用n的函数表达→取大O简化,如3n²+2n+1→O(n²)O(n²)核心优势屏蔽硬件速度、编程语言、编译器优化等因素,提供通用的可比较效率度量标准UniversalCOMPLEXITYANALYSIS常见时间复杂度对比常见时间复杂度从快到慢排列为O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(2ⁿ),随着问题规模n增大,不同复杂度之间的效率差距呈几何级数扩大,选择低复杂度算法是程序性能优化的根本途径。不同时间复杂度的操作次数增长趋势(n=10~100)随n增大,O(n²)操作次数急剧攀升,O(n)和O(nlogn)增长平缓,凸显低复杂度算法在大规模数据下的巨大优势AlgorithmComplexity时间复杂度分析实战时间复杂度分析的关键在于找到嵌套最深的基本操作,统计其执行次数与问题规模n的函数关系。单层循环为O(n)、双重嵌套为O(n²)、循环变量倍增为O(logn),掌握这三种模式即可应对大多数分析场景。O(n)—单层循环循环变量i从0递增到n-1,循环体执行n次,基本操作次数与n成正比,复杂度O(n)。常见于数组遍历、顺序查找等场景。线性O(n²)—双重嵌套循环外层循环n次,每次内层也循环n次,基本操作总次数为n×n=n²,复杂度O(n²)。常见于冒泡排序、矩阵乘法等算法。平方O(logn)—倍增循环循环变量i每次乘以2(1→2→4→8→...→n),循环次数为log₂n,复杂度O(logn)。典型应用如二分查找、平衡树查询等高效算法。对数TIMECOMPLEXITYANALYSIS最好、最坏与平均时间复杂度同一算法在不同输入下效率可能差异显著:最好情况给出效率上界,最坏情况给出效率下界,平均情况综合概率分布。最好情况时间复杂度算法在最优输入下的执行效率,如线性查找目标恰在首位时为O(1)O(1)最坏情况时间复杂度算法在最差输入下的执行效率,如线性查找目标在末尾或不存在时为O(n)O(n)平均时间复杂度假设所有合法输入等概率出现,计算期望执行次数,如线性查找平均为O(n)E[O(n)]实践原则最坏情况提供效率下限保证,是算法评价的主要依据;平均情况更贴近实际但需引入概率假设效率下限保证AlgorithmComplexity空间复杂度分析空间复杂度S(n)=O(f(n))衡量算法运行过程中所需的额外存储空间随问题规模n的增长趋势。与时间复杂度共同构成算法效率评估的完整体系,递归算法的空间开销与调用栈深度直接相关。"额外空间"定义空间复杂度关注算法执行时除输入数据外额外申请的存储,不包括输入本身占用的空间。这是评估算法内存效率的核心指标。额外空间O(1)常数空间仅需常数级额外存储,如冒泡排序只用一个临时变量交换,属于原地排序算法。空间效率最优。O(1)O(n)线性空间需与输入规模成正比的额外空间,如归并排序需等大辅助数组,递归深度为n时栈空间也为O(n)。O(n)时空权衡策略实际开发中常以空间换时间(如缓存加速查找)或以时间换空间,需根据场景约束合理取舍。权衡AlgorithmComparison综合案例:有序数组查找的算法对比以有序数组查找为例,顺序查找时间O(n)、空间O(1),二分查找时间O(logn)、空间O(1)。二分查找利用数据已排序的特性将效率提升数个数量级,完美诠释了"选择合适的数据结构与算法是程序性能优化的根本"。顺序查找vs二分查找效率对比对比维度顺序查找二分查找前提条件无要求数组必须有序最好时间O(1)O(1)最坏时间O(n)O(logn)平均时间O(n)O(logn)空间复杂度O(1)O(1)(迭代)n=100万时最坏比较次数1,000,000次约20次二分查找利用有序性将最坏情况从百万级降至约20次比较,体现了算法选择对性能的决定性影响CHAPTERSUMMARY本章知识框架总结绪论从实例出发建立了数据结构的完整认知框架:三类典型逻辑结构、四个层次核心术语、四种逻辑结构与两大存储方式、ADT三元组设计方法论、以及大O表示法的算法效率分析体系,为后续章节奠定理论基础。概念体系核心术语:数据→数据元素→数据对象→数据结构,四个概念层层递进逻辑结构四分类:集合、线性、树形、图状,覆盖从简到繁的所有关系模式存储结构两主线:顺序存储(连续空间、随机访问)与链式存储(指针连接、灵活增删)4+2设计方法论ADT三元组:(数据对象,数据关系,基本操作),封装接口与实现分离的设计哲学算法五特性:有穷性、确定性、可行性、输入、输出,四要求:正确、可读、健壮、高效3+5+4效率分析工具时间复杂度O(f(n)):统计基本操作次数,取最高阶项,描述效率随规模增长的趋势空间复杂度S(n):衡量额外存储开销,递归算法需考虑调用栈深

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论