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

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

1.1数据结构分类

现实世界中讨论的数据结构是指逻辑结构(包括:集合结构,线性结构,树结构,图结构)

计算机世界里的数据结构是指存储结构(也是物理结构,包括:顺序结构,链接结构,索引结构,散列结构)

1.2抽象数据类型(ADT

定义:由一种数据结构和在该数据结构上的一组操作组成.

 

抽象数据类型的书写格试:

ADT <抽象数据类型名> is

 

               data:

             <数据描述>

             operations: 

<操作声明>

 

end  <抽象数据类型名>

 

 

例题:把二次多项试ax**2+bx+c设计成一种抽象数据类型,假定起名为QUAdratic,该类型的数据部分为三个系数项a,bc,操作部分为:

(1)   初始化a,bc的值,假定他们默认值均为0

(2)   做两个多项试的加法,返回他们的和;

(3)   根据给定x的值计算多项式的值,并返回;

(4)   计算机方程:ax**2 +b*x+c=0的根,对于有实根,无根和不是二次方程的情况要分别返回不同的整数值,

(5)   按照:ax**2 +bx+c的各式输出二次多项式,在输出时要注意去掉系数为0的项,并且当bc的值为负时,其前不能出现加号.

 

先建立抽象数据类型:

ADT QUAdratic    is

Data:

一个二次多项式q,其系数分别为a,bc//数据描述部分

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);
      }
     
     
     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值