逻辑结构设计

根据多项式中每个项指数的大小,按顺序排列而得到的线性结构。(其中数据元素存在“一对一关系”,这种一对一的关系在数据结构中通常由数据元素的“前驱”和“后继”方式进行描述和实现,直观上呈现出“线状”特征,也称线性表。)

存储结构设计

  1. 题目多项式存在多个独立且相互关联组成一个多项式的项,结合逻辑结构,可知用链式存储(分散式存储)最为合适。(使用任意可用的地址空间来存放数据元素本身,数据之间逻辑关系通过附加指针显示实现。这里,地址空间“任意”的含义是指计算机随机分配空闲地址,存储的区域可以是不连续的和零星分布的。此时,存储空间可以根据需要实时申请,当不需要时,也可以释放。在链式存储技术中,数据结点通常分为两个部分,一个是指针域,用来存放数据之间关联的信息;另一个是数据域,用来存放数据本身的值信息。链式存储方式灵活,应用广泛。链式存储是一种基于数据关系的分散式存储)。
  2. 程序使用了带有首尾指针的双向链表来按照各个项指数由小到大顺序存储多项式;链表中非首结点的数据域存放项的系数(double类型)和指数(int类型)、指针域存放前后指针指向该向的前驱和后继结点;首结点数据域存放链表中结点(多项式的项)的个数(int类型)。指针域存放指针指向后继结点(含多项式第一个项的结点)。

主要操作设计

  1. PloyNode类,设计两个数据域,有double类型的系数coef,和int类型的指数expn。分别写他们的geter,seter方法。方便后面直接操作PloyNode存储单项的指数和系数。
  2. 写PloynList类继承自MySingleLink类,MySingleLink类中写了单链表的一些基本方法。而PloynList类主要写了insert(PloynNode)方法,方便后期插入多项式单项节点,并写了show()方法,方便把运算好的多项式展示出到控制台上。
  3. TestPolynList类写了众多静态方法。
    (1) cmp(PloyNode a,PloyNode b)方法用来判断两个节点的指数的大小,方便后面计算时用。
    (2) createPolynList()方法用来创建多项式链表,将用户输入的字符用正则表达式进行拆分成系数、运算符、指数;并在里面按指数升序将每一项的系数和指数存入链表节点中。并返回此链表。
    (3) addPolyn(PolynList LA,PolynList LB)方法是两个多项式相加的方法。通过指针两个多项式链表的头节点往后搜查,由于按照升序,所以找到一样的指数的,就把他们的系数相加。并返回加好之后的链表。
    (4) substract(PolynList LA, PolynList LB) 方法是相减的方法,与加法类似,原理几乎一样。并返回减好之后的链表。
    (5) evaluation(PolynList le, double num)是求值的方法,就是将每个值代入通过for循环将最终结果计算出来。
    (6) derication(PolynList le)求导方法,根据数学求导法则写代码即可。
    (7) sortList(PolynList list)对链表中的节点按指数升序排列的方法,主要用了冒泡排序。

技术难点与解决方法

  1. 每次输入数据若有重复的指数需要处理
    解决方法:
    在创建链表时需要对数据进行重复指数合并处理。创建一个ArrayList保存存过的指数,每次存数据时,需要遍历集合查重,若有重复则需要做合并处理。若不重复,则把此指数放入集合中。
  2. 多项式的输出,对特殊的处理,比如多项式系数等于1.0可省略,指数等于0可直接输出系数等等,虽不难,但情况众多,需要用if-else逐个列举。
