问题 填空题

下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun()的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include <stdio.h> #include <conio.h> #include <stdlib.h> typedef struct aa { int data;struct aa *next; } NODE; /*************found**************/ fun (NODE *h) { int max=-1;NODE *p;p=h->next;while(p) { if(p->data>max)max=p->data; /*************found**************/ p=h->next; }return max; } outresult(int s, FILE *pf) { fprintf(pf, "\nThe max in link :%d\n",s);} NODE *creatlink(int n, int m) { NODE *h,*p,*s,*q;int i, x;h=p=(NODE *)malloc(sizeof(NODE)); h->data=9999;for(i=1;i<=n;i++){ s=(NODE *) malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next;}p->next=NULL;return h; } outlink(NODE *h,FILE *pf) { NODE *p;p=h->next;fprintf(pf, "\n The LIST :\n\n HEAD");while(p) { fprintf(pf, "->%d",p->data); p=p->next;}fprintf(pf, "\n"); } main ( ) { NODE *head; int m;clrscr();head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf("\nThe RESULT :\n"); outresult (m, stdout); }

答案

参考答案:错误:fun(NODE *h) 正确:int fun(NODE *h)

解析:(2) 错误:p=h->next; 正确:p=p->next; 本题考查的这种链表的数据结构中,必须利用指针变量才能实现。即一个结点中应包含一个指针变量,用它存放下一结点的地址。建立单向链表的一般步骤是:建立头指针一建立第一个节点一头指针指向第一个节点一建立第二个节点一第一个节点的指针域指向第二个节点→……→最后一个节点指向NULL。本题重点是:了解链表的基本思想和相关算法,其实考试时的程序根本没有书上的难。在这里我们要说,重点理解有关链表插入及删除时指针移动的先后顺序问题。注意指针的保存和归位。(即头指针的保存和链表遍历时指针的归位)。这都是考试重点!

单项选择题 A1/A2型题
填空题