数据结构DAY2

目录

1.3.1抽象类型和抽象数据类型

【数据类型】

【抽象数据类型】

1.3.2抽象数据类型的表示和实现

1.抽象数据类型“复数的实现

【1.1用c 语言实现抽象数据类型】

1.4算法和算法分析

1.4.1算法的定义及特性

1.4.2评价算法优劣的基本标准

1.4.3 算法的时间复杂度T(n)和空间复杂度O(n)

1.算法运行时间=语句频度(每条语句执行的次数)*该语句每执行一次所需要的时间

2.复杂度判断:


1.3.1抽象类型和抽象数据类型

【数据类型】

数据类型是值的集合和定义在这个值集上的一组操作的总称。

【抽象数据类型】

抽象数据类型定义格式:

1.3.2抽象数据类型的表示和实现

1.抽象数据类型“复数的实现

【1.1用c 语言实现抽象数据类型】

注:Complex是我们定义的一个结构体类型

带*:它是指向Complex类型的指针

不带*:Complex类型的普通变量

练习:

#include<stdio.h>

typedef struct {
    float realpart;//创建实部
    float imagpart;//创建虚部
} Complex;

void assign(Complex* A, float real, float imag)
{
    A->realpart = real; //实部赋值
    A->imagpart = imag; //虚部赋值
}

void add(Complex* c, Complex* A, Complex* B) //c=A+B
{
    c->realpart = A->realpart + B->realpart; //实部相加
    c->imagpart = A->imagpart + B->imagpart; //虚部相加
}

void minus(Complex* c, Complex* A, Complex* B) //c=A-B
{
    c->realpart = A->realpart - B->realpart; //实部相减
    c->imagpart = A->imagpart - B->imagpart; //虚部相减
}

void multiply(Complex* c, Complex* A, Complex* B) //c=A*B
{
    c->realpart = A->realpart * B->realpart; //实部相乘
    c->imagpart = A->imagpart * B->imagpart; //虚部相乘
}

int divide(Complex* A, Complex* B, Complex* c) //c=A/B//先判断分母是否为0
{
    float denominator = B->realpart * B->realpart + B->imagpart * B->imagpart;
    if (denominator == 0)
    {
        return 0; //分母为零,返回0表示除法失败
    }
    c->realpart = (A->realpart * B->realpart + A->imagpart * B->imagpart) / denominator; //实部相除
    c->imagpart = (A->imagpart * B->realpart - A->realpart * B->imagpart) / denominator; //虚部相除
    return 1; //除法成功,返回1
}

void print(Complex c) {//对复数结果进行打印 (输出)
    if (c.imagpart >= 0) {
        printf("%.2f + %.2fi\n", c.realpart, c.imagpart);
    }
    else {
        printf("%.2f - %.2fi\n", c.realpart, -c.imagpart);
    }
}

int main()
{
    Complex z1, z2, z3, z4, z;
    assign(&z1, 8.0, 6.0);
    assign(&z2, 4.0, 6.0);
    add(&z3, &z1, &z2); //复数z1和z2相加
    multiply(&z4, &z1, &z2); //复数z1,z2相乘
    if (divide(&z3, &z4, &z))
    {
        print(z);
    }
    else {
        printf("Division failed: denominator is zero.\n"); //除法失败,分母为零
    }

    return 0;
}

🌟🌟🌟注意:在对函数进行传参的时候,传递的应是参数的地址,因此用Complex*A,Complex*B;而不是float A,float B

1.4算法和算法分析

1.4.1算法的定义及特性

1.4.2评价算法优劣的基本标准

正确性,可读性,健壮性,高效性

1.4.3 算法的时间复杂度T(n)和空间复杂度O(n)

1.算法运行时间=语句频度(每条语句执行的次数)*该语句每执行一次所需要的时间

2.复杂度判断:
  • 随着n的增大,后面加的常数不影响最终的算法曲线变化(时间复杂度曲线)
  • 去掉与n乘的常数,结果不变
  • 最高次项指数大的,函数随着n的增长,结果也会增加的特别快

注意:判断一个算法的效率时:函数中的常数和其他次要项常常可以忽略,应关注主项(最高项)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值