数据、数据对象、数据元素、数据项、数据结构、数据类型、抽象数据类型

928 阅读3分钟

1、数据

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

2、数据对象

数据对象:是性质相同数据元素的集合,是数据的子集。

3、数据元素

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录

4、数据项

数据项:一个数据元素可以由若干个数据项组成,数据项是不可分割的最小单位

image.png

image.png

1.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合

2.数据类型:一个值的集合+定义在这个值集上的一组操作

注:

数据结构 = 数据 + 组成方式。

数据类型 = 数据 + 处理方式。

3.抽象数据类型:一个数学模型+定义在该模型上的一组操作

image.png

image.png 抽象数据类型的定义格式

对抽象数据类型的描述一般用(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;
}