抽象数据类型的表示与实现
(1)预定义常扯及类型:
//函数结果状态代码
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//Status 是函数返回值类型, 其值是函数结果状态代码。
typedef int Status;
(2)数据结构的表示(存储结构)用类型定义(typedef)描述;数据元素类型约定为ElemType, 由用户在使用该数据类型时自行定义。
(3)基本操作的算法都用如下格式的函数来描述:
函数类型函数名(函数参数表)
{
//算法说明
语句序列
}//函数名
当函数返回值为函数结果状态代码时, 函数定义为 Status 类型。为了便千描述算法,除了值 调用方式外,增加了C+ +语言引用调用的参数传递方式。 在形参表中, 以 "&"打头的参数即为 引用参数。传递引用给函数与传递指针的效果是一样的, 形参变化实参也发生变化,但引用使用 起来比指针更加方便、 高效。
(4)内存的动态分配与释放。
使用 new 和 delete 动态分配和释放内存空间:
分配空间 指针变扯=new 数据类型;
释放空间 delete 指针变扯;
下面以复数为例, 给出一个完整的抽象数据类型的定义、 表示和实现。
ADT Complex {
数据对象:D={el, e2 I el, e2ER,R 是实数集}
数据关系: S={<el,e2>1el 是复数的实部, e2 是复数的虚部}
基本操作:
Creat (&C, x, y)
操作结果:构造复数C, 其实部和虚部分别被赋以参数x和y的值。
初始条件:复数C已存在。
操作结果:返回复数C的实部值。
GetReal(C)
初始条件:复数C已存在。
操作结果:返回复数c的虚部值。
Add( Cl,C2)
初始条件:Cl, C2 是复数。
操作结果:返回两个复数 Cl和 C2 的和。
Sub(Cl,C2)
初始条件:Cl, C2 是复数。
操作结果:返回两个复数 Cl 和 C2 的差。
} ADT Complex
用C语言写出复数的存储表示和相应操作
(2) 表示部分:
typedef struct{
float Realpart; //实部
float Imagepart; //虚部
}Complex;
(3) 实现部分:
void Create(&Complex C, float x, float y)
{//构造一个复数
C.Realpart=x;
C.Imagepart=y;
}
float GetReal(Complex C)
{
//取复数C=x+yi的实部
return C.Realpart;
}
float Getimag (Complex C)
{
//取复数C=x+yi的虚部
return C.Imagepart;
}
Complex Add(Complex Cl, Complex C2)
{
//求两个复数Cl和C2的和sum
Complex sum;
sum.Realpart=Cl.Realpart+C2.Realpart;
sum.Imagepart=Cl.Imagepart+C2.Imagepart;
return sum;
}
Complex Sub(Complex Cl, Complex C2)
{
//求两个复数Cl和C2的差difference
Complex difference;
difference.Realpart=Cl.Realpart-C2.Realpart;
difference.Imagepart=Cl.Imagepart-C2.Imagepart;
return difference;