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

admin2020-07-28  45

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

选项

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

解析 填空1:本题考查了指针变量p赋初值,使p指向链表的头结点的下一个结点,因此本空应该填写h->next。
填空2:本空考查了q的作用,q代表p的下一个数,因此次空应该填写p->next。
填空3:if判断句是比较链表中相邻两个数的大小,如果p->data>q->data就交换这两个数的值,因而此空填写>。
转载请注明原文地址:https://kaotiyun.com/show/wL3p777K
0

最新回复(0)