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

admin2020-10-26  41

问题 下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正程序指定部位的错误,使它能得到正确结果。
    注意:
    不要改动main函数,不得增行或删行,也不得更改程序的结构。
    【试题源程序】
    #include
    #include
    typedef struct aa,
    {
    int data;
    struct aa*next:
    }NODE;
    fun(NODE*h)
    {
    int max=-1:
    NODE*p;
    /***********found**********/
    p=h;
    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,"\nTHE LIST:\n\nHEAD");
    while(P)
    {
    fprintf(pf,"->%d",P->data);p=p->next;
    }
    fprintf(pf,"\n");
}
main()
{
NODE*head;int m;
    head=creatlink(12,100);
    outlink(head,stdout);
    m=fun(head);
    printf("\nTHE RESULT:\n");
    outresult(m,stdout);
    }

选项

答案(1)错误:p=h; 正确:p=h->next; (2)错误:p=h->next; 正确:p=p->next;

解析 程序中使用while循环语句,并结合结构体指针p来找到数据域中的最大值。
错误(1):p指向形参结构体指针h的next指针,所以应改为:p=h->next;
错误(2):p指向自己的下一个结点,所以应改为:p=p->next;
转载请注明原文地址:https://jikaoti.com/ti/ZzD0FFFM
0

最新回复(0)