下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。 请改正函数fun中的错误,使它能得出正确的结果。 注意:部分源程序在

admin2021-04-28  26

问题 下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。
    请改正函数fun中的错误,使它能得出正确的结果。
    注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
  试题程序:
1   #include<stdio.h>
2   #include<conio.h>
3   #include<stdlib.h>
4   typedef struct aa
5   {int ctata;
6   struct aa * next;
7   }NODE ;
8   fun(NODE*h)
9  {int max=-1;
10   NODE*p;
11   /*********found*********/
12    p=h;
13   while(p)
14    {if(p->data>max)
15    max=p->data;
16  /********* found*********/
17    p=h->next;
18    }
19  return max;
20  }
21   outresult(int s,FILE*pf)
22  {fprintf(pf,’’\nThe max in link:%d\n’’,s);
23 }
24   NODE * treatlink(int n,int m)
25   {NODE*h,*p,*s ;
26   int i;
27   h=p=(NODE *)malloc(sizeof (NODE));
28  h->data=9999;
29   for(i=l;i<=n;i++)
30    {s=(NODE*)malloc(sizeof (NODE));
31    s->data=rand()%m;
32    s->next=p->nexL;
33    p->next=s;p=p->next;
34    }
35   p->next=NULL;
36   return h;
37   }
38    outlink(NODE*h,FILE*pf)
39   {NODE*p;
40   p=h->next ;
41   fprintf(pf,’’\n The LIST:\n\n HEAD’’);
42   while(p)
43    {fprintf(pf,’’->%d’’,p->data);
44    p=p->next;}
45   fprintf(pf,’’\n’’);
46   }
47    main()
48   {NODE*head;int m;
49  system(’’CLS’’);
50  head=creatlink(12,100);
51  outlink(head,stdout);
52  m=fun(head);
53  printf(’’\nThe RESULT:\n’’);
54  outresult(m,stdout);
55  }

选项

答案(1)p=h->next; (2)p=p->next;

解析 (1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。
(2)通过指针p的移动遍历链表,因此此处应改为p=p->next;。
转载请注明原文地址:https://jikaoti.com/ti/hIz0FFFM
0

最新回复(0)