数据结构耿国华_第1页
数据结构耿国华_第2页
数据结构耿国华_第3页
数据结构耿国华_第4页
数据结构耿国华_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-3-1912022-3-192第1章 绪 论1.71.7 关于学习数据结构关于学习数据结构 l1.11.1 数据结构的基本概念数据结构的基本概念( (定义定义) )l1.2 1.2 数据结构的内容数据结构的内容(研究范围)(研究范围)l1.31.3 算法算法设计设计l1.41.4 算法描述工具算法描述工具 l1.51.5 对算法作性能评价对算法作性能评价l1.61.6 数据结构数据结构与与C C语言表示语言表示2022-3-1931.1 数据结构的基本概念(定义)数据结构的相关名词:n数据(Data)n数据元素(Data Element) n数据对象(Data Object) n数据

2、结构(Data Structure) n数据类型(Data Type) n数据抽象与抽象数据类型2022-3-194数据(Data)n定义: 数据是数据是描述客观事物的数值、字符以及能输入描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合机器且能被处理的各种符号集合。 数据包含整型、实型、布尔型、图象、字符、声音等一切可以输入到计算机中的符号集合。C编译程序源程序源程序(.c)目标程序目标程序(.obj)可执行程序可执行程序(.exe)C链接程序例如对C源程序2022-3-195数据元素(Data Element)n定义定义: 数据元素是组成数据的基本单位组成数据的基本单位 ,是数

3、据集合的个体,在计算机中通常作为一个整体进行考虑和处理。例如:. . . . . . 北京1983.11河北女 赵虹玲101 住 址 出生年月 籍 贯性 别 姓 名 学 号 数据元素数据元素数据项数据项2022-3-196数据对象(Data Object) n定义定义: 数据对象是性质相同的数据元素的集性质相同的数据元素的集合合,是数据的一个子集。整数集合:N=0,1,2, 无限集字符集合:C=A,B,Z 有限集例如:2022-3-197数据结构(Data Structure) n定义: 数据结构是指相互之间存在一种或多种特数据结构是指相互之间存在一种或多种特定关系的数据元素集合定关系的数据元

4、素集合,是带有结构的数据元素的集合,它指的是数据元素之间的相互关系,即数据的组织形式。 例如表结构:. . . . . . 北京1983.11河北女 赵虹玲101 住 址 出生年月 籍 贯性 别 姓 名 学 号 2022-3-198数据结构(Data Structure)教研室实验室 系处研究机构学校树型结构图结构 1 2 5 4 32022-3-199数据类型(Data Type) n定义: 数据类型是一组性质相同的值集合以数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称及定义在这个值集合上的一组操作的总称。如在高级语言中,整型类型的取值范围为:-32768+32767,

5、运算符集合为加、减、乘、除、取模,即+、-、*、/、%。2022-3-1910数据类型(Data Type)n高级语言中的数据类型分为两大类:1.原子类型原子类型,其值不可分解。如C语言中的标准类型(整型、实型、字符型、)。2.结构类型结构类型,其值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。指针类型属于哪种类型?指针类型属于哪种类型?2022-3-1911数据抽象与抽象数据类型 n数据的抽象n抽象数据类型(Abstract Data Type) n抽象数据类型实现 nADT的表示与实现n面向对象的概念n结构化的开发方法与面向对象开发方法不同点

6、2022-3-19121.2 数据结构的内容 n逻辑结构 n存储结构 n运算集合 2022-3-1913逻辑结构n定义: 数据的逻辑结构是指数据元素之间逻辑关系描述。l形式化描述:Data_Structure=(D,R)其中D是数据元素的有限集,R是D上关系的有限集。l四类基本的结构 集合结构、线性结构、树型结构、图状结构。2022-3-1914集合结构n定义定义: 结构中的数据元素之间除了同属于结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。一个集合的关系外,无任何其它关系。 集合集合例如:2022-3-1915线性结构n定义:定义: 结构中的数据元素之间存在着结构中的数据元

