目录
1.算法运行时间=语句频度(每条语句执行的次数)*该语句每执行一次所需要的时间
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的增长,结果也会增加的特别快
注意:判断一个算法的效率时:函数中的常数和其他次要项常常可以忽略,应关注主项(最高项)