软题库 移动APP 扫码下载APP 随时随地移动学习 培训课程
当前位置:信管网 >> 在线考试中心 >> 信息系统项目管理师题库 >> 试题查看
试卷名称 2012年上半年程序员考试下午真题试题(案例分析)
考试中心《2012年上半年程序员考试下午真题试题(案例分析)》在线考试
试卷年份2012年上半年
试题题型【分析简答题】
试题内容

阅读以下说明和C函数,填补C函数中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
函数SetDiff(LA,LB)的功能是将LA与LB中的共有元素从LA中删除,使得LA中仅保留与LB不同的元素,而LB不变,LA和LB为含头结点的单链表的头指针。
例如,单链表LA、LB的示例如下图中的(a)、(b)所示,删除与LB共有的元素后的LA如下图中的(c)所示。
 
链表的结点类型定义如下:
   typedef struct Node {
       int data;
       struct Node *next;
   }Node, *LinkList;
函数SetDiff(LinkList LA, LinkList LB)的处理思路如下:
(1)从LA的第一个元素结点开始,令LA的第一个元素为当前元素。
(2)在LB中进行顺序查找,查找与LA的当前元素相同者,方法是令LA的当前元素先与LB的第一个元素进行比较,若相等,则结束在LB中的查找过程,否则继续与LB的下一个元素比较,重复以上过程,直到LB中的某一个元素与LA的当前元素相等(表明查找成功),或者到达LB的表尾(表明查找失败)为止。
(3)结束在LB表的一次查找后,若在LB中发现了与LA的当前元素相同者,则删除LA的当前元素,否则保留LA的当前元素。
(4)取LA的下一个元素为当前元素,重复(2)、(3),直到LA的表尾。
【C函数】
       void SetDiff (LinkList LA, LinkList LB)
       {
       LinkList pre, pa, pb;
       /* pa用于指向单链表LA的当前元素结点,pre指向pa所指元素的前驱 */
       /* pb用于指向单链表LB的元素结点 */
        (1) ;  /* 开始时令pa指向LA的第一个元素 */
       pre=LA;
       while (pa)  {
            pb=LB->next;
       /* 在LB中查找与LA的当前元素相同者,直到找到或者到达表尾 */
          while( (2) )  {
              if (pa->data==pb->data)
                 break;
                (3) ;
          }
         
          if (!pb)  {
          /* 若在LB中没有找到与LA中当前元素相同者,则继续考察LA的后续元素 */
                 pre=pa;
                 pa=pa->next;
             }
             else{
          /* 若在LB中找到与LA的当前元素相同者,则删除LA的当前元素 */
                 pre->next= (4) ;
                 free (pa);
                 pa= (5) ;
          }
}
}


相关试题

推荐文章
合作网站内容