数据结构C语言 番外篇 ADT的表示与实现(以复数为例)

前言:ADT与开发

è¿éåå¾çæè¿°è¿éåå¾çæè¿°

————————————————————————————————————————

一些基本的操作我们就不提了,提一提我觉得比较新的和有价值的东西。

1.基本操作的算法都由如下格式描述,工程上我们也这么写

函数类型 函数名(参数表)
{
//算法的描述,参数接口的说明
语句序列
}

关于形参表,我们采用C++的引用方法,关于c++的引用,我周末弄完答辩和英语比赛会仔细补上去的。暑假c++学得比较囫囵吞枣,到现在对面向对象的编程还没有一个具体的感觉,有点羞耻hhh。

2.预定义方法:

#define OK 1
#define ERROR 0
#define OVERFLOW -2
//对于某个系统,Status是函数返回值类型,它的值表示函数结果的状态代码
typedef int Status;

/*题外话:
typedef int status;是个自定义类型的语句。
相当于给int取个小名,叫Status,但是他的大名,还是叫int
typedef用来定义类型的别名。
status i;就相当于int i;
至于为什么叫status,原因可能为status的英文意思是状态,
编程者想用int值表示一个状态,所以自定义一个类型。
这样status i;一看就知道变量i表示一个状态变量。
而int i;就不能传达给读者这样一个意思。
但是本质上是一样的,这样写就是为了传达编程的信息,方便以后维护,和读程序。
*/

3.举个例子来说明吧:

自然语言描述:

//严蔚敏教材和慕课常用例子,类C的口语表示
//在前面的入门篇,我们说过,ADT就是DSP(数据对象,数据关系,操作集合)的三元组
ADT Complex  //Complex代表复数
{
数据对象:D={e1,e2|e1,e2为实数}
数据关系:S={<e1,e2>|e1代表实部,e2代表虚部}
基本操作:
Create(&C,x,y)
    操作结果:构造e1+e2i的符数
GetReal(C)
初始条件:复数C已经存在,知道它的大小了
操作结果:返回实部的值
etc...

}

在严蔚敏的教材里面,每定义一个新的数据结构,都先采用这种定义方式给出其抽象数据类型的说明,实现还得靠我们自己去写代码才能掌握。

C语言实现一个复数的说明:

typedef struct
{
    float Realpart;
    float Imagepart;
}Complex;

void Create(&Complex C,float x,float y)
{
    //构造一个x+yi的复数
    C.Realpart=x;
    C.Imagepart=y;
}
float GetReal(Complex C)
{
    //取得实部的值
    return C.Realpart;
}
Complex Add(Complex C1,Complex C2)
{
    //实现复数加法
    Complex sum;
    sum.Realpart=C1.Realpart+C2.Realpart;
    sum.Imagepart=C1.Imagepart+C2.Imagepart;
    return sum;
}

关于线性表,链表,等我周六竞赛和答辩、作业写完了再补吧hhh

————————————————————————————————————————————————

猜你喜欢

转载自blog.csdn.net/qq_42229034/article/details/82987705