例: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();
}
}
}
实验结果截图:
该文章仅供复习参考,如果有错误的地方希望大家能多多指正!