辅导:Java用单链表实现多项式加减乘
来源:优易学  2011-10-22 9:53:26   【优易学:中国教育考试门户网】   资料下载   IT书店
  用单链表来实现多项式的加减乘,除就不做了,代码如下
  public class Polynomial {
  private Monomial first; // 首项
  //添加单项式
  public void append(Monomial monomial) {
  if (monomial == null) {
  // do nothing
  } else if (first == null) {
  first = monomial;
  } else {
  Monomial current = first;
  while (current != null) {
  // 青年人网站提示:如果指数相同,则相加
  if (current.index == monomial.index) {
  current.coefficient += monomial.coefficient;
  break;
  } else if (current.next == null) { // 否则直接扔到最后
  current.next = monomial;
  break;
  }
  current = current.next;
  }
  }
  }
  public void append(double c, int i) {
  append(new Monomial(c, i));
  }
  public String toString() {
  StringBuffer sb = new StringBuffer();
  Monomial current = first;
  while (current.next != null) {
  sb
  .append("(" + current.coefficient + "x^" + current.index
  + ") + ");
  current = current.next;
  }
  sb.append("(" + current.coefficient + "x^" + current.index + ")");
  return sb.toString();
  }
  // 两个多项式相加
  public Polynomial add(Polynomial p2) {
  Polynomial result = new Polynomial();
  Monomial current = this.first;
  while (current != null) {
  result.append(current.coefficient, current.index); // 青年人网站提示:注意这里
  current = current.next;
  }
  current = p2.first;
  while (current != null) {
  result.append(current.coefficient, current.index);
  current = current.next;
  }
  return result;
  }
  // 两个多项式相减 this- p2
  public Polynomial substract(Polynomial p2) {
  Polynomial result = new Polynomial();
  Monomial current = this.first;
  while (current != null) {
  result.append(current.coefficient, current.index); // 注意这里
  current = current.next;
  }
  current = p2.first;
  while (current != null) {
  result.append(-current.coefficient, current.index);
  current = current.next;
  }
  return result;
  }
  /**
  * this * p2
  *
  * @return
  */
  public Polynomial multiply(Polynomial p2) {
  Polynomial result = new Polynomial();
  Monomial c1 = this.first;
  Monomial c2 = p2.first;
  while (c1 != null) {
  while (c2 != null) {
  result.append(c1.coefficient * c2.coefficient, c1.index
  + c2.index);
  c2 = c2.next;
  }
  c1 = c1.next;
  c2 = p2.first;
  }
  return result;
  }
  public Polynomial divide(Polynomial p2) {
  // todo 实现相除
  return null;
  }
  public static void main(String[] args) {
  Polynomial p1 = new Polynomial();
  p1.append(2.2, 1);
  p1.append(3.3, 2);
  p1.append(4.111, 7);
  System.out.println("p1: " + p1);
  Polynomial p2 = new Polynomial();
  p2.append(2.232, 5);
  p2.append(3.444, 6);
  p2.append(5.777, 1);
  System.out.println("p2: " + p2);
  Polynomial result = p1.add(p2);
  System.out.println("加: " + result);
  result = p1.substract(p2);
  System.out.println("减: " + result);
  result = p1.multiply(p2);
  System.out.println("乘: " + result);
  }
  }
  /**
  * 单项式
  */
  class Monomial {
  double coefficient; // 系数
  int index; // 指数
  Monomial next; // 后继结点
  public Monomial() {
  }
  public Monomial(double c, int i) {
  this.coefficient = c;
  this.index = i;
  }
  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训