7、素之间存在着一对一对一的线性关系。一的线性关系。 例如:线性表线性表2022-3-1916树型结构n定义: 结构中的数据元素之间存在着结构中的数据元素之间存在着一对一对多的层次关系。多的层次关系。 例如: 树树2022-3-1917图状结构或网状结构 n定义:定义: 结构中的数据元素结构中的数据元素之间存在着多对之间存在着多对多的任意关系。多的任意关系。例如: 图2022-3-1918综上所述,数据的逻辑结构可概括为综上所述,数据的逻辑结构可概括为:线性结构线性结构线性表、栈、队、字符串线性表、栈、队、字符串 数组、广义表数组、广义表逻辑结构逻辑结构非线性结构非线性结构树、图树、图逻辑结构逻辑

8、结构2022-3-1919存储结构 n定义: 存储结构(又称物理结构)是逻辑结构在计存储结构(又称物理结构)是逻辑结构在计算机中存储映象算机中存储映象,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。 l形式化描述: D要存入机器中,建立一从D的数据元素到存储空间M单元的映像S ,DM,即对于每一个d, dD,都有唯一的zM使S(D)=Z, 同时这个映像必须明显或隐含地体现关系R。2022-3-1920逻辑结构与存储结构的逻辑结构与存储结构的关系关系为:为:存储结构存储结构是逻辑关系的映像与元素本身映像,是数是逻辑关系的映像与元素本身映像,是数据结构的实现据结构的实现;逻辑结构逻

