版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/benzhaohao/article/details/79570892
思路:
多项式结点类描述:(Node结点,Linklist类的描述在创建单链表的文章已经实现)
public class PolynNode {
public double coef; //系数
public int expn; //指数
public PolynNode(double coef,int expn){ //构造函数
this.coef=coef;
this.expn=expn;
}
}
多项式类的描述:
import java.util.Scanner;
public class PolynList extends Linklist{ //多项式类继承Linklist单链表
public PolynList(int n)throws Exception{ //创建多项式有序链表
Scanner sc=new Scanner(System.in); //构造用于输入的对象
head.data=new PolynNode(0,-1); //初始化头结点
for(int i=0;i<n;i++){ //输入n个结点的数据域的值
double coef=sc.nextDouble(); //系数值
int expn=sc.nextInt(); //指数值
insert(i,new PolynNode(coef,expn)); //插入到有序链表中
}
}
//多项式加法,qa=qa+qb 利用两个多项式的结点构成“和多项式”,并返回LA
public PolynList addPolynList(PolynList LA,PolynList LB)throws Exception{
Node ha=LA.head;
Node qa=LA.head.next;
Node qb=LB.head.next;
while(qa!=null&&qb!=null){
PolynNode a=(PolynNode)qa.data; //将Node类强制转换为PolyNode类
PolynNode b=(PolynNode)qb.data;
if(a.expn<b.expn){ //如果a的指数小于b的指数
ha.next=qa;
ha=qa;
qa=qa.next;
}
else if(a.expn>b.expn){
ha.next=qb;
ha=qb;
qb=qb.next;
}
else{
double sum=a.coef+b.coef;
if(sum!=0){
a.coef=sum;
ha.next=qa;
ha=qa;
qa=qa.next;
qb=qb.next;
}
else{
qa=qa.next;
qb=qb.next;
}
}
}
ha.next=(qa!=null?qa:qb); //插入剩余结点
return LA;
}
public static void main(String[] args)throws Exception{
System.out.println("输入多项式A各项的系数和指数");
PolynList LA=new PolynList(4);
System.out.println("输入多项式B各项的系数和指数");
PolynList LB=new PolynList(3);
LA.addPolynList(LA, LB); //对多项式LA,LB求和,并赋给LA
System.out.println("求和后多项式各项为");
LA.display(); //打印LA中的项
}
public void display(){ //重载父类display()方法
for(int i=0;i<length();i++){
try{
PolynNode e=(PolynNode)get(i);
System.out.println("系数为"+e.coef+" 指数为"+e.expn);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
运行结果: