1-1 什么是数据?它与信息是什么关系?

数据(data)是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

数据是信息的抽象表示。


1-2 什么是数据结构?有关数据结构的讨论涉及哪三个方面?

数据结构由某一数据对象及该对象中所有数据成员之间的关系组成,记为:Data_Structure={D,R}。其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。

通常我们讨论数据结构涉及三个方面:
1.各种在解决问题时可能遇到的典型的逻辑结构——数据结构;
2.这些逻辑结构的存储映像——存储实现;
3.数据结构的相关操作及其实现。


1-3 数据结构分为线性结构和非线性结构两大类。线性结构包括数组、链表、栈、队列、优先级队列等;非线性结构包括树、图等,这两类结构各自的特点是什么?

线性结构中各个数据成员依次排列在一个线性序列中,有且仅有一个开始成员和一个终端成员,并且所有数据成员都最多有一个直接前驱和一个直接后继;非线性结构中各个数据成员不再保持在一个线性序列中,每个数据成员可能与零个或多个其他数据成员发生联系。


1-4 什么是数据抽象类型?试用C++的类声明定义“复数”的抽象数据类型。要求:
(1)在复数内部用浮点数定义它的实部和虚部。
(2)实现3个构造函数:缺省的构造函数没有参数;第二个构造函数将双精度浮点数赋给复数的实部,虚部置为0;第三个构造函数将两个双精度浮点数分别赋值给复数的实部和虚部。
(3)定义获取和修改复数的实部和虚部,以及+、-、*、/等运算的成员函数。
(4)定义重载的流函数来输出一个复数。


抽象数据类型通常是指由用户定义,用以表示应用问题的数据模型。抽象数据类型由基本的数据类型构成,并包括一组相关的服务。

//在头文件Cnumber.h中定义的复数类
#ifndef_Cnumber_h_
#define_Cnumber_h_
#include< iostream.h > //不知道该如何输入"<"iostream.h">"只好多出空格

class Cnumber{ //complex number类
private:
double a; //复数的实部
double b; //复数的虚部
public:
Cnumber():a(0),b(0){} //无参数构造函数
Cnumber(double x):a(x),b(0){} //只有实部的构造函数
Cnumber(double x,double y):a(x),b(y){} //实部和虚部的构造函数
~Cnumber(); //析构函数
double getreal(){return a;} //获取实部
double geti(){return b;} //获取虚部
setreal(double x){a=x;} //设定实部
seti(double y){b=y;} //设定虚部
Cnumber operator = (Cnumber y); //两复数=运算重载
Cnumber operator + (Cnumber y); //两复数+运算重载
Cnumber operator - (Cnumber y); //两复数-运算重载
Cnumber operator * (Cnumber y); //两复数*运算重载
Cnumber operator / (Cnumber y); //两复数/运算重载
friend ostream& operator << (ostream& outstream,Cnumber& z); //输出一个复数
}

#endif

//复数类Cnumber的相关服务的实现放在C++源文件Cnumber.cpp中
#include<>
#include<>
#include"Cnumber.h"

Cnumber operator = (Cnumber y){
a=y.a;
b=y.b;
return this;
}

Cnumber Cnumber::operator + (Cnumber y){
Cnumber z;
z.a=a+y.a;
z.b=b+y.b;
return z;
}

Cnumber Cnumber::operator - (Cnumber y){
Cnumber z;
z.a=a-y.a;
z.b=b-y.b;
return z;
}

Cnumber Cnumber::operator * (Cnumber y){
Cnumber z;
z.a=a*y.a-b*y.b;
z.b=a*y.b+b*y.a;
return z;
}

Cnumber Cnumber::operator / (Cnumber y){
Cnumber z;
z.a=(a*y.a+b*y.b)/(y.a*y.a+y.b*y.b)
z.b=(b*y.a-a*y.b)/(y.a*y.a+y.b*y.b)
return z;
}

ostream& operator << (ostream& OutStream,Cnumber& y){
OutStream << y.a << (Y.b>=0.0)?"+":"-" << fabs(Y.b) << "i";
//fabs()取绝对值函数
return OutStream; }

Comments (0)