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

admin2016-12-06  31

问题 给定程序中,函数fun的功能是:将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为10、4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10。
    请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
    注意:部分源程序给出如下。
    不得增行或删行,也不得更改程序的结构!
    试题程序:
1   #include<stdio.h>
2   #include<stdlib.h>
3    #define N 6
4  typedef struct node {
5    int data;
6    struct node * next;
7  } NODE ;
8  void fun(NODE * h)
9  {  NODE * p,*q;int t;
10   p=h;
11    while(p){
12    /*********found*********/
13    q=【1】;
14    /*********found*********/
15    while(【2】)
16    {if(p->data>q->data)
17    {t=p->data;
18    p->data=q->data;
19    q->data=t;)
20    q=q->next ;
21    }
22    /*********found*********/
23   p=【3】
24  }
25  }
26   NODE * creatlist(int a[])
27   {  NODE * h,*p,*q;int i ;
28  h=NULL;
29   for(i=0;i<N;i++){  q=(NODE*)malloc(sizeof
30    (NODE));
31    q->data=a;
32    q->next=NULL;
33    if(h==NULL)h=p=q;
34    else{p->next=q;p=q;}
35    }
36    return h;
37   }
38   void outlist(NODE*h)
39   {  NODE*p;
40   p=h;
41   if(p==NULL)
42   printf("The list is NULL!\n’’);
43   else
44  {printf(’’\nHead’’);
45    do
46    {printf(’’->%d’’,p->data);
47    p=p->next;}
48    while(p!=NULL);
49    printf(’’->End\n’’);
50    }
51  }
52  main()
53   {  NODE * head;
54    int a[N]={0,10,4,2,8,6};
55    head=creatlist(a); printf(’’\nThe original
56    list:\n’’);
57    outlist(head);
58    fun(head);printf(’’\nThe list after
59    inverting:\n’’);
60    outlist(head);
61  }

选项

答案(1)p->next (2)q (3)p->next

解析 填空1:从第2个while循环可知,q的初值应该为p的next,故此空应该填写p->next。
填空2:第2个while循环表示的是每次从链表剩下的树中找出最小的数,因此此空应该以q是否为空来判断循环是否结束,所以此空应该填写q。
填空3:当找到一个最小的数时p应该向后移,因此此空应该填写p->next。
转载请注明原文地址:https://kaotiyun.com/show/hNDp777K
0

最新回复(0)