收藏 分享(赏)

SUN数据结构第章绪论第-2讲补充结构体.ppt

上传人:Facebook 文档编号:9722492 上传时间:2019-08-28 格式:PPT 页数:61 大小:325.50KB
下载 相关 举报
SUN数据结构第章绪论第-2讲补充结构体.ppt_第1页
第1页 / 共61页
SUN数据结构第章绪论第-2讲补充结构体.ppt_第2页
第2页 / 共61页
SUN数据结构第章绪论第-2讲补充结构体.ppt_第3页
第3页 / 共61页
SUN数据结构第章绪论第-2讲补充结构体.ppt_第4页
第4页 / 共61页
SUN数据结构第章绪论第-2讲补充结构体.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、数据结构,主讲教师:孙丽云 办公地点:教学楼F103 ,2,课程性质,1.学科基础课; 2.考试课; 3.本学期学分最多的课程; 4.考研课程之一;,计科专业课总分150分,其中:数据结构和计算机组成原理各45分,操作系统35分,计算机网络25分。 7道综合应用题的分配方式为2道数据结构,2道计算机组成原理,2道操作系统,1道计算机网络。,3,该课程共72学时,其中上课56学时,上机16学时。上机时间4-12周,课时安排,4,最终成绩包括平时成绩30%(包括上课情况、交作业情况、上机情况及期中成绩)、期末成绩70%。,成绩组成,5,本章主题:数据结构的基本概念和术语 教学目的:了解数据结构的基

2、本概念,理解常用术语 教学重点:熟悉数据结构常用术语,掌握基本概念,了解算法时间复杂度和空间复杂度的分析与评价 教学难点:数据元素间的 4 种结构关系。,绪论,6,计算机科学技术发展速度惊人,它的广泛应用已从传统的数值计算领域发展到各种非数值计算领域,如用于控制和管理; 计算机加工处理的对象已从简单的数值发展到字符、表格和图象等各种具有一定结构的非数值性数据。,为什么要学数据结构,7,针对每一种新的应用领域的处理对象: 如何选择合适的数据表示(结构); 如何有效地组织计算机存储; 在此基础上又如何有效地实现对象之间的“运算”关系;数据结构就是研究和解决这些问题的重要基础理论。,为什么要学数据结

3、构,8,数据结构课程的主要内容,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。,数据结构主要包括3方面内容:逻辑结构、存储结构(或称物理结构)、数据运算。,数据结构在程序设计中的地位: 程序设计 = 算法 + 数据结构,9,一个含12位数的十进制数可以用三个4位的十进制数表示 3214,6587,9345 a1(3214),a2(6587),a3(9345) 在a1、a2和a3 之间存在“次序”关系 、 3214,6587,9345 6587,3214,9345a1 a2 a3 a2 a1 a3,非数值计算的程序设计问题 例1: 求一组(n个)整数

4、中的最大值 算法: 基本操作是“比较两个数的大小” 数据结构:?,若整数为12位数,在计算机中如何表示该数?,应用举例,10,电话号码查询系统 设有一个电话号码薄,它记录了N个人的名字和其相应的电话号码。要求设计一个算法,当给定任何一个人的名字时,该算法能够打印出此人的电话号码,如果该电话簿中根本就没有这个人,则该算法也能够报告没有这个人的信息。,算法的实现,依赖于计算机如何存储人的名字和对应的电话号码,或者说依赖于名字和其电话号码的结构。,应用举例,11,数据结构在程序设计中的地位:程序设计 = 算法 + 数据结构 数据结构是关于数据组织和处理的基本技术的一门学科,是程序设计的中级课程,主要

