Java链表练习实现一元多项式的加法

来源:互联网 发布:log4j.xml 输出sql 编辑:程序博客网 时间:2024/05/18 00:33

链表的实现在之前写过了,就不再写了

将链表的数据域赋值为多项式结点类


多项式结点类:

package polynomialOfOneIndeterminate;public class PolynNode {public double coef;//系数public int expn;//指数public PolynNode(double coef,int expn) {this.coef=coef;this.expn=expn;}}

多项式类:

package polynomialOfOneIndeterminate;import java.util.Scanner;import com.sun.javafx.font.freetype.HBGlyphLayout;import com.sun.org.apache.bcel.internal.generic.AALOAD;import linearList.LinkList;import linearList.Node;//多项式类继承单链表public class PolynList extends LinkList {// 创建多项式有序链表public PolynList(int n) throws Exception {head.data = new PolynNode(0, -1);// 初始化头结点Scanner sc = new Scanner(System.in);// 构造用于输入的对象for (int i = 1; i <= n; i++) {double coef = sc.nextDouble();int expn = sc.nextInt();insert(new PolynNode(coef, expn));// 插入到有序链表}}public void insert(PolynNode pn) throws Exception{int j=0;while(j<length()){//与有序链表中的已有项进行指数比较PolynNode e=(PolynNode)get(j);if(pn.expn<e.expn){break;}j++;}insert(j, pn);//调用父类的插入函数}//判定函数,比较指数,a小于b返-1,a等于b返回0,a大于b返回1;public int cmp(PolynNode a,PolynNode b){//a和b的指数相比较if(a.expn>b.expn){return 1;}else if(a.expn==b.expn){return 0;}else {return -1;}}//多项式加法,Pa=Pa+Pb,利用两个多项式的结点构成“和多项式”,并返回LApublic PolynList addPolyn(PolynList LA,PolynList LB){Node ha=LA.head;//ha指向新形成链表的尾结点Node qa=LA.head.next;//qa指向LA中需要计算的当前项Node qb=LB.head.next;//qb指向LB中需要计算的当前项while(qa!=null&&qb!=null){PolynNode a=(PolynNode)qa.data;PolynNode b=(PolynNode)qb.data;switch (cmp(a, b)) {case -1:ha.next=qa;ha=qa;qa=qa.next;break;case 0:double sum=a.coef+b.coef;if(sum!=0.0){a.coef=sum;ha.next=qa;ha=qa;qa=qa.next;qb=qb.next;}else {qa=qa.next;qb=qb.next;}break;case 1:ha.next=qb;ha=qb;qb=qb.next;break;}}ha.next=(qa.next==null)?qb:qa;//插入剩余结点return LA;}//重载父类public void 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();}}}public static void main(String[] args) throws Exception{Scanner sc=new Scanner(System.in);System.out.println("请输入A多项式的项数:");int na=sc.nextInt();System.out.println("请分别输入A多项式的系数和指数:");PolynList LA=new PolynList(na);System.out.println("请输入B多项式的项数:");int nb=sc.nextInt();System.out.println("请分别输入A多项式的系数和指数:");PolynList LB=new PolynList(nb);LA=LA.addPolyn(LA, LB);LA.display();}}

示例运行:

请输入A多项式的项数:
5
请分别输入A多项式的系数和指数:
3 0
4 1
7 8
2 18
1 30
请输入B多项式的项数:
3
请分别输入A多项式的系数和指数:
5 1
6 3
-7 8
系数为:3.0指数为0
系数为:9.0指数为1
系数为:6.0指数为3
系数为:2.0指数为18
系数为:1.0指数为30

0 0
原创粉丝点击