9、辑结构是数据结构的抽象是数据结构的抽象。 数据元素之间的关系在计算机中的表示方法:数据元素之间的关系在计算机中的表示方法:顺序映像顺序映像 (顺序存储结构)(顺序存储结构) 非顺序映像非顺序映像(非顺序存储结构(非顺序存储结构)存储结构存储结构2022-3-1921运算集合例如工资表:编编 号号姓姓 名名性别性别基本工资基本工资工龄工资工龄工资应扣工资应扣工资实发工资实发工资100001100001张爱芬张爱芬女女34534567671451454545303000004514511212100002100002李李 林林 男男 44544590901851856060454500005865

10、865050100003100003刘晓峰刘晓峰 男男 34534500001301300000252500004504500000100004100004赵赵 俊俊 女女 56056090902252259090656500007217218080100005100005孙孙 涛涛 男男 45045060601901908080505000005915918080 100121100121张兴强张兴强 男男 102510259898365365535310010000001291.511291.512022-3-1922数据结构的内容数据结构的内容综上所述,数据结构的内容可归纳为三个部分,逻

11、辑结构逻辑结构、存储结构存储结构和和运算集合运算集合:按某种逻辑关系组织起来的一批数据,按一定的映像方式把它们存放在计算机存储器中,并在这些数据上定义了一个运算的集合,就叫做数据结构。 2022-3-19231.3 算法 n算法(算法(AlgorithmAlgorithm)定义)定义 n算法的特性算法的特性 n算法设计的要求算法设计的要求 2022-3-1924算法(Algorithm)定义n定义: Algorithm is a finite set of rules which gives a sequence of operation for solving a specific type

12、 of problem. 算法是规则的有限集合,是为解决算法是规则的有限集合,是为解决特定问题而规定的一系列操作。特定问题而规定的一系列操作。 2022-3-1925算法的特性1. 有限性:有限步骤之内正常结束,不能形成无穷循环有限步骤之内正常结束,不能形成无穷循环2. 确定性:算法中的每一个步骤必须有确定含义,无二算法中的每一个步骤必须有确定含义,无二义性得以实现。义性得以实现。 3. 输 入: 有多个或有多个或0个输入个输入 4. 输 出: 至少有一个或多个输出。至少有一个或多个输出。5. 可行性:原则上能精确进行,操作可通过已实现基本原则上能精确进行,操作可通过已实现基本运算执行有限次而

13、完成。运算执行有限次而完成。 2022-3-1926算法设计的要求 n算法的正确性 算法特征:l 可读性 l 健壮性 l 高效率和低存储量例如要求n个数的最大值问题给出算法如下: max=0; for(i=1 ;imax) max=x; 2022-3-19271.4 算法描述的工具 n概述:算法+数据结构=程序 n算法、语言、程序的关系 n设计实现算法过程步骤n类描述算法的语言选择2022-3-1928算法、语言、程序的关系1. 算法:描述了数据对象的元素之间的关系(包括数据逻辑关系、存储关系描述)。2. 描述算法的工具:算法可用自然语言、框图或高级程序设计语言进行描述。3.程序是算法在计算机

14、中的实现。2022-3-1929设计实现算法过程步骤1. 找出与求解有关的数据元素之间的关系2. 确定在某一数据对象上所施加运算3. 考虑数据元素的存储表示4. 选择描述算法的语言5.设计实现求解的算法,并用程序语言加以描述。2022-3-1930类描述算法的语言选择n类语言:类语言是接近于高级语言而又不是严格的高级语言,类语言是接近于高级语言而又不是严格的高级语言,具有高级语言的一般语句设施,撇掉语言中的细节,具有高级语言的一般语句设施,撇掉语言中的细节,以便把注意力主要集中在算法处理步骤本身的描述以便把注意力主要集中在算法处理步骤本身的描述上。上。2022-3-19313.赋值语句赋值语句

15、对C语言作以下描述:(1)简单赋值简单赋值 1)变量名)变量名=表达式表达式 2) 变量变量+, 3) 变量变量- -,(2)串联赋值串联赋值变量变量1=变量变量2=变量变量3=变量变量k=表达式表达式 2022-3-1932对C语言作以下描述:(4)条件赋值条件赋值变量名变量名=条件表达式?表达式条件表达式?表达式1:表达式表达式2 (3)成组赋值成组赋值(, 变量变量k=(, , , )数组名数组名1 1 下标下标11下标下标2=2=数组名数组名2 2 下标下标11下标下标22 2022-3-19334.条件选择语句对C语言作以下描述:if () 语句;if () 语句1; else 语句

16、2;2022-3-1934情况语句switch () case 判断值1: 语句组 1; break; case 判断值2: 语句组 2; break; case 判断值n: 语句组n; break; default: 语句组; break; 对C语言作以下描述:2022-3-1935对C语言作以下描述:5.循环语句循环语句for 语句语句for (;)循环体语句;循环体语句;2022-3-1936while 语句语句while () 循环体语句;循环体语句; 对C语言作以下描述:do while 语句语句do 循环体语句循环体语句 while () 2022-3-19371.5 对算法作性能

17、评价 n评价算法的标准: 评价一个算法主要看这个算法所占用机器资源的多少,而这些资源中时间代价与空间代价是两个主要的方面,通常是以算法执行所需的机器时间和所占用的存储空间来判断一个算法的优劣。 n性能评价 n有关数量关系计算有关数量关系计算 2022-3-1938性能评价性能评价n定义:定义: 对问题规模与该算法在运行时所占的空间对问题规模与该算法在运行时所占的空间S与与所耗费的时间所耗费的时间T给出一个数量关系的评价给出一个数量关系的评价。问题规模问题规模N对不同的问题其含义不同:对不同的问题其含义不同: 对矩阵是阶数;对矩阵是阶数; 对多项式运算是多项式项数;对多项式运算是多项式项数; 对

18、图是顶点个数;对图是顶点个数; 对集合运算是集合中元素个数。对集合运算是集合中元素个数。2022-3-1939有关数量关系计算 数量关系评价体现在时间数量关系评价体现在时间算法在机器中所耗算法在机器中所耗费时间。费时间。数量关系评价体现在空间数量关系评价体现在空间算法在机器中所占算法在机器中所占存储量。存储量。n关于算法执行时间关于算法执行时间n语句频度语句频度 n算法的时间复杂度算法的时间复杂度n数据结构中常用的时间复杂度频率计数数据结构中常用的时间复杂度频率计数 n最坏时间复杂度最坏时间复杂度 n算法的空间复杂度算法的空间复杂度 2022-3-1940关于算法执行时间n定义定义: 一个算法

19、的执行时间大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。l分析分析: 不是针对实际执行时间精确算出算法执行的具不是针对实际执行时间精确算出算法执行的具体时间,而是针对算法中语句的执行次数做出估计,体时间,而是针对算法中语句的执行次数做出估计,从中得到算法执行时间的信息。从中得到算法执行时间的信息。2022-3-1941语句频度 n定义:定义:语句频度是指该语句在一个算法中重复执行语句频度是指该语句在一个算法中重复执行的次数。的次数。例如:例如:两个两个矩阵矩阵相乘相乘算法语句算法语句 对应的对应的语句频度语句频度 1 1forfor(i=

20、0i=0;i n;i+i n;i+) n+1n+1 2 2for for (j=0j=0;jn;j+jn;j+) n n( (n+1) ) 3 cij=0; n 3 cij=0; n2 2 4 for (k=0;k n; k+) n 4 for (k=0;k n; k+) n2 2 (n+1) cij=cij+aik cij=cij+aik* *bkj; nbkj; n3 3 总执行次数:总执行次数:Tn=2n3+3n2 +2n+12022-3-1942算法的时间复杂度 算法的时间复杂度,即是算法的时间量度算法的时间复杂度,即是算法的时间量度记做:记做: T(n)=O(f(n)例如给出例如给出

21、X=X+1(1)x=x+1 ;时间复杂度为;时间复杂度为O(1),称为常量阶;,称为常量阶;(2)for (i=1; i= n; i+) x=x+1; 时间复杂度为时间复杂度为O(n),称为线性阶;,称为线性阶;(3)for (i=1; i= n; i+)for (j=1;j= n; j+) x=x+1; 时间复杂度为时间复杂度为O(n2), 称为平方阶。称为平方阶。2022-3-1943常用的时间复杂度频率计数 n数据结构中常用的时间复杂度频率计数有7个:O(1)常数型常数型O(n)线性型线性型O(n2)平方型平方型O(n3)立方型立方型O(2n)指数型指数型O(log2n)对数型对数型O(

22、nlog2n)二维型二维型按时间复杂度由小到大排列的频率表:按时间复杂度由小到大排列的频率表:2022-3-1944常用的时间复杂度频率计数n常用的时间复杂度频率常用的时间复杂度频率表:表:log2nnnlog2nn2n32n一般讲:前3种可实现,后3种虽理论上是可实现的,实际上只有对N限制在很小范围才有意义,当N较大时,不可能实现。 0101121224842481664163824645122564166425650966553653216010243276821474836482022-3-1945最坏时间复杂度 n定义:定义:讨论算法在最坏情况下的时间复杂度,即讨论算法在最坏情况下的时

23、间复杂度,即分析最坏情况下以估计出算法执行时间的上分析最坏情况下以估计出算法执行时间的上界。界。例如冒泡排序算法例如冒泡排序算法2022-3-1946void bubble(int a, int length)将将a中整数数组重新排序,达到中整数数组重新排序,达到递增有序递增有序 int i=0, j, temp; int change ; do change=false ; for(j=1;jaj+1) temp= aj;aj=aj+1;aj+1=temp;change=true; i=i+1 ; while(ilength | change=true )最坏时间复杂最坏时间复杂度度2022

24、-3-1947算法的空间复杂度 n定义: 用空间复杂度作为算法所需存储空间的量度,用空间复杂度作为算法所需存储空间的量度, 记做:记做: S(n)=O(f(n)。2022-3-19481.6 数据结构与数据结构与C语言表示语言表示 1.6.1 数据结构与程序设计的关联性数据结构与程序设计的关联性 问题描述:问题描述:欲求1名学生10次C语言程序设计的测试成绩总分与平均分。其中10次测验的成绩分别为:80,85,77,56,68,83,90,92,80,98。 2022-3-1949程序示例程序示例1-1:main() int sum,verage; /*总分,平均分*/ int t1,t2,t

25、3,t4,t5,t6,t7,t8,t9,t10; /*10个变量存10次成绩*/ t1=80;t2=85;t3=77;t4=56; t5=68; /*分别赋值*/ t6=83;t7=90;t8=92;t9=80;t10=98; sum= t1+t2+t3+t4+t5+t6+t7+t8+t9+t10; /*计算总分*/ average=sum/10; /*计算平均分*/ printf(“总分=%dn”,sum); printf(“平均分=%dn”, average); 2022-3-1950根据测试次数与测试成绩的关系,采用数组结构存储测验成绩,提高了程序的根据测试次数与测试成绩的关系,采用数组

26、结构存储测验成绩,提高了程序的适用范围。适用范围。main() int sum,erage;int i; int t10 =80,85,77,56,68,83,90,92,80,98 /*分别赋值*/ sum=0; /*总分置初值*/ for (i=0; i10; i+) sum=sum+ti; average=sum/10; /*计算平均分*/ printf(“总分=%dn”,sum); printf(“平均分=%dn”, average); 程序示例程序示例1-2:2022-3-19511.6.2 结构化程序设计与函数的模块化结构化程序设计与函数的模块化 结构化程序设计 :是为使程序具有合

27、理的结构,以保证程序正确性而规定的一套程序设计的方法 。程序设计的实质:算法+数据结构=程序 即“程序是在数据的特定表示方式的基础上,对抽象算法的具体描述”。程序结构=控制结构+数据结构 2022-3-1952 结构化程序设计目的通过设计结构良好的程序,以程序的静态良好结构保证以程序的静态良好结构保证程序动态执行的正确性程序动态执行的正确性,使程序易理解、易调试、易维护,以提高软件开发的效率,减少出错率。结构化程序设计的构成单元任何程序都可由顺序、选择、重复三种基本控制结构来组成。结构化程序设计方法 其一:其一:“自顶向下,逐步求精自顶向下,逐步求精”的设计思想的设计思想 ;其二:“独立功能,

28、一个入口,一个出口独立功能,一个入口,一个出口“的模块化结构的模块化结构; 其三:“仅用三种基本控制结构仅用三种基本控制结构”的设计原则的设计原则 2022-3-19531.6.3 面向对象与抽象数据类型1.1.面向对象的概念面向对象的概念:面向对象=对象+类+继承+通信对象:指在应用问题中出现的各种实体、事件、规格说明等 。类:具有相同属性和服务的对象 继承:是是面向对象方法的最有特色的方面。 2022-3-1954面向对象程序设计的特点是封装性、继承性和多态性面向对象程序设计的特点是封装性、继承性和多态性 与数据结构密切相关的是定义在数据结构上的一组操作。 基本操作主要有:基本操作主要有:

29、插入插入:在数据结构中的指定位置上增添新的数据元素 ;删除删除:删去数据结构中某个指定数据元素 ;更新更新:改变数据结构中某个元素的值,在概念上等价于删除和插入操作的组合 ;查找查找:在数据结构中寻找满足某个特定要求的数据元素(的位置和值); 排序排序:(在线性结构中)重新安排数据元素之间的逻辑顺序关系,使数据元素按值由小到大或由大到小的次序排列。 2022-3-1955结构化与面向对象开发方法的不同点 n结构化的开发方法:是面向过程的开发方法,首先着眼于系统要实现的功能。l面向对象的开发方法面向对象的开发方法:首先着眼于应用问题所涉及的对象,包括对象、对象属性和要求的操作,从而建立对象结构和

30、为解决问题需要执行的时间序列。2022-3-1956数学模型数学模型抽象数据模型抽象数据模型数据结构数据结构非形式算法非形式算法伪语言程序伪语言程序可执行程序可执行程序用抽象数据类型的概念来指导问题的求解过程:用抽象数据类型的概念来指导问题的求解过程:2 2抽象数据类型与问题求解方法抽象数据类型与问题求解方法 n定义:抽象数据类型(简称抽象数据类型(简称ADTADT)是指基于一类逻辑)是指基于一类逻辑关系的数据类型以及定义在这个类型之上的一关系的数据类型以及定义在这个类型之上的一组操作组操作。一个抽象数据类型确定了一个模型,但将模型的实现细节一个抽象数据类型确定了一个模型,但将模型的实现细节隐

31、藏起来;它定义了一组运算,但将运算的实现过程隐藏隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来。起来。2022-3-1957数据的抽象n汇编语言中十进制表示的数据98.65、9.6E3等, 它们是二进制数据的抽象; l高级语言中,给出更高一级的数据抽象,如整型、实型、字符型等,还可以进一步定义更高级的数据抽象,如各种表、队、栈、树、图、窗口、管理器等复杂的抽象数据类型。2022-3-1958抽象数据类型n线性表的抽象数据类型的描述:ADT Linear_list数据元素数据元素 所有所有a ai i属于同一数据对象,属于同一数据对象,i=1i=1,2 2,n n0n n0;逻辑结构逻辑

32、结构 所有数据元素所有数据元素a ai i(i=1i=1,2 2,n-1n-1)存在次序关系)存在次序关系 a ,a ai i无前趋,无前趋,a an n无后继;无后继;操作操作 设设L L为为Linear_listLinear_listInitial(L)Initial(L)初始化空线性表;初始化空线性表;Length(L)Length(L)求线性表的表长;求线性表的表长;Get(L,i)Get(L,i)取线性表的第取线性表的第i i个元素;个元素;Insert(L,i,b)Insert(L,i,b)在线性表的第在线性表的第i i个位置插入元素个位置插入元素b b;Delete(L,i)De

33、lete(L,i)删除线性表的第删除线性表的第i i个元素;个元素; 2022-3-1959抽象数据类型实现n传统的面向过程的程序设计传统的面向过程的程序设计实现的三种方法:l“包包”、“模型模型”的设计方法的设计方法l面向对象的程序设计面向对象的程序设计(Object Oriented Programming,简称OOP)2022-3-1960ADT的表示与实现 nADT的定义:ADT 数据对象: 结构关系: 基本操作: ADT 基本操作的定义格式为: (参数表) 操作前提: 操作结果:2022-3-1961l关于参数传递:参数表中的参数有值参和变参两种。用标准C语言表示和实现ADT描述时,

34、主要有两个方面: 二、用C语言函数实现各操作。一、通过结构体将int、float等固有类型组合到一起,构成一个结构类型,再用typedef为该类型或该类型指针重新起一个名字。ADT的表示与实现的表示与实现2022-3-19621.6.4 算法描述规范与设计风格算法描述规范与设计风格 1. 算法表示格式与函数模块化 函数返回值类型 函数名(形式参数及说明) 内部数据说明; 执行语句组; /*函数名*/ 算法表示格式2022-3-19631.6.4 算法描述规范与设计风格算法描述规范与设计风格 函数的模块化 1. 算法表示格式与函数模块化 包含文件语句包含文件语句宏定义语句宏定义语句自定义类型语句

35、自定义类型语句所有子函数的原型说明所有子函数的原型说明子函数子函数1定义定义.子函数子函数n定义定义 主函数定义主函数定义 2022-3-19642. 算法描述要点 1.6.4 算法描述规范与设计风格算法描述规范与设计风格 加上必要的注释加上必要的注释 注释形式可以用/*字符串*/ 避免函数返回值隐含说明避免函数返回值隐含说明 预定义常量和类型预定义常量和类型 # define TRUE 1 # define FALSE 0 # define MAXSIZE 100 # define OK 1 # define ERROR 02022-3-1965避免可能出现的二义性表达避免可能出现的二义性表

36、达 注意不同的退出语句区别注意不同的退出语句区别 return 或或return:用于函数结束。:用于函数结束。break语句:可用在循环语句或语句:可用在循环语句或switch语句中结束循环过程或语句中结束循环过程或跳出情况语句。跳出情况语句。continue语句:可用在循环语句中结束本次循环过程,进入语句:可用在循环语句中结束本次循环过程,进入下一次循环过程。下一次循环过程。 exit语句:表示出现异常情况时,控制退出函数。语句:表示出现异常情况时,控制退出函数。 使用有意义的函数名与变量名使用有意义的函数名与变量名 2. 算法描述要点算法描述要点 1.6.4 算法描述规范与设计风格算法描

37、述规范与设计风格 简化输入、输出表述简化输入、输出表述 规范多分支转向规范多分支转向 2022-3-19663. 与参数传递的相关技术 1.6.4 算法描述规范与设计风格算法描述规范与设计风格 变量的作用域变量的作用域 全局变量:程序中所有函数都可以访问的量 局部变量:只能在该函数中访问的量。 参数传递方式参数传递方式 参数传递是函数之间进行信息通讯的重要渠道。参数传递是函数之间进行信息通讯的重要渠道。其参数传递的主要方式有传值和传地址两类。函数其参数传递的主要方式有传值和传地址两类。函数参数表中的参数有两种:第一种参数只为操作提供参数表中的参数有两种:第一种参数只为操作提供待处理数据待处理数

38、据,又称值参;第二种参数既能为操作提又称值参;第二种参数既能为操作提供待处理数据,又能返回操作结果,也称变量参数。供待处理数据,又能返回操作结果,也称变量参数。 2022-3-1967#include viod swap1(int a,int b) int c;c=a; a=b; b=c; printf(“swap1中的a= %d,b=%d”,a,b); viod swap2(int *a,int *b) int c;c=*a, *a=*b, *b=c; 关于参数传递示例源程序关于参数传递示例源程序:2022-3-1968void main() int x=100,y=800; swap1(x

39、,y); /*调用函数swap1()*/printf(“n调用swap1后x= %d,y=%d”,x,y); /*输出调用swap1后的数据*/x=100;y=800;swap2(&x,&y); /*调用函数swap2()*/ printf(“n调用swap2后x=%d,y=%d”,x,y); /*输出调用swap2后的数据*/ 关于参数传递示例源程序关于参数传递示例源程序:2022-3-19694. 函数结果的带出方式函数结果的带出方式 1.6.4 算法描述规范与设计风格算法描述规范与设计风格 三种带出方式三种带出方式: :全程量、函数返回值、传址参数全程量、函数返回值、传址

40、参数若函数结果需要带出多个值,该怎样实现若函数结果需要带出多个值,该怎样实现?可以采用可以采用全局全局变量方式带出,变量方式带出,通过地址传递带出(数组方式、结构体通过地址传递带出(数组方式、结构体方式、指针方式)两类方式之一来实现。方式、指针方式)两类方式之一来实现。 通过参数表的参数传递是一种参数显式传递方式,而通过通过参数表的参数传递是一种参数显式传递方式,而通过全局变量是一种隐式参数传递,一个函数中对全局变量的全局变量是一种隐式参数传递,一个函数中对全局变量的改变会影响其它程序的调用,使用全局变量必须注意这个改变会影响其它程序的调用,使用全局变量必须注意这个问题。问题。 2022-3-

41、1970全局变量方式:int MIN; /* 全局变量 */ int fun1(int a, int n) /*通过函数return返回最大值,通过全局变量MIN带回最小值*/ int i,max; max=MIN=a0; /给最大值最小值赋初值 for (i=0;imax) max=ai; if (aiMIN) MIN=ai; return(max);一个全局变量方式带出的例子一个全局变量方式带出的例子 2022-3-1971int *fun2(int a,int n)/*将最大、最小值放到数组b中,通过return返回*/ static int b2; b0=b1=a0; /给最大值最小值

42、赋初值int i; for (i=1;ib0)b0=ai;if (aimax=p-min=a0; /给最大值最小值赋初值for(i=1;ip-max) p-max=ai;if (aimin)p-min=ai;return(p);结构体方式带出的例子结构体方式带出的例子2022-3-1973Data fun4(int a,int n) /*将最大、最小值放到结构体p中,通过结构体p带回返回值*/Data p;int i;p.max=p.min=a0; /给最大值最小值赋初值for(i=1;ip.max) p.max=ai;if (aip.min)p.min=ai;return(p);指针方式带出的例子指针方式带出的例子2022-3-19741.7 关于学习数据结构 n数据结构课程地位数据结构课程地位 n数据结构课程学习特点数据结构课程学习特点 n关于本书内容编写说明关于本书内容编写说明2022-3-1975数据结构课程地位n 数据结构与其它课程关系图:数据结构与其它课程关系图:数据结构数据库数据库人工智能人工智能专业基础课专业基础课操作系统操作系统编译原理编译原理非线性程序设计非线性程序设计离散数学离散数学语言程序设计语言程序

温馨提示

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

评论

0/150

提交评论