1、数据
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
2、数据对象
数据对象:是性质相同的数据元素的集合,是数据的子集。
3、数据元素
数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
4、数据项
数据项:一个数据元素可以由若干个数据项组成,数据项是不可分割的最小单位。
1.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
2.数据类型:一个值的集合+定义在这个值集上的一组操作
注:
数据结构 = 数据 + 组成方式。
数据类型 = 数据 + 处理方式。
3.抽象数据类型:一个数学模型+定义在该模型上的一组操作
抽象数据类型的定义格式:
对抽象数据类型的描述一般用(D,R,P)三元组表示
抽象数据类型的定义格式为:
ADT抽象数据类型名 {
数据对象D:<数据对象的定义>
数据关系R:<数据关系的定义>
基本操作P:<基本操作的定义>
}ADT抽象数据类型名
其中,D是数据对象,R是D上的关系集,P是对D的基本操作集。
数据对象和数据关系的定义用伪代码来描述。
基本操作的定义格式为:
基本操作名(参数表)
初始条件:<初始条件描述>
操作结果:<操作结果描述>
初始条件说明操作执行之前数据结构和参数应满足的条件;操作结果说明操作完成后,数据结构的变化状况和应返回的结果。
示例:
#include<stdio.h>
typedef struct {
float imagpart; //虚部
float realpart; //实部
}Complex; //定义复数的抽象数据类型
void Assign(Complex* A, float real, float imag);
void Add(Complex A, Complex B, Complex* C);
void Minus(Complex A, Complex B, Complex* C);
void Multiply(Complex A, Complex B, Complex* C);
void Gonger(Complex* Z); //函数的声明。
void Divide(Complex A, Complex B, Complex* C);
void Assign(Complex* A, float real, float imag) //给 定义的复数抽象数据类型 赋值
{
A->realpart = real;
A->imagpart = imag;
}
void Add(Complex A, Complex B, Complex* C) //该函数功能是 复数求和
{
C->realpart = A.realpart + B.realpart;
C->imagpart = A.imagpart + B.imagpart;
}
void Minus(Complex A, Complex B, Complex* C) //该函数功能是 复数相减
{
C->realpart = A.realpart - B.realpart;
C->imagpart = A.imagpart - B.imagpart;
}
void Multiply(Complex A, Complex B, Complex* C) //该函数功能是 实现两个复数相乘
{
C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart;
C->imagpart = A.imagpart * B.realpart + A.realpart * B.imagpart;
}
void Gonger(Complex* Z) //求共轭复数 因为下面复数相除要用到共轭复数
{
Z->imagpart = -(Z->imagpart);
}
void Divide(Complex A, Complex B, Complex* C) //该函数功能是 实现两个复数相除
{
Gonger(&B);
C->realpart = (A.realpart * B.realpart + A.imagpart * B.imagpart) / (B.imagpart * B.imagpart + B.realpart * B.realpart);
C->imagpart = (A.imagpart * B.realpart + A.realpart * B.imagpart) / (B.imagpart * B.imagpart + B.realpart * B.realpart);
}
int main()
{
Complex x1, x2, x3, x4, X;
Assign(&x1, 5.0, 8.0); //给复数x1赋值
printf("%lf %lf\n", x1.realpart, x1.imagpart);
Assign(&x2, 4.0, 3.0); //给复数x2赋值;
printf("%lf %lf\n", x2.realpart, x2.imagpart);
Add(x1, x2, &x3); // 这里以&打头的参x3表示 引用型参数
printf("%lf %lf\n", x3.realpart, x3.imagpart);
Multiply(x1, x2, &x4); //两个复数相乘
printf("%lf %lf\n", x4.realpart, x4.imagpart);
Divide(x4, x3, &X); //两个复数相除
printf("%lf %lf\n", X.realpart, X.imagpart);
return 0;
}