数据结构(C语言) 基本概念和术语(3)

数据类型

在使用高级程序设计语言编写程序时,必须对程序中的每个变量、常量或表达式,明确说明他们所属的数据类型 。

例如,C语言中:

  • 提供int,char,float,double等基本数据类型
  • 数组、结构、共用体、枚举等构造数据类型
  • 还有指针、空(void)类型
  • 用户也可以用typedef自己定义数据类型

数据类型的作用

  • 约束变量或常量的取值范围
  • 约束变量或常量的操作

抽象数据类型(ADT)

定义

ADT是指数学模型以及定义在此数学模型上的一组操作 。

  • 由用户定义,从问题抽象出数据模型(逻辑结构)
  • 还包括定义在数据模型上的一组抽象运算(相关操作)
  • 不考虑计算机内的具体存储结构与运算的具体实现算法

格式

抽象数据类型的格式:

ADT 抽象数据类型
{

  • 数据类型:<数据对象的定义>
  • 数据关系:<数据关系的定义>
  • 基本操作:<基本操作的定义>

} ADT 抽象数据类型名

期中:

  • 数据对象、数据关系的定义用的是伪代码描述
    基本操作的定义格式为

    • 基本操作名(参数表)
    • 初始条件:<初始条件的描述>
    • 操作结果:<操作结果描述>

参数表:

  • 赋值参数只为操作提供输入值。
  • 引用参数以&打头,除可提供输入值外,还将返回操作结果。

初始条件:

  • 描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。

操作结果:

  • 说明操作正常完成之后,数据结构的变化状况和应放回的结果。

ADT抽象数据类型名{

  • Data
  • 数据对象的定义
  • 数据元素之间逻辑关系的定义
  • Operation
  • 操作1 初始条件 操作结果描述
  • 操作2
  • 操作n …

} ADT抽象数据类型名

ADT Circle {
数据对象:D={r,x,y | r,x,y均为实数}
据关系:R={< r,x,y >|r是半径,<x,y>是圆心坐标 }
基本操作:

  • Circle(&C,r,x,y)
    操作结果:构造一个圆。
  • double Area( C)
    初始条件:圆已存在。操作结果:计算面积。
  • double Circumference ( C)
    初始条件:圆已存在。操作结果:计算周长。

} ADT Circle

抽象数据类型示例

下面写一个关于复数的抽象数据类型:

#include <stdio.h>
#include<string.h>
typedef  struct
{
    float realpart;//实部
    float imagpart;//虚部
} Complex;
void assign(Complex *A,float real,float  imag);//赋值
void add(Complex *A,Complex B,Complex C);//A+B
void minus(Complex *A,Complex B,Complex C);//A-B
void multiply(Complex *A,float real,float  imag);//A*B
void divide(Complex *A,float real,float  imag);//A/B


void assign(Complex *A,float real,float imag)
{
    A->imagpart=imag;
    A->realpart=real;
}
void add(Complex *c,Complex A,Complex B)
{
    c->realpart=A.realpart+B.realpart;
    c->imagpart=A.imagpart+B.imagpart;
}

int main() {
    Complex z1,z2,z3,z4,z;
    float RealPart = 1.0, ImagPart=1.0;
    assign(&z1,6.0,8.0);
    assign(&z2,4.0,3.0);
    add(&z,z1,z2);
    printf("%lf+%lfi",z.realpart,z.imagpart);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值