N 名学生的成绩已在主函数中放入一个带头节点的链接表结构中,h 指向链接的头节点。请编写函数 fun,它的功能是找出学生的最高分,由函数值返回。补完以下代码#include<stdio.h> #include<stdlib.h> #define N 8 struct slist { double s; struct slist *next; }; typedef struct slist STREC; double fun(STREC *h) { //************** code begin **************// //************** code end ****************// } STREC *creat(double *s) { STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(i<N) { q=(STREC*)malloc(sizeof(STREC)); q->s=s[i]; i++; p->next=q; p=q; } p->next=0; return h; } outlist(STREC *h) { STREC *p; p=h->next; printf("head"); do { printf("->%2.0f",p->s); p=p->next; } while(p!=0); } main() { double s[N], max; STREC *h; int i; for(i=0;i<N;i++) scanf("%lf",&s[i]); h=creat(s); outlist(h); max=fun(h); printf("\nmax=%.1f",max); }
时间: 2023-07-23 18:05:24 浏览: 203
试写出一个计算单链表中结点个数的算法,其中指针p指向该链表的第一个结点。
补全代码如下:
```c
double fun(STREC *h)
{
double max = h->next->s; // 假设第一个节点的值为最大值
STREC *p = h->next->next; // 从第二个节点开始遍历
while (p != NULL) {
if (p->s > max) { // 如果当前节点的值比最大值大,则更新最大值
max = p->s;
}
p = p->next;
}
return max;
}
```
思路解析:
首先,在主函数中创建一个带头节点的链表,并用输入的成绩初始化它。
然后在 `fun` 函数中,从第二个节点开始遍历整个链表,假设第一个节点的值为最大值。在遍历的过程中,如果当前节点的值比最大值大,则更新最大值。最后返回最大值即可。
需要注意的是,如果链表为空,程序可能会出现异常。因此,在实际使用中,应该对链表为空的情况进行特殊处理。
阅读全文