Java 用单链表实现多项式加减乘

用单链表来实现多项式的加减乘,除就不做了,代码如下
  1. public class Polynomial {
  2.     private Monomial first; // 首项
  3.     //添加单项式
  4.     public void append(Monomial monomial) {
  5.         if (monomial == null) {
  6.             // do nothing
  7.         } else if (first == null) {
  8.             first = monomial;
  9.         } else {
  10.             Monomial current = first;
  11.             while (current != null) {
  12.                 // 如果指数相同,则相加
  13.                 if (current.index == monomial.index) {
  14.                     current.coefficient += monomial.coefficient;
  15.                     break;
  16.                 } else if (current.next == null) { // 否则直接扔到最后
  17.                     current.next = monomial;
  18.                     break;
  19.                 }
  20.                 current = current.next;
  21.             }
  22.         }
  23.     }
  24.     public void append(double c, int i) {
  25.         append(new Monomial(c, i));
  26.     }
  27.     public String toString() {
  28.         StringBuffer sb = new StringBuffer();
  29.         Monomial current = first;
  30.         while (current.next != null) {
  31.             sb
  32.                     .append("(" + current.coefficient + "x^" + current.index
  33.                             + ") + ");
  34.             current = current.next;
  35.         }
  36.         sb.append("(" + current.coefficient + "x^" + current.index + ")");
  37.         return sb.toString();
  38.     }
  39.     // 两个多项式相加
  40.     public Polynomial add(Polynomial p2) {
  41.         Polynomial result = new Polynomial();
  42.         Monomial current = this.first;
  43.         while (current != null) {
  44.             result.append(current.coefficient, current.index); // 注意这里
  45.             current = current.next;
  46.         }
  47.         current = p2.first;
  48.         while (current != null) {
  49.             result.append(current.coefficient, current.index);
  50.             current = current.next;
  51.         }
  52.         return result;
  53.     }
  54.     // 两个多项式相减 this- p2
  55.     public Polynomial substract(Polynomial p2) {
  56.         Polynomial result = new Polynomial();
  57.         Monomial current = this.first;
  58.         while (current != null) {
  59.             result.append(current.coefficient, current.index); // 注意这里
  60.             current = current.next;
  61.         }
  62.         current = p2.first;
  63.         while (current != null) {
  64.             result.append(-current.coefficient, current.index);
  65.             current = current.next;
  66.         }
  67.         return result;
  68.     }
  69.     /**
  70.      *  this * p2
  71.      * 
  72.      * @return
  73.      */
  74.     public Polynomial multiply(Polynomial p2) {
  75.         Polynomial result = new Polynomial();
  76.         Monomial c1 = this.first;
  77.         Monomial c2 = p2.first;
  78.         while (c1 != null) {
  79.             while (c2 != null) {
  80.                 result.append(c1.coefficient * c2.coefficient, c1.index
  81.                         + c2.index);
  82.                 c2 = c2.next;
  83.             }
  84.             c1 = c1.next;
  85.             c2 = p2.first;
  86.         }
  87.         return result;
  88.     }
  89.     public Polynomial divide(Polynomial p2) {
  90.         // todo 实现相除
  91.         return null;
  92.     }
  93.     public static void main(String[] args) {
  94.         Polynomial p1 = new Polynomial();
  95.         p1.append(2.21);
  96.         p1.append(3.32);
  97.         p1.append(4.1117);
  98.         System.out.println("p1: " + p1);
  99.         Polynomial p2 = new Polynomial();
  100.         p2.append(2.2325);
  101.         p2.append(3.4446);
  102.         p2.append(5.7771);
  103.         System.out.println("p2: " + p2);
  104.         Polynomial result = p1.add(p2);
  105.         System.out.println("加: " + result);
  106.         result = p1.substract(p2);
  107.         System.out.println("减: " + result);
  108.         result = p1.multiply(p2);
  109.         System.out.println("乘: " + result);
  110.     }
  111. }
  112. /**
  113.  * 单项式
  114.  */
  115. class Monomial {
  116.     double coefficient; // 系数
  117.     int index; // 指数
  118.     Monomial next; // 后继结点
  119.     public Monomial() {
  120.     }
  121.     public Monomial(double c, int i) {
  122.         this.coefficient = c;
  123.         this.index = i;
  124.     }
  125. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值