您的位置:首页 > 理论基础 > 数据结构算法

专题一 数据结构分类与抽象数据类型(2005.10.24)

2005-10-24 23:35 459 查看
专题一 数据结构分类与抽象数据类型1.1数据结构分类现实世界中讨论的数据结构是指逻辑结构(包括:集合结构,线性结构,树结构,图结构)计算机世界里的数据结构是指存储结构(也是物理结构,包括:顺序结构,链接结构,索引结构,散列结构)1.2抽象数据类型(ADT)定义:由一种数据结构和在该数据结构上的一组操作组成.

抽象数据类型的书写格试:ADT <抽象数据类型名> is

data: <数据描述> operations: <操作声明> end <抽象数据类型名>

例题:把二次多项试ax**2+bx+c设计成一种抽象数据类型,假定起名为QUAdratic,该类型的数据部分为三个系数项a,b和c,操作部分为:(1) 初始化a,b和c的值,假定他们默认值均为0;(2) 做两个多项试的加法,返回他们的和;(3) 根据给定x的值计算多项式的值,并返回;(4) 计算机方程:ax**2 +b*x+c=0的根,对于有实根,无根和不是二次方程的情况要分别返回不同的整数值,(5) 按照:ax**2 +bx+c的各式输出二次多项式,在输出时要注意去掉系数为0的项,并且当b和c的值为负时,其前不能出现加号. 先建立抽象数据类型:ADT QUAdratic isData:一个二次多项式q,其系数分别为a,b和c;//数据描述部分Operations:Void init(Quadratic & q,float aa=0,float bb=0,float cc=0)//初始化二项式Int Add(Quadratic &q1 ,Quadratic &q2)// 两个多项试的加法Float eval(Quadratic &q,float x)//二项式求值Void root(Quadratic &q,float &r1,float &r2)//求二项试的根,两个实根由引用参数,r1,r2带回Void print(Quadratic &q)//输出二项式   End QUAdratic

下面是错误百出的代码://2005.10.24
/*先建立抽象数据类型:
ADT QUAdratic is
Data:
一个二次多项式q,其系数分别为a,b和c;//数据描述部分
Operations:
Void init(Quadratic & q,float aa=0,float bb=0,float cc=0)//初始化二项式
Int Add(Quadratic &q1 ,Quadratic &q2)// 两个多项试的加法
Float eval(Quadratic &q,float x)//二项式求值
Void root(Quadratic &q,float &r1,float &r2)//求二项试的根,两个实根由引用参数,r1,r2带回
Void print(Quadratic &q)//输出二项式
   End QUAdratic*/
#include <iostream>
#include<cmath>
struct QUAdratic {
float a,b, c;
}
void init(QUAdratic &q,float aa=0,float bb=0, float cc=0){
q.a=aa;q.b=bb;q.c=cc;
}
int Add(QUAdratic &q1, QUAdratic &q2)//两个多项式相加
{ QUAdratic &q;
q.a=q1.a+q2.a;s
q.b=q1.b+q2.b;
q.c=q1.c+q2.c;
return q;
}
float eval(QUAdratic &q,float x)//计算值为x时二项式的值;
{return (q.a*x*x+q.b*x+q.c);
}
void root(QUAdratic &q,float &r1,float &r2){//计算方程的根 ,两个实根由引用参数r1,r2带回;
if(q.a==0) return -1;//不是二次方程返回 -1;
float x=q.b*q.b-4*q.a*q.c;
if(x>=0){
r1=float(-q.b+sqrt(x))/(2*q.a);
r2=float(-q.b-sqrt(x))/(2*q.a);
return 1; //有实根返回1;
}
else return 0;//无实根返回0;
}

void print(QUAdratic &q)//输出二项式
{
if(q.a) cout<<q.a<<"x**2";
if(q.b) {
if(q.b>0) cout<<"+"<<q.b<<"x";
else cout<<q.b<<"x";
}
if(q.c) cout<<q.c;
} int main(){
QUAdratic a,b,c;
init(a,2,3);
print(a);
cout<<eval(a,4)<<endl;
float x1,x2;
int n=root(a,x1,x2);
if(n==1) cout<<x1<<''<<x2<<endl;
init(b,3,-9,6);
print(b);
n=root(b,x1,x2);
if(n==1) cout<<x1<<''<<x2<<endl;
c=Add(a,b);
print(c);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: