数据结构(2)-JAVA- 多项式相加

例:A=2+3x+5x3+2x4 B=3+2x+4x2
求:C=A+B

项目结构:
在这里插入图片描述
PolyList:多项式链表
PolyNode:多项式结点类型
Test:测试类

PolyNode:

public class PolyNode {//A=2X1+3X2+4X3
 //系数coef
 int coef;
 //指数exp
 int exp;
 //指针next
 public PolyNode next;
 
 //构造方法
 public PolyNode(int coef, int exp) {
  super();
  this.coef = coef;
  this.exp = exp;
  this.next=null;
 }
}

PolyList:

public class PolyList {
//属性
 private PolyNode head;//头指针 head

//构造方法:创建头结点
 public PolyList(){
  head = new PolyNode(0,-1);
 }

 public PolyNode getHead() {
  return head;
 }
 
 public void setHead(PolyNode head) {
  this.head = head;
 }
 
 //创建多项式链表creat,按照指数递增创建   
 public void creat() throws Exception{
  //声明变量
  PolyNode s,p;//s为新结点,p为插入位置
  //输入系数和指数
  int c,e;
  Scanner input = new Scanner(System.in);
  System.out.print("请输入系数和指数:");
  c=input.nextInt();
  e=input.nextInt();
  while(c!=0){//判断系数的合法性
   //确定插入位置
   s=new PolyNode(c,e);
   int j=1;
   p=head.next;
   while(j<=length()){
    if(s.exp>p.exp){
     p=p.next;
     j++;
    }else
     break;
   }
   p=(PolyNode)get(j-1);//查找插入位置的前一个结点
   s.next=p.next;//修改指针
   p.next=s;
   //输入系数和指数
   System.out.print("请输入系数和指数:");
   c=input.nextInt();
   e=input.nextInt();
  }
  }
  
 //求链表长度length  node改成Polynode
 public int length(){
  PolyNode p=head.next;
  int length=0;
  while(p!=null){
   p=p.next;
   ++length;
  }
  return length;
 }
 
//按照序号查找结点get
 public PolyNode get(int i) throws Exception{
  int j = 0;
  PolyNode p = head;
  while (p.next != null && j < i) {
   p = p.next;
   j++;
  }
  if (j<i) throw new Exception("第" + i + "个元素不存在");
  return p;
 }

//显示多项式display,格式。。。。。
 public void display(){
  // TODO Auto-generated method stub
  PolyNode p = head.next;
  while (p != null) {
   if (p == head.next) {
    System.out.print(p.coef+"x"+p.exp);
   } else
    System.out.print("+"+p.coef+"x"+p.exp);
   p = p.next;// 取下一个结点
  }
 }
}

Test:

public class Test {
// 多项式加法运算 polyAdd
 // qa
 // A=2x+3x3+4x5
 // qb
 // B=-2x+4x2+5x3+6x7
 // qc
 // C=4x2+8x3+4x5+6x7
 public PolyList polyAdd(PolyList A, PolyList B) {
  PolyList C = new PolyList();
  PolyNode qa = A.getHead().next;
  PolyNode qb = B.getHead().next;
  PolyNode qc = C.getHead();
  while (qa != null && qb != null) {// qa和qb均非空
   if (qa.exp == qb.exp) {// 指数相等
    int x = qa.coef + qb.coef;// 系数相加
    if (x != 0) {// 系数相加结果不等于0
     // 把结点添加到多项式C
     qc.next = new PolyNode(x, qa.exp);
     qc = qc.next;
    } // qa和qb后移
    qa = qa.next;
    qb = qb.next;
    } else if (qa.exp < qb.exp) {
    // 把qa对应项添加到C中
    qc.next = new PolyNode(qa.coef, qa.exp);
    qa = qa.next;
    qc = qc.next;
   } else {
    // 把qb对应项添加到C中
    qc.next = new PolyNode(qb.coef, qb.exp);
    qb = qb.next;
    qc = qc.next;
   }
  }
  while (qa != null) {// qa非空
   qc.next = new PolyNode(qa.coef, qa.exp);
   qc = qc.next;
   qa = qa.next;
  }
  while (qb != null) {// qb非空
   qc.next = new PolyNode(qb.coef, qb.exp);
   qc = qc.next;
   qb = qb.next;
  }
  return C;
 }
 
 /**测试类
  * @param args
  */
  public static void main(String[] args) {
  try {
   // 创建多项式A
   PolyList A = new PolyList();
   A.creat();
   System.out.print("多项式A=");
   A.display();// 显示多项式A
   System.out.println("");
   // 创建多项式B
   PolyList B = new PolyList();
   B.creat();
   System.out.print("多项式B=");
   B.display();// 显示多项式B
   System.out.println("");
   // 多项式相加C=A+B
   Test t = new Test();
   PolyList C = t.polyAdd(A, B);
   System.out.println("打印的结果如下:");
   C.display();// 显示结果C
   } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

实验结果截图:

在这里插入图片描述

该文章仅供复习参考,如果有错误的地方希望大家能多多指正!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你白勺男孩TT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值