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;
}
}
}求第二段程序解释,怎么实现按指数大小找到位置并插入的,越详细越好,谢过~
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;
}
}
}求第二段程序解释,怎么实现按指数大小找到位置并插入的,越详细越好,谢过~
q1=h;
q2=h->next;
while(q2&& p->expn < q2->expn)
{ //查找插入位置
q1=q2;
q2=q2->next;
}
不明白是怎么找到的
链表还未遍历完且P的指数小于当前所遍历到的链表元素的指数,则继续搜索,直到P的指数大于等于链表中某个元素的指数为止。
{ //查找插入位置
q1=q2;
q2=q2->next;//q2移位到下一个节点 ————→
}