专题一 数据结构分类与抽象数据类型(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);
}
抽象数据类型的书写格试: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);
}
相关文章推荐
- ORACLE数据导出与导入专题(2)——导出表结构
- 【数据结构】数据、数据结构(分类)、抽象数据结构
- Redis 专题一: 数据结构
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 4000 队列
- [图解数据结构之Java实现](0) --- 概要分析和目录分类
- 关于商城分类查询表结构与数据查询
- 郝斌数据结构(1)----数据结构基本分类和链表创建
- 数据仓库专题(12)-数据分类模型
- CUGB专题训练之数据结构:F - 病毒侵袭持续中(AC自动机重复子串)
- Delphi中根据分类数据生成树形结构的最优方法
- 数据结构1:数组专题
- Delphi中根据分类数据生成树形结构的最优方法
- 数据结构—抽象数据类型
- 数据结构实验:连通分量个数 分类: 图论 2015-06-09 17:33 8人阅读 评论(0) 收藏
- 数据结构之笔记chap02线性表-抽象数据类型ADT
- 数据结构教程 第二课 抽象数据类型的表示与实现
- json结构更改的方法 把date有数据的分类
- 读书笔记:数据结构与算法-Python语言描述【第2章:抽象数据类型和Python类】
- Delphi中根据分类数据生成树形结构的最优方法
- 数据结构实验之分类二叉树的构建