typedef struct Polynomial{
    float               coef;     //系数
    int                 expn;     //指数
    struct Polynomial  *next;
}*Polyn,Polynomial;
Polyn CreatePolyn(Polyn head,int m){                 //建立一个头指针为head、项数为m的一元多项式
    int     i;
    Polyn   p;
    p=head=(Polyn)malloc(sizeof(struct Polynomial));
    head->next=NULL;
    for(i=0;i<m;i++)
{
        p=(Polyn)malloc(sizeof(struct Polynomial));  //建立新结点以接收数据
        printf("请输入第%d项的系数与指数:",i+1);
        scanf("%f %d",&p->coef,&p->expn);
        Insert(p,head);                              //调用Insert函数插入结点
}
    return head;
}
void Insert(Polyn p,Polyn h){     
    if(p->coef==0) free(p);       //系数为0的话释放结点
    else
{
        Polyn q1,q2;
        q1=h;
q2=h->next;
        while(q2&& p->expn < q2->expn)
{                        //查找插入位置
            q1=q2;
            q2=q2->next;
}
        if(q2&& p->expn == q2->expn)
{                        //将指数相同相合并
            q2->coef += p->coef;
            free(p);
            if(!q2->coef)
{                    //系数为0的话释放结点
                q1->next=q2->next;
                free(q2);
}
}
        else
{                       //指数为新时将结点插入
            p->next=q2;
            q1->next=p;
}
}
}求第二段程序解释,怎么实现按指数大小找到位置并插入的,越详细越好,谢过~

解决方案 »

  1.   

     Polyn q1,q2;
      q1=h;
    q2=h->next;
      while(q2&& p->expn < q2->expn)
    { //查找插入位置
      q1=q2;
      q2=q2->next;
    }
    不明白是怎么找到的
      

  2.   

    while(q2&& p->expn < q2->expn)
    链表还未遍历完且P的指数小于当前所遍历到的链表元素的指数,则继续搜索,直到P的指数大于等于链表中某个元素的指数为止。
      

  3.   

      while(q2&& p->expn < q2->expn)           //↑q2有效且指数大于需要添加的数据,继续移位,直到结尾                                     或找到对应的位置
    { //查找插入位置
      q1=q2;
      q2=q2->next;//q2移位到下一个节点  ————→
    }