给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处填入正确的内容并把下划线删

admin2019-03-06  26

问题 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
    不得增行或删行,也不得更改程序的结构!
#include  
#include   
#define N 6
typedef struct node {
  int data;
  struct node *next;
} NODE;
void fun (NODE  *h)
{NODE *p,*q; int t;
while (p) {
q=____2____;
    while (q) {
/*********found**********/  
      if (p—>data ____3____ q—>data)
         {  t — p—>data; p—>data = q—>
data; q=>data = t; }
      q = q—>next;
           }
   p= p—>next;
      }
}
NODE  *creatlist (int  a [ ] )
{NODE *h,*p,*q; int i;
   h=  (NODE *) malloc (sizeof (NODE)) ;
  h—>next = NULL;
    {   q= (NODE  *) malloc (sizeof (NODE)) ;
       q—>data=a
    q—>next = NULL;
    if (h—>next == NULL) h—>next =
p = q;
      else {p—>next = q; p = q; }
      }
   return h;
  }
void outlist (NODE *h)
{NODE *p;
  p = h—>next;
  if (p==NULL) printf("The list is
else
   {   printf ("\nHead ") ;
  do
       {  printf("—>%d",p—>data) ; p=p
—>next; }
         while (p ! =NULL) ;
       printf ("—>End\n") ;
   }
}
main ()
{NODE *head;
  int a[N]= {0,10,4,2,8f 6 };
    head=creatlist (a) ;
     printf ("\nThe original  list:\n") ;
    outlist (head) ;
     fun (head) ;
     printf ("\nThe list after sorting:
    outlist (head) ;
}

选项

答案(1) h—>next (2) p—>next (3)>=

解析 函数fun的功能是将带头节点的单向链表  结点数据域中的数据从小到大排序,在fun函数内采用的是  选择法排序。
第一空:由审题分析可知,q从h的下一个元素开始寻  找最小值,故第一空为“h—>next”。
第二空:由审题分析可知,while循环是在剩下的元素  当中找最小值,剩下的结点是由q指向的链表,q从p的后  一个结点开始,故第二空处应为“p—>next”。
第三空:“if(p—>data____3____q—>data)”是比较p结点和q结  点数据的大小,如果p结点的数据比q结点的数据大,那么应  该将p结点和q结点的数据进行交换,故第三空处应为“>—"。
转载请注明原文地址:https://kaotiyun.com/show/XIRp777K
0

最新回复(0)