抽象数据类型的表示与实现

抽象数据类型的表示与实现

(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;
posted @ 2020-02-20 20:45  刺客伍六七  阅读(1635)  评论(0编辑  收藏  举报