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

admin2015-08-23  31

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

最新回复(0)