2013年计算机二级C语言上机试题及答案3

全国等级考试资料网 2022-10-25 11:35:03 123
给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序
后链表结点数据域从头至尾的数据为:2、4、6、8、10。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define N 6
typedef struct node {
int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q; int t;
p = __1__ ;
while (p) {
q = __2__ ;
while (q) {
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{ 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! ");
else
{ printf(" Head ");
do
{ printf("->%d", p->data); p=p->next; }
while(p!=NULL);
printf("->End ");
}
}
main()
{ NODE *head;
int a[N]= {0, 10, 4, 2, 8, 6 };
head=creatlist(a);
printf(" The original list: ");
outlist(head);
fun(head);
printf(" The list after sorting : ");
outlist(head);
}
解题思路:
本题是考察使用链表方法,对链表的结点数据进行升序排列。
第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p 的初始位置。所以应填写:h->next。
第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写:p->next。
第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>(或>=)。 首页 1 2 3 尾页 相关资料

相关阅读