比如:怎样实现用线性链表表示多项式的加法运算?

依据一元多项式相加的运算规则:对于两个一元多项式中全部指数同样的项。相应系数相加,若其和不为零,则构成“和多项式”中的一项。对于两个一元多项式中全部指数不同样的项,则分别复抄到“和多项式”中去。

#include

#include

#include

typedef struct polyn

{

float coef;

int expn;

struct polyn* next;

}PolyNode,*PLinkList;

PLinkList CreatePolyn();//创建一元多项式,使一元多项式呈指数递减

void OutPut(PLinkList head);//输出一元多项式

PLinkList Addition(PLinkList L1,PLinkList L2);//多项式的加法

PLinkList Subtraction(PLinkList L1,PLinkList L2);//多项式的减法

PLinkList Reverse(PLinkList head);//将生成的链表逆置。使一元多项式呈指数递增形式

PLinkList MultiplyPolyn(PLinkList L1,PLinkList L2);//多项式的乘法

#include "test.h"

PLinkList CreatePolyn()//创建一元多项式。使一元多项式呈指数递减

{

PolyNode *p,*q,*s;

PolyNode *head = NULL;

int expn2;

float coef2;

head = (PLinkList)malloc(sizeof(PolyNode));//动态生成头结点

if(!head)

{

return NULL;

}

head->coef = 0.0;//初始化

head->expn = 0;

head->next = NULL;

do

{

printf("输入系数coef(系数和指数都为0结束)");

scanf("%f",&coef2);

printf("输入指数数exp(系数和指数都为0结束)");

scanf("%d",&expn2);

if((long)coef2 == 0 && expn2 == 0)

{

break;

}

s = (PLinkList)malloc(sizeof(PolyNode));

if(!s)

{

return NULL;

}

s->expn = expn2;

s->coef = coef2;

q = head->next ;

p = head;

while(q && expn2 < q->expn)

{

p = q;

q = q->next ;

}

if(q == NULL || expn2 > q->expn)

{

p->next = s;

s->next = q;

}

else

{

q->coef += coef2;

}

}while(1);

return head;

}

void OutPut(PLinkList head)//输出一元多项式

{

PolyNode *p = head->next ;

while(p)

{

printf("%1.1f",p->coef);

if(p->expn)

{

printf("*x^%d",p->expn);

}

if(p->next && p->next->coef > 0)

{

printf("+");

}

p = p->next ;

}

}

PolyNode *Addition(PLinkList L1,PLinkList L2)//多项式的加法

{

PolyNode *pa,*pb,*pc,*u,*head;

head = (PLinkList)malloc(sizeof(PolyNode));

if(!head)

{

return NULL;

}

head->coef = 0.0;

head->expn = 0;

head->next = NULL;

pc = head;

L2 = Reverse(L2);

pa = L1->next ;

pb = L2->next ;

while(pa != NULL && pb != NULL)

{

if(pa->expn == pb->expn)

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pa->coef + pb->coef ;

u->expn = pa->expn ;

pa = pa->next ;

pb = pb->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

else if(pa->expn > pb->expn)

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pa->coef ;

u->expn = pa->expn ;

pa = pa->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

else

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pb->coef ;

u->expn = pb->expn ;

pb = pb->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

}

L2 = Reverse(L2);

return head;

}

PolyNode *Subtraction(PLinkList L1,PLinkList L2)//多项式的减法

{

PolyNode *pa,*pb,*pc,*u,*head;

head = (PLinkList)malloc(sizeof(PolyNode));

if(!head)

{

return NULL;

}

head->coef = 0.0;

head->expn = 0;

head->next = NULL;

pc = head;

pa = L1->next ;

pb = L2->next ;

while(pa != NULL && pb != NULL)

{

if(pa->expn == pb->expn)

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pa->coef - pb->coef ;

u->expn = pa->expn ;

pa = pa->next ;

pb = pb->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

else if(pa->expn > pb->expn)

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pa->coef ;

u->expn = pa->expn ;

pa = pa->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

else

{

u = (PLinkList)malloc(sizeof(PolyNode));

if(!u)

{

return NULL;

}

u->coef = pb->coef ;

u->expn = pb->expn ;

pb = pb->next ;

u->next = pc->next ;

pc->next = u;

pc = u;

}

}

return head;

}

PolyNode *Reverse(PLinkList head)//将生成的链表逆置,使一元多项式呈指数递增形式

{

PolyNode *q,*r,*p = NULL;

q = head->next ;

while(q)

{

r = q->next ;

q->next = p;

p = q;

q = r;

}

head->next = p;

return head;

}

PolyNode *MultiplyPolyn(PLinkList L1,PLinkList L2)//多项式的乘法

