学《数据结构》越学越聪明--第一章》》》绪论二

学《数据结构》越学越聪明--第一章》》》绪论二,第1张

学《数据结构》越学越聪明--第一章》》》绪论二
算法及其描述
1.2.1什么是算法 对特定问题求解的一种描述,它是指令的有限序列 算法的重要性
  1. 有穷性:在有穷步之后结束,算法能够停机
  2. 确定性:无二义性
  3. 可行性:可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行。
  4. 有输出:有数据处理
  5. 有输入:有数据处理
通过把 基于存储结构的运算实现的步骤或过程称为 算法
运算功能描述---->>>基于存储结构--->>>运算功能实现==算法 算法设计目标
  1. 确定性:要求算法能够正确地执行预先规定的功能和性能要求。
  2. 可使用性:要要求算法能够很方便的使用
  3. 可读性:算法应该易于使人理解,也就是可读性好
  4. 健壮性:要求算法具有很好的容错性
  5. 高效率与低存储量需求性:通常算法的效率主要指算法的执行时间,算法存储量指的是算法执行过程中所需的最大存储空间。
算法描述 通常用C/C++来描述算法,格式如下:
返回值  算法对应的函数名(形参列表)
{
临时变量的定义;
实现由输入参数到输出参数的 *** 作
......
}//函数体

其中,返回值通常为bool类型,表示算法是否成功执行,形参列表表示算法的参数,由于包含算法的输入和输出,所以形参列表由输入型参数和输出型参数构成;函数实现算法的功能。
一个算法通常完成某个单一的功能,算法设计的一般步骤如下:

  1. 分析算法的功能
  2. 确定算法有哪些输入,将这些输入设计成输入型参数;确定算法有哪些输出,将这些输出设计成输出型参数
  3. 设计函数体,完成从输入到输出的 *** 作过程
输出型参数的设计 在算法设计时输入型参数非常好设置,那么输出型参数该如何设计呢?我们举例说明一下:
首先我们要设计的是两个值进行交换的算法设计
void swapl(int x,int y)
{
int tmp;
tmp=x;x=y;y=tmp;
}

在函数体中实现了x,y的值进行交换,但是调用该算法swapl(a,b)时发现传参数a,b的值并没有进行交换。出现错误的原因是这里的形参x,y即是输入型参数也是输出型参数,而swapl(x,y)中仅将形参x,y作为输入型参数设计。

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

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

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

在C++语言中提供了一种引用运算符“&”。

void swapl3(int & x,int & y)
{
int tmp;
tmp=x;  //将x所指的值放在tmp中
x= y;  //将x所指的指改为y所指的值
 y=tmp; //将y所指的值改为tmp
}
但执行语句swapl3(a,b)时,形、实参的匹配相当于:

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

这样,a与x共享存储空间,b与y共享存储空间,因此执行函数后a和b的值发生了交换。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3969725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存