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

admin2017-09-23  29

问题 给定程序中,函数fun的功能是将带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为: 10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
    请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include  < stdio.h >
#include  < stdlib.h >
#define 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*********/
     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 if
   h =  (NODE * ) malloc (sizeof
(NODE));
   h 一 >next = NULL;
for(i=0;i < N;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, 10, 4, 2, 8, 6 };
   head = creatlist (a) ;
    printf ("\nThe original list:\n") ;
   outlist (head) ;
   fun (head) ;
   printf ( "\nThe list after soroutlist (head) ;
}

选项

答案(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/7zxp777K
0

最新回复(0)