数据结构学习笔记——算法及其描述

算法:
对特定问题求解步骤的一系列描述,也就是解决问题的步骤。

例如,以下是求解两个正整数m和n的最大公约数的算法:

(1) r = m mod n;
(2) 若r ==0,则输出n,算法结束。
(3)若r!==0,令m = n,n = r,转(1)继续。

一个算法应具有一下特性:
(1)有穷性:能够执行完,不能够是死循环。
(2)确定性:输入同一个值,无论在什么时候都是同样的输出。
(3)可行性:可运行的,没有语法错误。
(4)有输入:有0个或多个输入。
(5)有输出:好让程序员知道这个函数干了什么,有没有运行成功。

算法设计的目标
(1)正确性
(2)可使用性
(3)可读性
(4)健壮性:能够适应多种条件,提供异常处理。
(5)高效低储性

算法描述
计算机专业的同学应该熟练使用程序语言描述算法,其实也就是要你会编函数。

例如,以下是求解一个一元二次方程的根及其根的个数的算法。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double Delta(double b,double a,double c,int *num)
{
    double delta;

    delta = b*b - 4*a*c;
    if (delta >0)
    {
        *num = 2;
    }
    else if (delta == 0)
    {
        *num = 1;
    }
    else
    {
        *num = 0;
    }
    return delta;
}

int solution(double a,double b,double c,double *x1,double *x2,int *num)
    {
        double delta;
        delta = Delta(b,a,c,num);
        if (*num ==2)
        {
            *x1 = (-b - sqrt(delta))/(2 * a);
            *x2 = (-b + sqrt(delta))/(2 * a);
            printf("x1 = %.6lf\nx2 = %.6lf", *x1,*x2);
        }
        else if (*num == 1)
        {
            *x1 = *x2 = (-b)/(2 * a);
            printf("x1 = x2 = %.6lf", *x1);
        }
        else
        {
            printf("不好意思,您所求的方程组没有解。");
        }

        return 0;
    }

int main()
{

    /*ADT Function
    {   数据对象:
            D = {a,b,c,x1,x2,num|a,b,c,x1,x2,num均为实数}
        数据关系:
            R = {<a,b,c,x1,x2,num> | a,b,c分别为由最高项由高到低的项的系数,
            x1,x2是a,b,c所确定的方程的解,num是这个方程的解的个数}
        基本运算:
            Delta(b,a,c,&num):计算Δ,b,a,c分别对应一次,二次和常数项的系数,
            返回delta的值num。
            Accumulate(a,b,d,&res):计算方程的解,a,b,d分别是二次项华为一次项的系数,
            d是Delta()函数的返回值。

    }
    */
    double a = 2.0,b = 6.0,c = 3.0,x1,x2;//a不可为0
    int num;
    double *y1 = &x1,*y2 = &x2;
    int *Num = &num;
    solution(a,b,c,y1,y2,Num);




    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值