用单链表实现一元多项式相加 C++代码

#include <iostream>using namespace std; /*结点的定义*/typedef struct LNode{float coef;int exp;struct LNode *next;}LNode;typedef LNode *Polynomial;/*多项式的初始化*/void initDuoX(Polynomial &Px){Px=new LNode;Px->next=NULL;}/*用正序插入法建立多项式*/void creatDuoX(Polynomial &Px,int n){initDuoX(Px);LNode *p,*q;p=Px;for(int i=0;i<n;i++){q=new LNode;cin>>q->coef>>q->exp;q->next=NULL;p->next=q;p=q;}}/*求多项式的长度*/int lengthDuoX(Polynomial &Px){LNode *p;int count;p=Px->next;count=0;while(p!=NULL){p=p->next;count++;}return count;} /*输出多项式*/void outputDuoX(Polynomial &Px){LNode *p;p=Px->next;int i;for(i=0;i<lengthDuoX(Px);i++){cout<<p->coef<<" "<<p->exp<<" ";p=p->next;}cout<<endl;}/*多项式相加*/LNode * addDuoX(Polynomial &Pa,Polynomial &Pb){LNode *p,*q;LNode *prep;//prep指向p的前驱。LNode *u;p=Pa->next;q=Pb->next;//p、q分别指向多项式的第一项。prep=Pa;//因为是Pb加到Pa上,所以此处不需要使用q的前驱。while (p&&q){if(p->exp<q->exp)//第一种情况,指针只需后移。{prep=p;p=p->next;}else if(p->exp > q->exp)//第二种情况,将q结点插入到p结点之前。{u=q->next;q->next=p;prep->next=q;prep=q;q=u;}else//第三种情况,,系数进行相加。{p->coef=p->coef+q->coef;if(p->coef==0)//系数相加等于0{LNode *temp1;LNode *temp2;temp1=p;temp2=q;prep->next=p->next;p=p->next;q=q->next;delete temp1;//这里不能直接释放p结点。delete temp2;}else{LNode *temp2;temp2=q;prep=p;p=p->next;q=q->next;delete temp2;}}}if(q)prep->next=q;delete Pb;return Pa;}void main(){Polynomial Pa,Pb,Pc;creatDuoX(Pa,4);creatDuoX(Pb,5);Pc=addDuoX(Pa,Pb);outputDuoX(Pc);}

总体上来说,虽然是两个多项式相加,但两个多项式的地位是不一样的。是Pb加到Pa上,所以对两个多项式的处理也不一样。

虽然是照着算法写这个程序,可是还是费了老大的劲,才把它写出来,而且还出错了!经过调试之后,测试了一组数据,呵呵,正确!为确保万无一失,再测一组,呜呜,错了!所以写了程序,要多测几组数据 ,才能确保万无一失。

写这个程序没有学到多少新的东西,但是让我对单链表有了更深的理解,并且能够更加牢固的掌握它!嘿嘿,自己要加油啊!!!

写程序,写程序,乐在其中!!!

PS:另外推荐一个让大家真正练手的网站:猪八戒威客网,在这里可以按自己的能力去接一些程序设计的任务。我觉得这是一种很不错的学习方法,当你接了别人的任务,无形中就给了自己压力和动力,然后就会主动的去查询资料,分析问题,可能会历经艰辛才能解决问题,但这中间的过程是很珍贵的,你会通过自己的努力学到很多课本上没有学到的东西,也能过一回需求分析的瘾,真实的体会到和客户进行交流的诸多“纠结”,最后,如果你的努力得到客户的认可,可以获得一笔小小的佣金,当做对自己的奖励,更重要的是,通过做任务,你能体会到自己存在的价值感和对自己能力的肯定!

而消极的人则在每个机会都看到某种忧患。

用单链表实现一元多项式相加 C++代码

相关文章:

你感兴趣的文章:

标签云: