问答题 给定程序中,函数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 i, 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 sorting:\n"); outlist(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就交换这两个数的值,因而此空填写>。