问答题 给定程序中,函数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[i]; 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就交换这两个数的值,因而此空填写 >。