1、数据结构 Data Structure 主讲: 刘燕丽 Password:12345678武汉科技大学信息与计算科学系 2012年8月8日,教学内容:什么是数据结构?(体会)数据结构可以做什么?(体验)数据结构包含哪些内容?(思路)算法效率如何估计?(难点)数据结构如何学习?(积累),1.1 什么是数据结构(1),示例:为风景区设计景点咨询系统,其中包括求最短路径等功能。,数据结构:是一门研究非数值计算的程序设计问题,讨论其中的操作对象和它们之间的关系以及操作如何在计算机中表示和实现的学科。,1.1 什么是数据结构(2),数据结构做什么?有一组N个整数,需要确定其中第K个最大者学科地位 写程序
2、,从数据结构开始! 精通程序,从精通数据结构开始!,1.1 什么是数据结构(3),课程内容 Chapter1:绪论 Chapter27:各种基本数据结构的表示、实现和应用 Chapter910:查找和排序算法教材及参考书 严蔚敏,数据结构(C语言版),清华大学出版社 严蔚敏,数据结构题集(C语言版) ,清华大学出版社,1.2 基本概念和术语,数据、数据元素、数据项 数据结构 逻辑结构与物理结构 数据类型 抽象数据类型,1.2 基本概念和术语 (1),数据 所有被输入到计算机并被其处理的信息。 例如:数值计算程序、编译程序、文字处理程序、多媒体播放程序等处理的对象。 数据元素 数据的基本单位,通
3、常作为一个整体进行考虑和处理。 数据项 一个数据元素可以由若干数据项组成。,1.2 基本概念和术语(1),数据结构 相互之间存在一种或多种特定关系的数据元素的集合。 根据数据元素间关系的不同,有以下四类基本结构:,线性结构,树形结构,图状结构,集合结构,1.2 基本概念和术语(2),数据结构的形式定义 数据结构是一个二元组 Data_Structure = (D, S)其中:D 是数据元素的有限集,S 是 D上关系的有限集。注:通常,关系由有序偶的集合表示,用来说明元素间的关系。 例:给出复数对应的数据结构Complex.,练习,设有数据结构(D,R),其中D=d1,d2,d3,d4, R=r
4、,r=,试画出其逻辑结构图,并说明它属于哪一种数据结构。设有数据结构(D,R),其中D=d1,d2,d3,d4, R=r,r=,试画出其逻辑结构图,并说明它属于哪一种数据结构。,1.2 基本概念和术语(3),逻辑结构 前述数据结构定义中的“关系”是数据元素间的逻辑关系,因此又称为数据的逻辑结构。 物理结构 逻辑结构在计算机中的表示(又称映像)称为数据的物理结构,又称存储结构。 它包括“数据元素”的表示和“关系”的表示; 关系有两种表示方法: 顺序映象:以元素在 内存中的相对位置来表示元素间的逻辑关系顺序存储结构; 非顺序映象: 借助指针来表示元素间的逻辑关系链式存储结构。,1.2 基本概念和术
5、语(4),数据类型 在用高级程序语言编写的程序中,程序中出现的每个变量、常量或表达式都有一个它所属的数据类型。 类型规定了它们在程序执行期间变量或表达式所有可能取值的范围以及在这些值上允许进行的操作。按“值”的不同特性,分为两类:原子类型(如整型、实型、字符型、指针型等);结构类型(如数组等)。 思考:引入数据类型的目的。,1.2 基本概念和术语(5),抽象数据类型(Abstract Data Type 简称ADT) 是指一个数学模型以及定义在此数学模型上的一组操作。一个含ADT的软件模块通常包含定义、表示和实现3个部分(ADT的定义只考虑数据类型的逻辑特性,而不研究其在计算机内部的具体表示和
6、实现) 。特点:不仅包括已定义并实现的数据类型,还包括用户自己定义的数据类型。,1.2 基本概念和术语(5),抽象数据类型的定义方法 抽象数据类型可用(D,S,P)三元组表示。其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。用以下格式定义ADT:,ADT 抽象数据类型名 数据对象:数据对象的定义数据关系:数据关系的定义基本操作:基本操作的定义 ADT 抽象数据类型名 其中基本操作的定义格式为: 基本操作名(参数表)初始条件:初始条件描述操作结果:操作结果描述,例:定义抽象数据类型“复数”。,数据对象:数据关系:基本操作:InitComplex( &Z, v1, v2 )操作结果:构
7、造复数 Z, 其实部和虚部分别被赋以v1和v2 的值。DestroyComplex( &Z)操作结果:复数Z被销毁。GetReal( Z, &realPart )初始条件:复数已存在。操作结果:用realPart返回复数Z的实部值。,ADT Complex ,GetImag( Z, &ImagPart )初始条件:复数已存在。操作结果:用ImagPart返回复数Z的虚部值。,Add( z1,z2, &sum )初始条件:z1, z2是复数。操作结果:用sum返回两个复数z1, z2 的和值。, ADT Complex,De1,e2e1,e2RealSet ,R1,补充:参数传递的两种方式,C语
8、言中采用值传递,void swap1(int x,int y)int t;t=x;x=y;y=t; void swap2(int *p,int *q)int t;t=*p;*p=*q;*q=t; int main()int a=5,b=10;swap1(a,b);printf(“%d %d”,a,b); ,C+中增添引用调用,什么是引用? int i; int ,引用作为形参,则成为实参的别名; 对形参的操作直接作用于实参。,练习,已知自定义结构体类型typedef structchar20 name; /学生姓名int math; /数学成绩int eng; /英语成绩int db; /数据
9、库成绩Student;分别以值传递和引用调用两种方式编写函数SetZero,实现对学生成绩的清零操作,并在主函数中以正确的方式调用。分别以值传递和引用调用两种方式编写函数CalPfh,计算两个整数的平方和,并在主函数中以正确的方式调用。,回顾,数据结构课程主要研究什么问题? 依元素间关系不同,数据结构可分为哪几类? 如何理解逻辑结构、存储结构? 存储结构分为哪两类? ADT的定义、表示和实现分别在软件开发的哪个阶段进行? 定义一个ADT时,需从哪些方面进行描述?,小结,了解数据结构的重要性,总体把握学习内容和目的; 理解几个重要概念: 数据结构 逻辑结构 存储结构 抽象数据类型 掌握ADT的表示方法。 熟练掌握C+中引用调用的参数传递方法。,