数据结构的一元稀疏多项式代码,在插入过程中的循环,没转过弯来,望有大神提点!

void Insert(Polyn p,Polyn head){

if(p->coef==0)

free(p); //若p的系数为0则释放结点
else
{

Polyn q1,q2;
q1=head;
q2=head->next;

while(q2&& p->expn > q2->expn)

        {                         //查找p的插入位置
           q1=q2;               //确定输出的多项式为升幂排列
           q2=q2->next; 
        }  
     if(q2&& p->expn == q2->expn)  
        {                         //若输入的指数相同,则合并同类项
           q2->coef += p->coef; 
           free(p);  
           if(q2->coef==0)     //q2项系数为0时,直接插入
              {                     
                q1->next=q2->next; 
                free(q2); 
              } 
        }  
    else  
        {                       //指数为新时将结点插入
           p->next=q2; 
           q1->next=p; 
        } 
 } 

}

1个回答

不知道你是哪里转不过弯?注释的挺清楚的啊.
1.首先while循环找到待插入的位置
2.判断找到的位置的expn和p的expn是不是一样的,一样的话系数相加就好(如果相加以后变成0了就删除掉这个项)
3.原来的多项式没有和待插入的p的expn一样的,说明待插入的p的expn是最大的,直接在多项式尾部插入p

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