一起答
主观

阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。

  【说明】

 函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:

 typedef struct Tnode{

   int data;  /*结点的键值*/

   struct Tnode *Lchild, *Rchild;  /*指向左、右子树的指针*/

 }*Bitree:

 在二叉查找树上删除一个结点时,要考虑3种情况:

 ①若待删除的结点p是叶子结点,则直接删除该结点;

 ②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;

 ③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。

 【函数】

 int DeleteNode (Bitree *r,int e)  {

   Bitree p=*r,pp,s,c;

   while ( (1) ){ /*从树根结点出发查找键值为e的结点*/

     pp=p;

     if(e<p->data) p=p->Lchild;

     else p=p->Rchild;

   }

   if(!P) return-1;  /*查找失败*/

   if(p->Lchild && p->Rchild) {/*处理情况③*/

     s=(2);pp=p

     while (3) {pp=s;s=s->Rchild;}

     p->data=s->data;  p=s;

   }

   /*处理情况①、②*/

   if ( (4) ) c=p->Lchild;

   else c=p->Rchild;

   if(p==*r) *r=c;

   else if ( (5) ) pp->Lchild=c;

     else pp->Rchild=c;

   free (p);

   return 0;

 }

参考答案
查看试卷详情
相关试题
  1. 阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。

      【说明】一条直线是由两个点组成的,代码如下。

     public class Point

     {

       private int x, y; //coordinate

       public Point (int x, int y)

       { (1)=x; (2);}

       public int GetX()

       { return x; }

       public int GetY()

       { return y; }

     }

     class Line           //line segment

     {

       private (3);       //extremc points

       Line (Point a, Point b)   //constructor

       { p1 =(4);

        p2=(5);

       }

       public double Length() {

       return Math.sqrt (Math.pow (p2.GetX()-pl.GetX(),2)

            +Math.pow (p2.GetY()-p1.GetY(),2)) ;

       }

     }

  2. 阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。

      【说明】

     函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:

     typedef struct Tnode{

       int data;  /*结点的键值*/

       struct Tnode *Lchild, *Rchild;  /*指向左、右子树的指针*/

     }*Bitree:

     在二叉查找树上删除一个结点时,要考虑3种情况:

     ①若待删除的结点p是叶子结点,则直接删除该结点;

     ②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;

     ③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。

     【函数】

     int DeleteNode (Bitree *r,int e)  {

       Bitree p=*r,pp,s,c;

       while ( (1) ){ /*从树根结点出发查找键值为e的结点*/

         pp=p;

         if(e<p->data) p=p->Lchild;

         else p=p->Rchild;

       }

       if(!P) return-1;  /*查找失败*/

       if(p->Lchild && p->Rchild) {/*处理情况③*/

         s=(2);pp=p

         while (3) {pp=s;s=s->Rchild;}

         p->data=s->data;  p=s;

       }

       /*处理情况①、②*/

       if ( (4) ) c=p->Lchild;

       else c=p->Rchild;

       if(p==*r) *r=c;

       else if ( (5) ) pp->Lchild=c;

         else pp->Rchild=c;

       free (p);

       return 0;

     }

  3. 阅读下列C++程序和程序说明,将应填入(n)处的字句写在对应栏内。

     【说明】Point是平面坐标系上的点类,Line是从Point派生出来的直线类。

     #include <iostream.h>

     class Point

     {public:

        Point (int x, int y) ;

        Point (Point &p) ;

        ~Point();

        void set (double x, double y) ;

        void print();

     private:double X,Y;

     };

     Point::Point (int x, int y) //Point 构造函数

     {X=x; Y=y; }

     Point::Point ( (1) ) //Point 拷贝构造函数

     {X=p.X; Y=p.Y;}

     void Point::set (double x, double y)

     {X=x; Y=y; }

     void Point::print()

     {cout<<' ('<<X<<","<<Y<<") "<<endl; }

     Point::~Point()

     {cout<<"Point 的析构函数被调用! "<<endl;

     class Line: public Point

     {public:

       Line (int x, int y, int k) ;

       Line (Line &s) ;

       ~Line();

       void set (double x, double y, double k)

       void print();

     private:double K;

     };

      (2)//Line 构造函数实现

     { K=k;}

      (3)//Line 拷贝构造函数实现

     {K=s.K;}

     void Line::set (double x, double y, double k)

     { (4);

     K=k;

     }

     void Line::print()

     {cout<<" 直线经过点";

      (5);

     cout<<"斜率为: k="<<K<<endl;

     }

     Line: :~Line()

     {cout<<"Line 析构函数被调用! "<<endl;

     }

     void main()

     {Line 11 (1,1,2) ;

      11 .print();

      Linel2 (11) ;

      12.set (3,2,1) ;

      12.print();

     }

  4. 阅读下列说明和图,回答问题1至问题3,将解答写在答卷的对应栏内。

      【说明】

     “进货库存信息管理系统”是ERP系统中一个重要的子系统,下面是该系统的一个简化了的主结构功能图。

     

     其中一些各系统功能描述如下:

     [进货信息管理系统]

     ①进货单据建立文件维护管理工作。

     ②进货查询统计管理工作。

     ③进货过账工作。

     在进货管理系统中,要处理“成本计算和费用摊消” 的问题。处理方式如下所述。

     进口货物的成本计算:

     (1)先算出本次进货货物的原币总成本金额。

     (2)再依照当时原币(如:美金US$,英镑、港币HK$等)的汇率乘以本次进货原币总成本金额,算出本次进货台币总成本金额。

     (3)再计算出本次进货所产生的全部费用总金额(包含:关税、报关费、运费、其他费用等费用)。

     (4)将“本次进货台币总成本金额”加上“全部费用总金额”算出本次实际的“总成本金额”。

     (5)再利用下述公式算出各单项货物的“单项货物的成本金额”。

     (6)最后一个步骤,再将“单项货物的成本金额”除以单项货物本次进货的数量,即可算出“单一货物本次进货实际的成本金额”。

      

     【问题1】

     将此“进口货物的成本计算方式”利用UML的类图米设计结构,要求使用到抽象和继承。写出类1和类2名称(中文、英文皆可,但要说明其主要功能)

     【问题2】

     说明类图都包括什么。

     【问题3】

     解释依赖与泛化,请举例。

  5. 阅读下列说明,回答问题1和问题2,将解答写在答卷的对应栏内。

      【说明】

     供应商—零件—工程项目数据库由以下4个关系模式构成:

     S(SNO,SNAME,STATUS,CITY)

     P(PNO,PNAME,COLOR,WEIGHT,CITY)

     J(JNO,TNAME,CITY)

     SPJ(SNO,PNO,JNO,QTY)

     其中,供应商S,零件P和工程项目J分别由供应商号(SNO),零件号(PNO)和工程项目号(JNO)唯一标识。供货SPJ是指由某个供应商向某个工程项目供应某些数量的某种零件。

     【问题1】

     请用SQL语言完成如下的操作。

     ①找出给北京的工程项目提供不同的零件号:

     ②将没有供货的所有工程项目从J中删除;

     ③查询这样的工程项目号:供给该工程项目的零件P1的平均供应量大于供给工程项目n的任何一种零件的最大供应量。

     【问题2】

     定义一个视图,它由所有这样的工程项目(工程项目号与所在城市名称)组成:它们由供应商S1供货且使用零件P1。

  6. 阅读下列说明和流程图,回答问题1至问题3,将解答写在对应栏内。

      

     【说明】

     流程图描述了某宽带数据专线管理系统的部分处理流程。

     (1)凡申请宽带数据专线使用者,均需填写专线申请表。系统把申请表存储在专线申请登记文件中,等待分配专线号。

     (2)系统为申请者指定专线号,并根据通信距离(按地区计算)、通信计算初装费和月租费,然后发初装通知单送给用户,并产生施工单交有关部门施工。同时产生专线处理文件。专线号是专线的唯一标识。

     (3)施工结束后,系统更新用户文件,并产生专线计费文件,作为以后收费的依据。

     (4)一个用户可以租用多条专线,用户可用现金或银行托付两种方式支付租金,但一个用户只能使用一种付款方式。系统每月按用户(而不是专线)为单位计费出账。

     (5)流程图中各数据文件及有关单据所含的数据项如下。

     专线申请表及专线中请登记文件:

     申请号、用户名称、付款方式,开户银行代码、账号、主端名称、主端地址、对端地址、对端所在地区、通信速率、设备接口、申请日期。

     专线处理文件;

     申请号、专线号、用户名称、付款方式、开户银行代码、账号、初装费、月租费、完工日期。

     初装费收据:

     专线号、初装费、交费日期。

     施工单:

     施工单号、专线号、主端名称、主端地址、对端所在地区,通信速率、设备接口、完工期限。

     完工单:

     施工单号、专线号、完工日期。

     用户文件:

     用户编号、用户名称、付款方式、开户银行代码、账号。

     专线计费文件:

     专线号、用户编号、月租金、开通日期。

     【问题1】

     宽带数据专线价目文件由哪些数据项组成?

     【问题2】

     为了避免在用户尚未支付初装费时就去施工,有人提议将图中从处理2产生的施工单改成从处理3产生施工单。试问从处理3能否产生施工单?为什么?

     【问题3】

     当一个用户使用多条专线时,若允许该用户对其中的一些专线采用现金支付,对另一些专线采用银行托付方式,则在尽量减少数据冗余的前提下,应如何调整有关的数据文件。