[函数] void Del(POLY *C, struct Node *p) /*若p是空指针则删除头节点,否则删除p节点的后继*/ { struct Node *t; /*C是空指针或C没有节点*/ if(C == N

admin2012-02-20  9

问题
[函数]
   void Del(POLY *C, struct Node *p)
   /*若p是空指针则删除头节点,否则删除p节点的后继*/
   {
   struct Node *t;
   /*C是空指针或C没有节点*/
   if(C == NULL || C->head == NULL)return;
   if(  (1)  )(/*删除头节点*/
   t = C->head;
   C->head = t->next;
   return;
   }/*if*/
   t = p->next;
   p->next = t->next;
   };/*Del*/
   void Insert(POLY *C, struet Node *pC)
   /*将pC节点按指数降序插入到多项式C中*/
   /*若C中存在pC对应的指数项,则将系数相加;若其结果为零,则删除该节点*/
   {
   struct Node *t, *tp;
   /*pC为空指针或其系数近似为零*/
   if(pC == NULL || fabs(pC->c) < EPSI)return;
   if(C->head == NULL){ /*若C为空,作为头节点插入*/
   C->head = pC;
   pC->next = NULL;
   C->n++;
   return;
   }/*if*/
   /*若pC的指数比头节点的还大,插入到头节点之前*/
   if(pC->e > C->head-)e){
     (2)  ;
   C->head = pC;
   C->n++;
   return;
   }/*if*/
     (3)  ;
   t = C->head;
   while(t!= NULL){
   if(t->e > pC->e){
   tp = t;
   t = t->next;
   }
   else if(t->e == pC->e){ /*C中已经存在该幂次项*/
   t->c += pC->c; /*系数相加*/
   if(fabs(t->c) < EPSI){ /*系数之和为零*/
     (4)  ; /*删除对应节点*/
   C->n--;
   }
     (5)  ;
   }
   else t = NULL; /*C中已经不存在该幂次项*/
   }/*while*/
   if(t == NULL){/*适当位置插入*/
   pC->next = tp->next;
   tp->next = pC;
   C->n++;
   }/*if*/
   };/*Insert*/

选项

答案p==NULL pC->next=C->head->next tp=NULL Del(C,tp) break

解析 根据注释,Del函数当p是空指针时,删除头节点,因此易知(1)空应填p==NULL。
   (2)空是插入头节点的特殊情况,应填pC->next=C->head->next。
   由注释可知空(4)是删除操作,需调用Del函数,进一步确定实参。此处需要删除节点t,结合Del函数的说明,实参p需要空指针(NULL)或t节点的前驱指针,由if(t->e>pC->e){tp=t;t=t->next;}可知,tp正是t节点的前驱指针。因此应填Del(C,tp)。由此也可以确定空(3),当需要删除头节点时,tp应是空指针,因此空(3)应填tp=NULL。
   至于空(5),应填break。此时,节点p已正确处理完毕,应该结束while循环,而且必须终止,否则while循环结束后t值为NULL,将会错误的执行插入操作。
转载请注明原文地址:https://kaotiyun.com/show/PlDZ777K
0

相关试题推荐
随机试题
最新回复(0)