5、培养我们分析数据、组织数据的能力,告诉我们如何编写效率高、结构好的程序。,数据结构课程的主要内容,12,1数据(Data) 数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。包括文字、表格、图象等。如一个图书管理程序所要处理的数据可能是一张表格。,基本概念和常用术语,13,2数据元素(Data Element) 数据元素(Data Element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。,基本概念和常用术语,数据元素是数据项的集合。例:

6、运动员信息表表头如下:,14,3数据对象(Data Object) 数据对象(Data Object):是性质相同的数据元素的集合。是数据的一个子集。,概念之间的关系:,数据,数据对象,数据元素,数据项,基本概念和常用术语,15,表1 某班学生成绩管理表,例:通过下表说明数据的相关概念,16,数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。问题:数据结构包括哪3方面内容?,数据结构(Data Structure),17,逻辑结构:描述数据元素间的逻辑关系,与数据的存储无关。 数据逻辑结构可以用二元组(D,R)描述 D:数据元素定义域集合 R:数据元素上的关系ri的集合 主要讨论R=

7、r的情况 关系r中若有序偶,则a称为b的前驱,b称为a的后继,1.逻辑结构,18,逻辑结构可分为: 集合结构:结构中的数据元素除了同属于一种类型外,别无其它关系。较少使用 线性结构:结构中的数据元素之间存在一对一的关系。 树型结构:结构中的数据元素之间存在一对多的关系。 图形结构(或称网状结构):结构中的数据元素之间存在多对多的关系。,1.逻辑结构,19,线性结构,树型结构,图形结构,集合结构,20,一种数据结构G(D, R),其中D=1,2,3,4,5,6R=r r=, , , , 试画出对应的逻辑结构图,并说明它是何种数据结构?,逻辑结构举例,21,物理结构(存储结构):数据结构在计算机中

8、的存储表示。它包括数据元素的表示和关系的表示。 基本物理结构 顺序存储结构 链式存储结构 索引存储结构 散列存储结构,2.存储结构,最常用的两种存储结构,22,顺序结构空间示意图,链式结构空间示意图,数组,用指针实现,2.存储结构,23,3.运算集合,数据运算定义在数据的逻辑结构上,即施加于数据的操作。 例如对一张表的记录进行查找、增加、删除、修改,这就是对数据的运算。 算法的实现与数据的存储结构密切相关。 即: 逻辑结构决定了算法的设计。 物理结构决定了算法的实现。,24,练习题,1.从逻辑上可以把数据结构分为( )两大类。 A动态结构、静态结构 B顺序结构、链式结构 C线性结构、非线性结构

9、 D初等结构、构造型结构,25,练习题,2.采用顺序存储结构表示数据时,相邻的 数据元素的存储地址( )。 A一定连续 B一定不连续 C不一定连续 D部分连续,部分不连续,26,1数据类型(Data Type) 是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称。 通常数据类型可分为两类:一类是基本类型,如C语言中整型、字符型、浮点型、双精度型等;另一类则是构造类型,它由一些基本类型组合构造而成,如数组、结构体和共用体等。,抽象数据类型(Abstruct Data Type,简称ADT),27,2抽象数据类型 ADT是指一个数学模型以及定义在该模型上的一组操作。可以看作是数据的逻辑

10、结构及其在逻辑结构上定义的操作。 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。,抽象数据类型(Abstruct Data Type,简称ADT),28,算法的定义,算法:对特定问题求解步骤的一种描述,是指令的有限序列。其中每一条指令表示一个或多个操作。,例:烧开水的步骤(算法): E1:清洗水壶; E2:将水壶灌入适量的凉水; E3:把水壶放到灶上; E4:打开火; E5:注意倾听,直到听到水开的声音; E6:关火; E7:把开水灌入暖瓶中;,29,有穷性:算法总在执行有穷步后结束,且每一步都在有穷时间内完成。 确定性:不存在二义性,且相同的输入一定得到相

11、同的输出。 可行性:算法描述的操作都可通过已经实现的基本运算执行有限次来实现。 输入:一个算法有零个或多个输入。 输出:一个算法有一个或多个输出。,算法应具有的特性,判断题:算法必须有输出,但可以没有输入。,30,1用自然语言描述算法 2用流程图描述算法 上述两种方法描述的算法不能直接在计算机上执行,必须通过编程将它转换成可执行程序。 3用程序设计(C或C+等)语言描述算法 4用类语言描述算法 类语言比程序设计语言更容易描述和被人理解; 比自然语言更接近程序设计语言。,算法的描述方法,31,“好”算法设计的要求 正确性:算法应满足具体问题的需求。 可读性:便于理解、调试和维护。 健状性:算法应

12、具有容错处理。当输入非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。 高效性和存储量需求:求解同一问题若有多种算法,则执行时间短的算法效率更高,占用存储空间少的算法较好。,算法评价与分析,32,算法效率的度量 时间复杂度,算法的时间复杂度 是指算法运行从开始到结束所需要的时间; 是对算法运行时间长短的相对度量; 是用算法包含的简单操作的次数度量,是问题规模的一个函数。,在实际应用中,往往放弃复杂的函数来表示确切的时间复杂度,而采用一些简单的函数来近似表示时间性能,这就是渐近时间复杂度,简称时间复杂度。,33,算法效率的度量 时间复杂度,例:求下列算法的时间复杂度 main() i

13、nt a,b,c;c=a+b;printf(“the end is:%d”,c); ,时间复杂度为(1),即常量阶。,34,算法效率的度量 时间复杂度,例:求下列算法的时间复杂度: int sum(int n) int i,s=0;for(i=1;i=n;i+)s+=i;return s; ,时间复杂度为(n),即线性阶。,35,例:计算f=1!+2!+3!+n! void factorsum(int n) int i,j,f,w;f=0;for(i=1;i=n;i+) w=1;for(j=1;j=i;j+)w=w*j;f=f+w;return; ,时间复杂度为(n2)。,36,算法效率的度量

14、 时间复杂度,例:for(I=1,I=n;+I)for(j=1;j=n;+j)cIj=0;for(k=1;k=n;+k) cIj+=aIk*bkj; ,时间复杂度为(n3)。,37,for(I=n-1,change=1;I1 change=1; ,该程序中的操作次数依据输入数据的不同而不同,通常这种情况下以最坏的情况为依据计算时间复杂度为:O(n2),算法效率的度量 时间复杂度,38,常见的渐进时间复杂度按数量级递增 排列为: (1)(log2n)(n)(nlog2n) (n2)(n3)(2n),算法效率的度量 时间复杂度,39,考虑自己编的程序的时间复杂度,设计一个时间效率高的算法:36砖3

15、6人搬,男搬4,女搬3,两小孩搬1砖,男女小孩皆参加,要1次全搬完,问各需若干?,编程举例:,40,算法的空间复杂度 S(n) = O(g(n) 表示随着问题规模n的增大,算法运行所需存储量的增长率与g(n)的增长率相同。 算法的存储量包括: 1输入数据所占空间; 2程序本身所占空间; 3辅助变量所占空间。,算法效率的度量 空间复杂度,1数据的逻辑结构、数据的存储结构及数据的运算三方面构成一个数据结构的整体。 2数据结构研究的是数据的表示和数据之间的关系。从逻辑上讲,数据有集合、线性、树和图四种结构。从存储结构上讲,数据有顺序结构、链接结构、索引结构和散列结构四种。理论上,任一种数据逻辑结构都

16、可以用任一种存储结构来实现。 3算法的评价指标主要为正确性、健壮性、可读性和有效性四个方面。有效性又包括时间复杂度(性)和空间复杂度(性)两个方面。一个算法的时间和空间复杂度越好,就越节省时间和空间,则表明该算法越有效。,本章重点,42,1、求从键盘输入的任意两个数的和; 2、若从键盘输入+,则计算键盘输入的两个数的和,若从键盘输入*,则计算键盘输入的两个数的乘积; 3、求从键盘输入的10个整型数的和(用循环结构实现) 思考:若要求数据输入在主函数中,求和在自定义函数中,该如何实现?,复习C结构化程序设计,43,熟悉利用数组名作为函数的参数:从键盘输入十个同学的成绩: (1)找出90分以上(包

17、括90分)的同学的人数; (2)找出最高分; (3)计算出平均分(输出结果保留2位小数)。要求:最好用自定义函数实现这3个要求。,第1次上机内容 (复习C数组名做函数参数):,44,结构体数据类型概述(补充),在程序的设计中, 会遇见一些关系密切、具有内在联系而数据类型不同的数据。 例如, 一个班、一个年级或全校学生的学籍卡包括他们的学号、姓名、性别、年龄、学习成绩、地址 等。这些数据有的是数字、有的是字符,其数据类型不同,对于这样一类数据可以用结构体来处理。,45,概 述,结构体是不同数据类型的数据的集合; 结构体是一种数据类型,它需要用户根据自己的需要,按某种规则定义; 结构体是构造类型的

18、数据。,46,结构体的说明,结构体说明的格式:,struct 结构体名 结构体成员表; ;,成员的表达形式:,数据类型标识符 结构体成员名;,例如:struct date int day;int month;int year;,47,结构体的说明,结构体成员可以是简单变量、数组、指针等。 结构体可以嵌套使用, 即一个结构体变量也可以成为另一个结构体的成员。,struct student int num;char name20;char sex; int age;struct date birthday;int mon_name4;int *year; ;,结构体成员是数组,结构体成员是结构体,

19、结构体成员是指针,例:,48,结构体变量同其它变量一样也必须先定义, 后使用。 结构体变量定义要按照结构体说明中的结构体类型, 为被定义的结构体变量分配内存单元, 而结构体说明不分配内存。,结构体变量的定义,49,结构体变量的定义,struct 结构体名 结构体成员表;. struct 结构体名 结构体变量名表;,其定义格式为:,例如: struct student int num;char name20;float score;char addr30; ; struct student student1,student2,student3;,结构体成员的引用,用结构体成员运算符“.”引用结构

20、体成员格式:,结构体变量名.结构体成员,“.” 结构体成员运算符,优先级最高,struct student long num;char name20;float score;char addr30; ;,引用结构体成员 struct student stu1,stu2; stu1.num=2010001; stu2.score=87; strcpy(stu1.addr,”Beijing”);,例:,51,结构体成员的引用,已有结构体数据类型描述如下: struct student long num;char name20;float score;char addr30; ;,若有如下变量定义:

21、 struct student stu1; struct student *stu2; stu2= 则以下3种引用成员的方式等价:,stu1.num (*stu2).num stu2-num,若定义了指向结构体的指针变量,也可用-来引用成员。,52,结构体变量的初始化,结构体变量的初始化,就是在定义结构体变量的同时,对其成员赋初值。,结构体变量初始化的格式:,struct 结构体名 结构体变量名= 初始数据 ;,与数组类似,结构体变量只可整体初始化,不可整体赋值,但结构体变量间可以相互赋值。,53,main() struct student stu1; stu1=2010001,“Lifeng

22、”,M,18,87.0, “Beijing”; ,例: struct student long num;char name20;char sex;int age;float score;char addr30; ; struct student stu1=2010001, “Li feng”, M, 18, 87.0, “Beijing”;,结构体变量可以整体初始化。,结构体变量不可整体赋值。,54,struct student long num=2010001;char name20=“Li feng”;char sex=M;int age=18;float score=87.0;char

23、addr30=“Beijing”; stu1,stu2;,结构体类型不能直接在结构体成员表中对成员赋初值,55,结构体数组的概念,结构体数组是其数组元素都是具有相同结构体类型的结构体变量。即结构体数组是结构体变量集合的一种数组。,例如:,struct student int num;char name20;char sex;int age;float score;char addr30; stu1,stu2,stu30;,stu30;,56,思考,学生信息包括学号和成绩2项,请从键盘敲入4个学生的信息,然后计算该四名学生的平均成绩并输出结果。 struct studentint num;int

24、 score; struct student s4;,57,用typedef定义数据类型,用typedef定义数据类型就是给已经存在的数据类型重新命名一个新名字。 例如:数据类型float可重新命名为REAL: typedef float REAL; 类型定义的一般形式为: typedef oldtype newtype; 其中typedef是保留字。,58,自定义类型,可以自定义结构体,如: typedef struct student STU;则定义结构体变量就可由 strct student stu1,stu2; 变为: STU stu1,stu2;,59,结构体数据类型练习,要处理的学生信息包括:学号(int),成绩(float),请写一个结构体数据类型(student)表示学生的信息,并定义2个该类型的变量s1和s2。,若想将该数据类型自定义名字为STU该如何?,60,#define MaxLen 100 typedef int DataType; typedef structDataType dataMaxLen; int length; SeqList; SeqList L;,分析如下数据类型,61,第1章结束作业:第1章习题,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报