函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示

admin2012-12-10  24

问题   函数Node *difference(A,B)用于求两个集合之差C=A-B,即当且仅当e是A中的一个元素,但不是B中的元素时,e是C中的元素。集合用有序链表实现,用一个空链表表示一个空集合,表示非空集合的链表根据元素之间按递增排列。执行C=A-B之后,表示集合A和B的链表不变,若结果集合C非空,则表示其链表根据元素之值按递增排列。函数append()用于在链表中添加节点。
   [C函数]
   typedef struct node{
         int element;
         struct node *link;
   }Node;
   Node *A,*B,*C;
   Node *append(last,e)
   Node *last;
   int e;
   {last->link=(Node *)malloc(sizeof(Node));
      last->link->element=e;
      return(last->link);
   }
   Node *difference(A,B)
   Node *A,*B;
   {  Node *c,*last;
   C=last=(Node *)malloc(sizeof(Node));
   while(  (1)  )
   if(A->element<B->element){
     last=append(last,A->element);
     A=A->link:
   }
   else if(  (2)  ){
     A:A->link;
     B:B->link;
   }
   elSe
     (3)  ;
   while(  (4)  ){
     last=append(last,A->element);
     A=A->link:
   }
     (5)  ;
   last=c;
   c=c->link;
   free(last);
   return(c);
}

选项

答案(1) B->link (2) A->element==B->element (3) B=B->link (4) A>link!=NULL (5) last->link=NULL

解析 本题用链表表示集合,通过比较链表的元素值判断集合的元素之间的关系。第一个while循环的条件是链表B指针不指向空,即空(1)应填“B->link”。由于A,B两集合都是按递增排列的,则如果A中的元素小于B中的元素,A中元素直接放入集合C中,集合A指向其下一个元素;如果A中的元素等于B中的元素,集合A,B分别指向下一个元素,即空(21填“A->element==B->element”;如果A中的元素大于B中的元素,集合B指向其下一个元素,即空(3)填“B=B->link”。第二个循环的条件是链表A指针不指向空时,将A中元素直接加入到C中,即空(4)填“A->link!=NULL”。将链表C最后节点指针指向空,即空(51填“last->link=NULL”。
转载请注明原文地址:https://jikaoti.com/ti/abW7FFFM
0

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