{

PolyNode *pa,*pb,*pc,*u,*head;

int k,maxExp;

float coef;

head = (PLinkList)malloc(sizeof(PolyNode));

if(!head)

{

return NULL;

}

head->coef = 0.0;

head->expn = 0;

head->next = NULL;

if(L1->next != NULL && L2->next != NULL)

{

maxExp = L1->next->expn +L2->next->expn ;

}

else

{

return head;

}

pc = head;

L2 = Reverse(L2);

for(k = maxExp;k >= 0;k--)

{

pa = L1->next ;

while(pa != NULL && pa->expn > k)

{

pa = pa->next ;

}

pb = L2->next ;

while(pb != NULL && pa != NULL && pa->expn+pb->expn < k)

{

pb= pb->next ;

}

coef = 0.0;

while(pa != NULL && pb != NULL)

{

if(pa->expn +pb->expn == k)

{

coef += pa->coef *pb->coef ;

pa = pa->next ;

pb = pb->next ;

}

else if(pa->expn +pb->expn > k)

{

pa = pa->next ;

}

else

{

pb = pb->next ;

}

}

if(coef != 0.0)

{

u = (PLinkList)malloc(sizeof(PolyNode));

u->coef = coef;

u->expn = k;

u->next = pc->next ;

pc->next = u;

pc = u;

}

}

L2 = Reverse(L2);

return head;

}

#include "test.h"

int main(void)

{

PLinkList A,B,C,D,E;

A = CreatePolyn();

printf("A(x) =");

OutPut(A);

printf("\n");

B = CreatePolyn();

printf("B(x) =");

OutPut(B);

printf("\n");

C = MultiplyPolyn(A,B);

printf("C(x) = A(x)*B(x) =");

OutPut(C);

printf("\n");

D = Addition(A,B);

printf("D(x) = A(x)+B(x) =");

OutPut(D);

printf("\n");

E = Subtraction(A,B);

printf("E(x) = A(x)-B(x) =");

OutPut(E);

printf("\n");

return 0;

}

java一元多项式减法运算_一元多项式的表示及加减乘除运算相关推荐

  1. java一元多项式减法运算_一元多项式的加/减法运算

    第一行:多项式A的第一项的系数.指数(以空格分隔) 第一行:多项式A的第二项的系数.指数(以空格分隔) ... 第n行:多项式A的第n项的系数.指数(以空格分隔) (假设多项式A的项数为n) (空行) ...

  2. java实现一元多项式减法_一元多项式 加法 减法 乘法

    1 #include 2 #include 3 //系数 coefficient,coef4 //指数 exponent, expon 5 typedef struct polyNode*polyno ...

  3. java 乘法 位移_用移位实现乘除法运算

    用移位实现乘除法运算 a=a*4; b=b/4; 可以改为: a=a<<2; b=b>>2; 说明: 除2 = 右移1位               乘2 = 左移1位 除4 ...

  4. java中Bigdecimal加减乘除运算

    在java中的Bigdecimal类型的数据进行加减乘除运算的时候要调用以下方法: 加法:add 减法:subtract 乘法:multiply 除法:divide 例如: BigDecimal i ...

  5. JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系

    文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...

  6. 一元多项式计算器 :加、减、乘运算【完整代码+运行截图+实验说明】

    原文链接 :https://blog.csdn.net/weixin_44119881/article/details/103717231 注意 [ 此套代码,有所缺陷 !!! ] 目   录 1.实 ...

  7. 数据结构之链表创建一元多项式,求一元多项式之和

    数据结构之链表创建一元多项式,求一元多项式之和 前言 对于一元多项式,我们完全可以利用线性表P(a0,a1,a2,-,an)表示,这样的线性表在求两个多项式相加等操作时确实简单,但是多于如下的多项式: ...

  8. Java计算时间差_传统的SimpleDateFormat类

    Java计算时间差_传统的SimpleDateFormat类 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd ...

  9. JAVA异常使用_每个人都曾用过、但未必都用得好

    JAVA异常使用_每个人都曾用过.但未必都用得好 一.抛出异常 vs. 返回错误代码 有人说"Well, an exception is a goto.",但也有人言"m ...

最新文章

  1. C++ 检测内存泄露
  2. web第一节2020.5.11
  3. pip通过阿里源安装
  4. 让PHP支持页面后退的两种方法
  5. Node js npm 包管理工具的基本使用
  6. __property 关键字的使用
  7. 如何在 Linux 上检查可用磁盘空间 [终端和 GUI]
  8. iOS开发之runtime的运用-获取当前网络状态
  9. 学校计算机基础考试教学,计算机基础大一考试题 浅谈中等职业学校计算机基础课程教学设计原则...
  10. OpenWrt搭建KMS服务(Vlmcsd)
  11. 如何申请免费的腾讯企业邮箱
  12. 测试空间大数据软件(Hadoop + HBase + GeoWave + GeoServer)
  13. 在python培训价格
  14. js 数组扁平化和树之间相互转换
  15. 惠普暗夜精灵2怎么打开后盖_散热为何如此优秀?HP暗影精灵II代拆解
  16. Python - 删除print()中的空格
  17. 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
  18. 练习题 William's Colored Pencils
  19. oracle bloom过滤,[20180112]11g关闭bloom filter.txt
  20. Yii整合商城经典教学视频(59视频)

热门文章

  1. 《东周列国志》第五十七回 娶夏姬巫臣逃晋 围下宫程婴匿孤
  2. 我的气垫船充满了鳗鱼
  3. VB/VBA,请让我点名表扬你
  4. 2022广东省安全员A证第三批(主要负责人)试题及模拟考试
  5. 记录MySQL数据库如何修改密码.
  6. 类和对象的定义和关系
  7. mysql中如何查看表结构
  8. 安卓rom包解包linux,Android rom解包打包工具
  9. BAAI 2020 北京智源大会 | Yolanda Gil | Thoughtful Artificial Intelligence
  10. Unity中Camera参数—Culling Mask详解