多项式的加法运算实现
实现多项式的加法,通过链表数据结构编写
struct PolyNode
{
int coef//系数项
int expon; //指针项
PolyNode Next;
}
typedef struct PolyNode *Polynominal;
Polynominal P1,P2;
Polynominal PolyAdd(Polynominal P1,Polynaminal P2)
{
Polynominal front,rear,temp;
//创建一个result的用来存放最终多项式P1+P2的最终结果
rear = (PolyNode)malloc((instruct PolyNode));
front = rear;
while(P1&P2)
{
switch(Compare(P1->EXPON,p2->expon))
{
case 1: //P1->指数项高
Attach(P1->coef,P1->expon,&rear);
P1=P1->link;
break;
case -1: //P2->指数项高
Attach(P2->coef,P2->expon,&rear);
P2=P2->link;
break;
case 0: //P1->指数项高
Attach(P1->coef+P2->coef,P1->expon,&rear);
P1=P1->link;
P2=P2->link;
break;
}
}
for(;P1;P1=P1->link) Attach(P1->coef,P1->EXPON,&rear);
for(;P2;P2=P2->link) Attach(P2->coef,P2->EXPON,&rear);
temp = front;
front = front->link;
free(temp);
return front;
}
PolyNominal Attach(int coef,int expon,Polynominal *Prear) //Prear 是一个指针,*Prear代表传进来第一个指针的地址
{
Polynominal P;
p->coef = coef;
p->expon = expon;
p->link = NULL;
(*Prear)->link = P;
*Prear = p
}
这里解释一下:为什么最后一行用PRear而不是PRear:
划重点:涉及重点:理解传值引用和调用引用。
函数调用中为变量赋值,传入其指针,但是如果想让传入指针的数值改变的话,我们需要传入指针的指针。
pRear=P:在这里PRear只是rear指针的复制版本,PRear的改变,变成P的地址以后,并没有对rear的地址进行任何的修改------这里只是进行了上一句话:函数调用为变量赋值,传入其指针这一句话。但是PRear并没有指向rear的指针(地址)
如果想要改变rear的地址,那么需要将rear的真实地址传入而不是rear的复制地址
但是传入rear的真实地址必须是(&rear)这个**(&rear)(*PRear)**这样理解PRear表示传入的rear这个指针的地址赋值给了PRear,然后前边加上*表示PRear现在与rear共享地址==
如果觉得解释好可以三连。
本人才疏学浅,希望大家不足指正。