1.3 抽象数据类型的表示与实现
前言
一个问题抽象为一个抽象数据类型后,仅是形式上的抽象定义,还没有达到问题解决的目的,要实现这个目标,就要把抽象的变成具体的,即抽象的数据类型在计算机上实现,变成一个能用的具体的数据类型。
C语言实现抽象数据类型
- 用已有数据类型定义描述它的存储结构
- 用函数定义描述它的操作
用”类 C 语言”真正实现抽象数据类型的定义
例如:抽象数据类型”复数“的实现:
#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 *result,Complex b, Complex c){
result->realpart = b.realpart + c.realpart;
result->imagpart = b.imagpart + c.imagpart;
}
void multiply(Complex *result, Complex b, Complex c){
result->realpart = b.realpart * c.realpart - b.imagpart * c.imagpart;
result->imagpart = b.realpart * c.imagpart + b.imagpart * c.realpart;
}
void divide(Complex *result, Complex b, Complex c){
result->realpart = (b.realpart * c.realpart + b.imagpart * c.imagpart)/
(c.realpart * c.realpart + c.imagpart * c.imagpart);
result->imagpart = (b.imagpart * c.realpart - b.realpart * c.imagpart)/
(c.realpart * c.realpart + c.imagpart * c.imagpart);
}
$$
例:\quad z=\frac{(8+6i)(4+3i)}{(8+6i)+(4+3i)}
$$
void main(){
Complex z1,z2,z3,z4,z;
float z1_real, z1_imag, z2_real, z2_imag;
printf("输入z1的实部和虚部:");
scanf("%f %f",&z1_real,&z1_imag); \\ 输入 8.0 6.0
printf("输入z2的实部和虚部:");
scanf("%f %f",&z2_real,&z2_imag); \\ 输入 4.0 3.0
assign(&z1,z1_real,z1_imag);
assign(&z2,z2_real,z2_imag);
multiply(&z3,z1,z2);
add(&z4,z1,z2);
divide(&z,z3,z4);
printf("z = %.2f + %.2fi\n",z.realpart,z.imagpart);
}
作者
3049874370@qq.com