//    display()方法public void show() throws Exception {System.out.printf("一共有%d项\n",length());System.out.print("结果为:");for (int i = 0; i < length(); i++) {int expn = ((PloyNode)this.get(i)).expn;double coef = ((PloyNode)this.get(i)).coef;if(i != 0){//非第一项if (coef > 0){if (coef == 1.0){if (expn == 0){System.out.print("+1");}else if(expn == 1){System.out.print("+" +  "X");}else{System.out.print("+" +  "X^" + expn );}}else{if (expn == 0){System.out.print("+" + coef );}else if(expn == 1){System.out.print("+" + coef + "X"  );}else {System.out.print("+" + coef + "X^" + expn );}}}if(coef < 0){if (coef == -1.0) {if (expn == 0){System.out.print("-1");}else if(expn == 1){System.out.print("-" + "X");}else{System.out.print("-" + "X^" + expn);}}else{if (expn == 0){System.out.print(coef);}else if(expn == 1){System.out.print(coef + "X");}else{System.out.print(coef + "X^" + expn );}}}}else{//第一项if (coef == 1.0){if (expn == 0){System.out.print("1");}else if(expn == 1){System.out.print("X");}else{System.out.print("X^" + expn);}}else  if (coef == -1.0){if (expn == 0){System.out.print("-1");}else if(expn == 1){System.out.println("-X");}else{System.out.print("-X^" + expn );}}else{if (expn == 0){System.out.print(coef);}else{System.out.print(coef + "X^" + expn);}}}}System.out.println();}
  1. 实现多项式加减法的算法
    解决思路:由于输入的多项式已经经过排序和同指数幂项合并,所以只需要两个指针分别从两个多项式头节点往后遍历,若不同,先把较小幂的放入新多项式链表,若相同则做加减运算,之后依次遍历,直到一个已经遍历完,可以把另一个全部加入新链表。并返回此链表。
 /*** 多项式加法* **/public static PolynList addPolyn(PolynList LA,PolynList LB){Node ha = LA.getHead();//ha指向新链表的尾戒点Node qa = LA.getHead().getNext();Node qb = LB.getHead().getNext();System.out.println(qb.getData());while(qa != null && qb != null){PloyNode a = (PloyNode)qa.getData();PloyNode b = (PloyNode)qb.getData();switch (cmp(a,b)){case -1:ha.setNext(qa);ha = qa;qa = qa.getNext();break;case 0:double sum = a.coef + b.coef;if (sum != 0.0){a.coef = sum;ha.setNext(qa);ha=qa;qa = qa.getNext();qb = qb.getNext();}else{PloyNode node = new PloyNode(0,0);ha.setNext(new Node(node));qa = qa.getNext();qb = qb.getNext();}break;case 1:if (((PloyNode) qb.getData()).coef==0.0 && ((PloyNode) qb.getData()).expn==0){qb = qb.getNext();break;}ha.setNext(qb);ha = qb;qb = qb.getNext();break;}}while(qa != null){ha.setNext(qa);ha=qa;qa = qa.getNext();}while (qb != null){ha.setNext(qb);qb = qb.getNext();}
//        if (ha.getNext() == null){//            PloyNode node = new PloyNode(0,0);
            ha.setNext(new Node(node));
//        }return LA;}

java链表实现多项式的运算相关推荐

  1. 多项式加法 java 链表_多项式加法,用单链表实现。

    ---恢复内容开始--- #include #include typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//系数 i ...

  2. java list想加_利用java List 实现多项式相加,相乘

    package com.learn.algorithm.ploy; import java.util.LinkedList; import java.util.List; import java.ut ...

  3. 【数据结构笔记07】不带头结点链表实现多项式相加、相乘

    本次笔记内容: 2.4 多项式的加减运算实现 P24 1.题意理解与多项式表示 P25 2.程序框架及读入多项式 P26 3.加法.乘法运算及多项式输出 文章目录 多项式加法运算 采用不带头结点的单项 ...

  4. [题解] BZOJ 3323 多项式的运算

    BZOJ 3323 多项式的运算 题目描述 Description 某天,mzry1992一边思考着一个项目问题一边在高速公路上骑着摩托车.一个光头踢了他一脚,摩托车损坏,而他也被送进校医院打吊针.现 ...

  5. C语言链表求解多项式乘法问题

    C语言链表求解多项式乘法问题 解决多项式乘法问题最容易想到的就是将乘法运算转换为加法运算.从p1的第一项开始,依此乘以p2的每一项,合并同类项后放入结果多项式中.然而项数太多时,合并同类项的过程过于复 ...

  6. 基础数据结构【四】————环形链表与多项式

    主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...

  7. 用c语言链表编写便利店零售系统,链表实现多项式求和(C语言)

    链表实现多项式求和(C语言)0 aebgt2013.06.26浏览270次分享举报 1 多项式求和中两个链表合并问题,请各位大侠帮忙啊 #include #include typedef struct ...

  8. matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt

    * 多项式运算与代数方程求解 数学软件 Matlab Matlab基础及应用 * 多项式转化为符号表达式:poly2sym 四则运算:conv.deconv 导数与积分:ployder.polyint ...

  9. 链表应用 多项式相加

     用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 ...

  10. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

最新文章

  1. linux 命令详解 二十七
  2. 蓝桥杯国赛-估计人数
  3. C语言指出下列程序的错误,2012年计算机二级C语言精编教程第二章(8)
  4. Common-lang包中StringUtils用法
  5. DataWorks功能实践速览 — 参数透传
  6. mysql mariadb并存_MariaDB与MySQL并存
  7. 包装类 java 1615210339
  8. Git部署远程仓库至github
  9. 测试心得:细说从逻辑到数据的用例设计
  10. mysql使用存储过程循环修改数据
  11. Indesign CS6怎么添加框线_InDesign用插件快速给文本文字添加拼音的方法
  12. 随机森林回归树官方例子小结
  13. qt超级马里奥_探索《超级马里奥》 35周年选集
  14. Stellarium(虚拟天文馆)
  15. 找不到设备 将计算机连接到USB打印机,打印机连接电脑没反应怎么办
  16. 慕课网风袖小程序 一一第一阶段
  17. oracle 裸金属,通过裸金属服务部署Oracle RAC (五)Oracle RAC的备份
  18. TMT: A Transformer-based Modal Translator for Improving Multimodal Sequence Representations in Audio
  19. msf之使用震网三代来提权
  20. 云计算大数据学习中心作业8

热门文章

  1. zhuti——志玲娇情win7美女主题
  2. svn服务器文件保存位置,Windows 部署SVN服务器
  3. pdf转word工具内含注册码【pdf转word】
  4. 现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
  5. duilib开发(七):复杂控件介绍
  6. 读取日志时发生乱码的解决方法
  7. 怎么把word目录里面的“目录”两个字去掉
  8. 使用PGP加密你的文件
  9. HTML居中对齐与垂直居中
  10. Chrome浏览器下载zoom录像