版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构数据结构2001vb@163.com山东理工大学·理学院殷超山东理工大学·理学院殷超···引言《数据结构》是计算机学科的核心课程,是一门专业技术基础课。学科目的:了解数据对象的特性,学会数据组织的方法和把现实世界中的问题在计算机内部表示的方法;及培养基本的、良好的程序设计技能。先修课程:计算机文化基础、C语言程序设计
《数据结构》与
程序设计语言课的区别C语言:侧重通过编写具体的程序而理解、把握语言的特性及语言的运用。数据结构:侧重于数据的组织形式及在此基础上解决问题的策略和方法(算法)。
算法与
程序的区别什么是算法?程序的对象?算法的对象?算法的真正意图?可读性与抽象性第一章绪论1.1什么是数据结构1.2基本概念1.3算法和算法的度量一、计算机解决问题的步骤问题
(分析)(数学)模型(技巧)
算法(语言)
程序调试运行
1.1什么是数据结构
Algorithm
+DataStructures=Programs程序:算法:数据结构:
为计算机处理问题编制的一组指令集。
处理问题的策略。问题的(数学)模型。许多实际问题可以通过抽象出一个数学模型,用数学方法加以解决。如:求解梁架结构中应力的数学模型为线性方程组;预报人口增长的数学模型为微分方程。然而,还有很多非数值计算问题不能描述成数学语言,下面我们来看几个例子:算法+数据结构=程序N.维尔特
(NiklausWirth)教授提出:NiklausWirth(1934--)是一位瑞士的计算机科学家,他设计了有名的Pascal结构化语言,并且在软件工程界有许多杰出的研究。1984他获得了有「计算机界的诺贝尔奖」之称的「图灵奖」theTuringAward。注:Wirth读作维尔特。
2010年6月NiklausWirth应邀访问西北大学。耿国华-数据结构国家精品课程例一、书目自动检索系统登录号:书名:作者名:分类号:出版单位:出版时间:价格:书目卡片书目文件按书名按作者名按分类号索引表线性表二、非数值计算的程序设计问题登录号分类号例二、人机对奕问题树……..……..…...…...…...…...设某田径比赛共有六个比赛项目,规定每个选手至多可参加三个项目,有五人报名参加比赛(如下表所示)。设计比赛日程表,使比赛能在尽可能短的时间内完成。例三、田径比赛的时间安排问题(1)设用如下六个不同的代号代表不同的项目:跳高跳远标枪铅球100米200米
A B CDE F(2)用顶点代表比赛项目;(3)在不能同时进行比赛的顶点之间连上一条边;
(同一选手参加的项目之间必定有边相连)(4)给顶点涂色:任何有边相连的顶点不能涂同一种颜色,且使涂色数目尽量少。解法如下:姓名项目1项目2项目3丁一ABE刘二CD
张三CEF李四DFA王五BF比赛时间比赛项目1A,C2B,D3E4F只需安排四个单位时间进行比赛BCDEAFBDECAF图例四、多叉路口交通灯管理问题图EDABCABACADBABCBDDADBDCEAEBECED
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。概括地说,1.1结束1.2基本概念一、数据与数据结构二、数据类型三、抽象数据类型一、数据与数据结构所有能被输入到计算机中,且能被计算机处理的符号(数值、字符等)的集合。数据:是计算机操作的对象的总称。是计算机处理的信息的某种特定的符号表示形式。是数据(集合)中的一个“个体”,在计算机中通常作为一个整体进行考虑和处理。是数据结构中讨论的基本单位。数据元素:如:整数“5”,字符“N”,棋盘的一个“格局”等。
其中每个款项称为一个“数据项”它是数据结构中讨论的最小单位数据元素也可以由若干款项构成。例如:描述一个学生的数据元素称之为组合项原子项姓名学号班级性别出生日期入学成绩年月日数据结构:带结构的数据元素的集合有一个特性相同的数据元素的集合,如果在数据元素之间存在一种或多种特定的关系,则称为一个数据结构。指数据元素之间存在的关系例如,可以用三个
4位的十进制数表示一个含
12位数的十进制数。3214,6587,9345
─
a1(3214),a2(6587),a3(9345)则在数据元素a1、a2和a3
之间存在着“次序”关系
a1,a2
、
a2,a3
3214,6587,9345a1a2a36587,3214,9345a2a1a3≠例如:···序偶由某个集合中元素x与y,以确定的顺序所组成的一对:第一个是x,第二个是y,称为序偶,记为<x,y>或(x,y)。平面上点的坐标,就是实数集的一个序偶,(3,5)与(5,3)表示不同的点。哈密顿*用序偶来表示复数*,这种用序偶来定义一类数的思想,已成为公理化又例,在2行3列的二维数组中{a1,a2,a3,a4,a5,a6}六个元素之间存在两类关系:行的次序关系:列的次序关系:row={<a1,a2>,<a2,a3>,<a4,a5>,<a5,a6>}col={<a1,a4>,<a2,a5>,<a3,a6>}
a1a3a5
a2a4a6a1a2a3a4a5a6
a1a2a3a4a5a6
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
可见,不同的“关系”构成不同的“结构”。从关系或结构分,数据结构可归结为以下四类:线性结构树形结构图状结构集合结构数据结构包括“逻辑结构”
和“物理结构”两个方面(层次):逻辑结构
是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系来表示;物理结构是逻辑结构在计算机中的表示和实现,故又称“存储结构”。数据结构的形式定义描述为:数据结构是一个二元组
Data_Structures=(D,S)其中:D是数据元素的有限集,
S是D上关系的有限集。定义“班集体”为一个数据结构Class=(D,S)D={a,b1,…,bn,c1,…cn,d1,…dn
}S={R1,R2}R1={<a,b1>,<a,c1>,<a,d1>}R2={<b1,bj>,<c1,cj>,<d1,dj>|j=2,3,…,n}例如:学生考勤事务管理系统(班长—组长—成员)设某班有一个班长,三个组长,每组n个成员。数据的存储结构
——逻辑结构在存储器中的映象“数据元素”的映象?“关系”的映象?数据元素的映象方法:用二进制位(bit)的位串表示数据元素(321)10=(501)8=(101000001)2A=(101)8=(001000001)2关系的映象方法:(表示
x,y
的方法)顺序映象以相对的存储位置表示后继关系例如:
令y的存储位置和x的存储位置之间差一个常量C;通常取x存储位置之后的位置(即位置相邻)。整个存储结构中只含数据元素本身的信息。x
y链式映象以附加信息(指针)表示后继关系需要用一个和x在一起的附加信息指示y的存储位置yx在不同的编程环境中,存储结构可有不同的描述方法,
当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。例如:以三个带有次序关系的整数表示一个长整数时,可利用C语言中提供的整数数组类型,
typedef
int
Long_int[3]定义长整数为:再如:typedef
struct{
inty;//年号Year
intm;//月号Month
intd;//日号Day}
DateType;//日期类型定义“日期”为:定义“学生”为:typedef
struct{
charid[8];//学号
charname[16];//姓名
chargender;//性别‘M/F’:男/女
DateType
bdate;//出生日期}Student;//学生类型一、数据与数据结构二、数据类型三、抽象数据类型二、数据类型
在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所
属的数据类型。例如,C
语言中提供的基本数据类型有:整型int浮点型float字符型char逻辑型bool双精度型double
数据类型
是一个值的集合和定义在此集合上的一组操作的总称。
不同类型的变量,其所能取的值的范围不同,所能进行的操作不同。一、数据与数据结构二、数据类型三、抽象数据类型三、抽象数据类型
(AbstractDataType
简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。例如:“整数”是一个抽象数据类型。其数学特性和具体的计算机或语言无关。
“抽象”的意义在于强调数据类型的数学特性。···整数(Integer):像-2,-1,0,1,2这样的数称为整数。(整数是表示物体个数的数,0表示有0个物体)整数是人类能够掌握的最基本的数学工具。代数性质
下表给出任何整数a,b和c的加法和乘法的基本性质。
分配律a×(b+c)=(a×b)+(a×c)抽象数据类型还包括用户在设计软件系统时自己定义的数据类型。在构造软件系统的各个相对独立的模块时,定义一组数据和施与这些数据之上的一组操作,并在模块内部给出它们的表示和实现细节,在模块外部使用的只是抽象的数据和抽象的操作。例例如,定义抽象数据类型“复数”
数据对象:
D={e1,e2|e1,e2∈RealSet}
数据关系:
R1={<e1,e2>|e1是复数的实数部分,
|e2
是复数的虚数部分}ADTComplex{基本操作:
AssignComplex(&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的和值。}ADTComplex假设:z1和z2是上述定义的复数则Add(z1,z2,z3)操作的结果z3=z1+z2即为:ADT有两个重要特征:数据抽象
用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法);数据封装
将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。抽象数据类型的描述方法抽象数据类型可用(D,S,P)三元组表示其中,D是数据对象,
S是D上的关系的集合,
P是对D的基本操作的集合。ADT
抽象数据类型名{
数据对象:〈数据对象的定义〉
数据关系:〈数据关系的定义〉
基本操作:〈基本操作的定义〉}ADT
抽象数据类型名其中基本操作的定义格式为:基本操作名(参数表)
初始条件:〈初始条件描述〉
操作结果:〈操作结果描述〉
赋值参数只为操作提供输入值;引用参数以&打头,除可提供输入值外,还将返回操作结果。初始条件描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。操作结果说明了操作正常完成之后,数据结构的变化状况和应返回的结果。抽象数据类型的表示和实现抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。例如,对以上定义的复数typedef
struct{
float
realpart;
float
imagpart;}complex;//-----存储结构的定义//-----基本操作的函数原型说明void
AssignComplex(complex&Z,
float
realval,float
imagval);//
构造复数Z,其实部和虚部分别被赋以参数//realval
和imagval
的值float
GetReal(cpmplexZ);
//返回复数Z的实部值float
GetImag(cpmplexZ);
//返回复数Z的虚部值voidAdd(complexz1,complexz2,complex&sum);
//以sum返回两个复数z1,z2的和//-----基本操作的实现voidAdd(complexz1,complexz2,complex&sum){
//以sum返回两个复数z1,z2的和
sum.realpart=z1.realpart+z2.realpart;
sum.imagpart=z1.imagpart+z2.imagpart;}
{其它省略
}回顾数据结构:相互之间存在一种或几种特定关系的数据元素的集合。是一个值的集合和定义在此集合上的一组操作的总称。抽象数据类型:是指一个数学模型以及定义在此数学模型上的一组操作。数据类型:
1.3算法和算法的度量一、算法二、算法设计的原则三、算法效率的度量方法和准则四、算法的存储空间需求
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。一个算法应满足以下五个重要特性:1.有穷性
2.确定性3.可行性4.有输入5.有输出一、算法1.有穷性对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成;
2.确定性
对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径;例1一个不是算法的例子(1)begin(2)n=1(3)n=n+1(4)repeat(3)(5)end例2一个不超过100次计数的算法(1)begin(2)n=1(3)n=n+1(4)ifn=100do(5),elserepeat(3)(5)outputn(6)end3.可行性算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之;4.有输入输入作为算法加工对象的量值,通常体现为算法中的一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中;
5.有输出它是一组与“输入”有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。二、算法设计的原则设计算法时,通常应考虑达到以下目标:1.正确性2.可读性3.健壮性4.高效率与低存储量需求1.正确性
首先,算法应当满足以特定的“规格说明”方式给出的需求。
其次,对算法是否“正确”的理解可以有以下四个层次:
c.程序对于精心选择的、典型、苛刻且带有刁难性的几组输入数据能够得出满足要求的结果;通常以第
c层意义的正确性作为衡量一个算法是否合格的标准。
d.程序对于一切合法的输入数据都能得出满足要求的结果;a.程序中不含语法错误;b.程序对于几组输入数据能够得出满足要求的结果;···白盒法:逻辑覆盖(1.语句覆盖2.判定覆盖3.条件覆盖4.条件判定覆盖5.条件组合覆盖6.路径覆盖)黑盒测试:等价划分类、边界值分析、错误推测法、因果图法。穷举测试
2.可读性
算法主要是为了人的阅读与交流,其次才是为计算机执行。因此算法应该易于人的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试;例:a=a+b;
b=a-b;
a=a-b;a↔b3.健壮性
当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。4.高效率与低存储量需求
通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。三、算法效率的度量方法和准则通常有两种度量算法效率的方法:
事后统计法事前分析估算法缺点:1、必须执行程序
2、其它因素掩盖算法本质与算法执行时间相关的因素:1.算法选用的策略2.问题的规模3.编写程序的语言4.编译程序产生的机器代码的质量5.计算机执行指令的速度一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。
假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:T(n)=O(f(n))称T(n)为算法的(渐近)时间复杂度···
O是数学符号,它的严格定义是“若T(n)和f(n)是在正整数集合上定义的两个函数,则T(n)=O(f(n))表示存在正常数C和n0,使得当n≥n0时,满足0≤T(n)≤C·f(n)
”。
用容易理解的话说----这两个函数当整型自变量n趋向于无穷大时,两者的比值是一个不等于0的常数。如何估算算法的时间复杂度?算法=控制结构+原操作(固有数据类型的操作)算法的执行时间
=原操作(i)的执行次数×原操作(i)的执行时间
算法的执行时间
与
原操作执行次数之和
成正比
从算法中选取一种对于所研究的问题来说是基本操作
的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则。例一两个矩阵相乘voidmult(inta[],intb[],int&c[]){
//以二维数组存储矩阵元素,c为a和b的乘积
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){c[i,j]=0;
for(k=1;k<=n;++k)c[i,j]+=a[i,k]*b[k,j];
}//for}//mult基本操作:
乘法操作时间复杂度:
O(n3)例二选择排序
void
select_sort(int&a[],intn){
//将a中整数序列重新排列成自小至大有序的整数序列。
}//select_sort基本操作:
比较(数据元素)操作时间复杂度:
O(n2)j=i;//
选择第i个最小元素,为什么不是0或其它值for(k=i+1;k<n;++k)
if(a[k]<a[j])j=k;if(j!=i)a[j]←→
a[i]for(i=0;i<n-1;++i){}练习voidtemp(){
x=91;
y=100;
whiley>0
{ifx>100
{x=x–10;
y––;
}
elsex++;
}}//temp求时间复杂度
T(n)=O(1),这个程序总共循环运行了1100次,但是我们看到n没有?没有。这段程序的运行是和n无关的,就算再循环一万年,它也只是一个常数阶的函数。解答:If语句的执行次数:voidtemp(){x=91;
y=100;
whiley>0
{ifx>100
{x=x–10;
y––;
}
elsex++;
}
}//temp执行后xy1次921002次93100…9次10010010次10110011次9199…21次1019922次9199…33次9198……1109190……1100910四、算法的存储空间需求算法的空间复杂度定义为:
表示随着问题规模n的增大,算法运行所需存储量的增长率与f(n)的增长率相同。S(n)=O(f(n))算法的存储量包括:1.输入数据所占空间2.程序本身所占空间3.辅助变量所占空间
若输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。
若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工智能驱动的金融服务普及路径
- 人工智能在保险理赔中的监管挑战
- 人力资源主管年度员工关系管理述职报告
- 人机协同决策中的安全边界界定
- 人教版小学三年级上册道德与法治Unit14我们的校园生活教案
- 场地设计及施工工艺
- 吧台改造施工方案
- 感恩主题班会课件可下载
- 河南省开封市尉氏县2025-2026学年七年级下学期期末地理试卷(文字版含答案)
- 注安基础知识总结
- 成都市万年场街道办事处公开招聘2名编外人员考试参考题库及答案详解
- 2026内蒙古呼和浩特市教育系统所属事业单位第三批人才引进823人笔试模拟试题及答案详解
- (2026年)水利工程建设监理工作总结报告
- 2026年安庆经开区老峰镇村(社区)专职工作人员公开招聘9名笔试备考题库及答案详解
- 2026年中国第三方算力中心服务商发展研究报告
- 2026年本溪市平山区事业编单位人员招聘笔试参考试题及答案详解
- 2026年小学二年级升三年级语文暑假衔接作业(完整版)
- 伪劣产品销售合同
- 2025年南充乡镇遴选副科真题(附答案)
- 2026年心血管内科主任上半年工作总结汇报
- 2026年学法减分考试题库【原创题】附答案详解
评论
0/150
提交评论