算法的描述 引用参数,指针,形参

/*(理解数据结构--个人学习笔记理解)*/


算法的定义

算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列。

一个算法一个具有以下5个重要特性:

  1. 有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。任何不会终止的算法都是没有意义的。
  2. 确定性:对于每种情况下执行的操作在算法中都有确切的规定,使算法的执行者或者阅读者都能明确其含义及如何执行,并且在任何条件下算法都只有一条执行路径,即对于相同的输入只能得出相同的输出,不能有二义性。
  3. 可行性:算法中的所有操作都必须足够基本,算法可以通过有限次基本操作来完成其功能,也就是说算法中的每一个动作都能够被机械地执行。
  4. 有输入:作为算法加工对象的量值,通常体现为算法中的一组变量。一个算法有零个或者多个输入。
  5. 有输出:一组与“输入”有确定对应的关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。一个算法有一个或者多个输出。

算法设计的目标

算法设计应满足以下几个目标:

  1. 正确性:要求算法能够正确地执行预先规定的功能和性能要求。这是最重要、最基本的标准。
  2. 可使用性:要求算法能够很方便地使用。这个特性也叫用户友好性。
  3. 可读性:算法应该易于使人理解,也就是可读性好。为了达到这个要求,算法的逻辑必须是清晰的、简单的和结构化的。
  4. 健壮性:要求算法具有很好的容错性,即提供异常处理,能够对不合理的数据进行检查,不经常出现异常中断或死机现象。
  5. 高效率与低存储量需求:通常算法的效率主要指算法的执行时间。对于同一个问题,如果有多种算法可以求解,执行时间短的算法效率高。算法存储量指的是算法执行过程中所需的最大存储空间。效率和存储量都与问题的规模有关。


算法的描述

描述算法的方式很多,有的采用自然语言伪代码、流程图或者表格方式等,但计算机专业的学生应该熟练使用计算机语言来描述算法。(由于作者本身能力有限,便用C/C++语言来描述)

  • 描述算法的一般格式和算法的设计步骤

描述算法的一般格式如下:

返回值  算法对应的函数名(形参列表)
{    临时变量的定义
     实现由输入参数到输出参数的操作    
     ...
}
以上便就是一个函数体的样式

其中,“返回值”通常为bool类型,表示算法是否成功执行;“形参列表”表示算法的参数,由于算法包含输入和输出,所以形参列表由输入型参数构成;函数体实现算法的功能。

一个算法通常完成某个单一的功能,设计算法的一般步骤如下:

  1. 分析算法的功能;
  2. 确定算法有哪些输入,将这些输入设计成输入型参数;确定算法有哪些输出,将这些输出设计成输出型参数;
  3. 设计函数体,完成从输入到输出的操作过程。
  • 输出型参数的设计

在设计算法时,输入型参数的设计是十分简单的,那么输出型参数如何设计呢?下面通过一个实例进行说明。

例如设计一个交换两个整数的算法,编写相应的函数swap01(x,y)如下:

void swap01(int x,int y)
{    int temp;
     temp=x;
     x=y;
     y=temp;
}

在函数中的确实现了两个形参x和y的值交换,但调用该算法(也就是执行语句swap01(a,b))时发现a和b实参值并不会发生交换。出现错误的原因是这里的形参x,y既是输入型参数,又是输出型参数,而swap01中仅将形参x,y作为输入性参数设计。

改正方法1:采用指针的方式回传形参的值,将上述函数改为如下:

void swap02(int *x,int *y)
{    int temp;        
     temp= *x;        //将x所指的值放在temp中
     *x= *y;          //将x所指的值改为y所指的值
     *y=temp;         //将y所指的值改为temp
}

这样调用该函数的方式改为swap02(&a,&b),其中,&a,&b分别是实参a,b的地址,显然改正后的算法swap02()比较复杂,可读性差。

改正方法2:采用引用型形参,也就是将输出型形参设计为引用型形参

在C++语言中提供了一种引用运算符“&”。当建立引用时,程序用另一个已定义的变量(目标变量)的名字初始化它,从那时起,引用变量作为目标变量的别名使用,对引用变量的改动实际上是对目标的改动。例如:

int a=4;     //定义整数型变量a
int &b=a;    //定义整数型变量a的引用变量b

第二个语句定义变量b时变量a的引用变量,b也等于4,之后这两个变量同步改变。

引用常用于函数形参中,当采用引用型形参时,在调用函数时会将形参的改变回传给实参。利用引用运算符将swap01()改为如下:

void swap(int &x,int &y)   //形参前的“&”符号不是指针运算符,而是引用
{    int temp=x;
     x=y;
     y=temp;
}

当执行语句swap(a,b)时,形参和实参的匹配相当于:

int &x=a;        //x为a的引用
int &y=b;        //y为b的引用

这样,a与x共享存储空间,b与y共享存储空间,因此执行此函数后a和b的值发生了交换。这种改进方式十分简单,所以大多数都采用这种方式设计算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值