#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float coef;
int exp;
}Term;
typedef struct node
{
Term data;
struct node *next;
}Pnode,*Plink;
void create(Plink *H);
void charu(Plink H,Term x);
void shuchu(Plink H);
void charu(Plink H,Term x)
{
Plink p,q,s;
p=H;
q=p->next;
while(p!=NULL)
{
if(q!=NULL&&p->data.exp<x.exp&&q->data.exp>x.exp)//生成新节点插在p和q之间
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
s->data=x;
s->next=p->next;
p->next=s;
p=p->next;
return;
}
else if(q!=NULL&&q->data.exp==x.exp)//合并同类项
{
if(q->data.coef+x.coef==0) //如果合并后系数为零,删掉
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
p->next=q->next;
return;
}
else
{
s=(Plink)malloc(sizeof(Pnode)); //合并后系数不为零,合并
s->next=NULL;
q->data.coef=q->data.coef+x.coef;
return;
}
}
else if(q==NULL&&q->data.exp<x.exp) //插在最后
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
s->data=x;
q=s;
return;
}
else //寻找插入位置
{
p=p->next;
q=q->next;
}
}
}
void create(Plink *H)
{
int y=1;
(*H)=(Plink)malloc(sizeof(Pnode));
(*H)->data.exp=-1;
(*H)->next=NULL;
Term x;
while(y)
{
printf("请输入系数、指数\n");
scanf("%f",&x.coef);
scanf("%d",&x.exp);
while(getchar()!='\n');
charu(*H,x); //调用插入函数
printf("是否继续?继续 1,结束 0\n");
scanf("%d",&y);
while(getchar()!='\n');
}
}
void shuchu(Plink H)
{
H=H->next;
while(H!=NULL)
{
printf("%f",H->data.coef);
printf("%d\n",H->data.exp);
H=H->next;
}
}
void main()
{
Plink H;
create(&H);
shuchu(H);
}
那么假如幂次相等,系数合并之后=0怎么办?