前言
记录自己学习数据结构的点点滴滴,课程是听的青岛大学王卓老师的数据结构课,使用课本为闫蔚敏数据结构第二版,本文代码使用java语言。
课程链接: link.
一、背景
抽象数据类型(Abstract Data Type,ADT):由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
抽象数据类型定义格式如下:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
} ADT 抽象数据类型名
其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:
基本操作名(参数表){
初始条件:<初始条件描述>
操作结果:<操作结果描述>
}
学习完抽象数据类型后,尝试自己使用java语言实现复数类。
任务如下:
利用java创建一个复数类,并进行”加“、”减“、”乘“、”除“等数学运算
复数简介:形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。当z的虚部等于零时,常称z为实数;当z的虚部不等于零时,实部等于零时,常称z为纯虚数。
复数的运算法则:
z1=a+bi,z2=c+di
加法法则: z1+z2=(a+c)+(b+d)i
减法法则: z1-z2=(a-c)+(b-d)i
乘法法则: z1*z2=(ac-bd)+(bc+ad)i
除法法则: z1/z2=((ac+bd)+(bc-ad)i)/(c^2+d^2)
Java代码
1.复数类
package A1;
public class Complex {
private double realPart; //实部
private double imagePart; //虚部
//无参构造函数
public Complex() {
}
public Complex(double realPart, double imagePart) {
this.realPart = realPart;
this.imagePart = imagePart;
}
public double getRealPart() {
return realPart;
}
public void setRealPart(double realPart) {
this.realPart = realPart;
}
public double getImagePart() {
return imagePart;
}
public void setImagePart(double imagePart) {
this.imagePart = imagePart;
}
//复数的加法
public Complex add(Complex complexNumber) {
if (complexNumber == null) {
System.out.println("对象输入错误!请重新输入!");
return new Complex();
}
double newRealPart = this.getRealPart() + complexNumber.getRealPart();
double newImagePart = this.getImagePart() + complexNumber.getImagePart();
return new Complex(newRealPart, newImagePart);
}
//复数的减法
public Complex sub(Complex complexNumber) {
if (complexNumber == null) {
System.out.println("对象输入错误!请重新输入!");
return new Complex();
}
double newRealPart = this.getRealPart() - complexNumber.getRealPart();
double newImagePart = this.getImagePart() - complexNumber.getImagePart();
return new Complex(newRealPart, newImagePart);
}
//复数的乘法
public Complex mul(Complex complexNumber) {
if (complexNumber == null) {
System.out.println("对象输入错误!请重新输入!");
return new Complex();
}
double newRealPart = this.getRealPart() * complexNumber.getRealPart() - this.getImagePart() * complexNumber.getImagePart();
double newImagePart = this.getImagePart() * complexNumber.getRealPart() + this.getRealPart() * complexNumber.getImagePart();
return new Complex(newRealPart, newImagePart);
}
//复数的除法
public Complex div(Complex complexNumber) {
if (complexNumber == null) {
System.out.println("对象输入错误!请重新输入!");
return new Complex();
}
double newRealPart = (this.getRealPart() * complexNumber.getRealPart() + this.getImagePart() * complexNumber.getImagePart()) / (complexNumber.getRealPart() * complexNumber.getRealPart() + complexNumber.getImagePart() * complexNumber.getImagePart());
double newImagePart = (this.getImagePart() * complexNumber.getRealPart() - this.getRealPart() * complexNumber.getImagePart()) / (complexNumber.getRealPart() * complexNumber.getRealPart() + complexNumber.getImagePart() * complexNumber.getImagePart());
return new Complex(newRealPart, newImagePart);
}
@Override
public String toString() {
if (imagePart > 0) {
return realPart + "+" + imagePart + "i";
} else if (imagePart < 0) {
return this.realPart + imagePart + "i";
} else {
return realPart + ",虚部为0";
}
}
}
2.测试
package A1;
import java.util.Scanner;
public class ComplexTest {
public static void main(String[] args) {
double realPart = 0.0;
double imagePart = 0.0;
System.out.println("请输入第一个复数的实部和虚部:");
Scanner sc = new Scanner(System.in);
realPart = sc.nextDouble();
imagePart = sc.nextDouble();
Complex complexNumber1 = new Complex(realPart, imagePart);
System.out.println("请输入第二个复数的实部和虚部:");
realPart = sc.nextDouble();
imagePart = sc.nextDouble();
Complex complexNumber2 = new Complex(realPart, imagePart);
Complex add = complexNumber1.add(complexNumber2);
Complex sub = complexNumber1.sub(complexNumber2);
Complex mul = complexNumber1.mul(complexNumber2);
Complex div = complexNumber1.div(complexNumber2);
System.out.println("两数相加:" + add);
System.out.println("两数相减:" + sub);
System.out.println("两数相乘:" + mul);
System.out.println("两数相除:" + div);
}
}
测试结果:
总结
通过上述例子,可以加深对抽象数据类型的概念!