(c语言)数据结构教程
1.1 数据结构讨论的范畴 Niklaus Wirth Algorithm + Data Structures = Programs 程序设计: 为计算机处理问题编制一组指令集 算法:处理问题的策略 数据结构:问题的数学模型 例如: 数值计算的程序设计问题 结构静力分析计算 ─━ 线性代数方程组 全球天气预报 ─━ 环流模式方程 非数值计算的程序设计问题 例一: 求一组(n个)整数中的最大值 算法: 基本操作是“比较两个数的大小” 模型:? 例二:计算机对弈 算法:对弈的规则和策略 模型:? 例三:足协的数据库管理 算法:需要管理的项目?如何管理?用户界面? 模型:? 概括地说, 数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中的表示和实现 1.2 基本概念 一、数据与数据结构 数据: 所有能被输入到计算机中,且被计算机处理的符号的集 合计算机操作的对象的总称 是计算机处理的信息的某种特定的符号表示形式 数据元素: 数据中的一个“个体”,数据结构中讨论的基本单位 数据项:数据结构中讨论的最小单位 数据元素是数据项的集合 例如: 运动员(数据元素) 姓名 俱乐部名称 出生日期 参加日期 职务 业绩 其中 出生日期 年 月 日 是组合项 数据结构:带结构的数据元素的集合 例如,一个含12位数的十进制数可以用三个4位的十进制数表示 3214,6587,9345 ─ a1(3214),a2(6587),a3(9345) 在a1、a2和a3 之间存在“次序”关系 a1,a2 、 a2,a3 3214,6587,9345 ≠ 6587,3214,9345 a1 a2 a3 a2 a1 a3 又例,2行3列的二维数组 {a1, a2, a3, a4, a5, a6} a1 a2 a3 a4 a5 a6 行的次序关系:row = {<a1,a2>,<a2,a3>,<a4,a5>,<a5,a6>} 列的次序关系:col = {<a1,a4>,<a2,a5>,<a3,a6>} 再例,一维数组 {a1, a2, a3, a4, a5, a6}中存在 次序关系: {<ai, ai+1>| i=1, 2, 3, 4, 5} 数据的逻辑结构可归结为以下四类: 线性结构 树形结构 图状结构 集合结构 数据结构的形式定义为: 数据结构是一个二元组 Data_Structures = (D, S) 其中:D是数据元素的有限集,S是D上关系的有限集。 严格地讲,以上定义仅是数据的逻辑结构的定义 数据的存储结构 ─━ 逻辑结构在存储器中的映象 数据元素的映象方法: 用二进制位(bit)的位串表示数据元素 (321)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2 关系的映象方法:(表示 x, y 的方法) 顺序映象 以存储位置的相邻表示后继关系 y的存储位置和x的存储位置之间差一个常量C 而C是一个隐含值,整个存储结构中只含数据元素本身的信息 链式映象 以附加信息(指针)表示后继关系 需要用一个和x在一起的附加信息指示y的存储位置 在不同的编程环境中,存储结构可有不同的描述方法, 当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。 例如:以三个带有次序关系的整数表示一个长整数时,可利用C语言中提供的整数数组类型,定义长整数为: typedef int Long_int [3] 二、数据类型 在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。因为类型明显或隐含地规定了,在程序执行期间,变量或表达式所有可能取值的范围,以及在这些之上允许进行的操作。 数据类型是一个值的集合和定义在此集合上的一组操作的总称。 三、抽象数据类型(Abstract Data Type 简称ADT) 是指一个数学模型以及定义在此数学模型上的一组操作 ADT有两个重要特征: 数据抽象 用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法) 数据封装 将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节 例如 抽象数据类型复数的定义: ADT Complex { 数据对象:D={e1,e2|e1,e2∈RealSet } 数据关系:R1={<e1,e2> | e1是复数的实数部分, | e2 是复数的虚数部分 } 基本操作: InitComplex( &Z, v1, v2 ) 操作结果:构造复数Z,其实部和虚部分别被赋以参数v1和 v2的值。 DestroyComplex( &Z) 操作结果:复数Z被销毁。 GetReal( Z, &realPart ) 初始条件:复数已存在。 操作结果:用realPart返回复数Z的实部值。 GetImag( Z, &ImagPart ) 初始条件:复数已存在。 操作结果:用ImagPart返回复数Z的虚部值。 Add( z1,z2, &sum ) 初始条件:z1,z2是复数。 操作结果:用sum返回两个复数z1,z2的和值。 } ADT Complex 假设:z1和z2是上述定义的复数,则Add(z1,z2,z3)操作的结果将得到z3=z1+z2 抽象数据类型的描述方法 抽象数据类型可用(D,S,P)三元组表示 其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。 ADT 抽象数据类型名 { 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为 基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉 基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以&打头, 除可提供输入值外,还将返回操作结果。 “初始条件”描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。 “操作结果”说明了操作正常完成之后,数据结构的变化状况和应返回的结果。若初始条件为空,则省略之。 抽象数据类型的表示和实现 抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现
剩余63页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx