#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int Elemtype;
typedef int Status;
typedef struct PNode//定义多项式
{
float coef;//系数cofficient
Elemtype expn;//指数exponent
struct PNode* next;//地址域
}PNode, * Polynomial;
Status InitPolyn(Polynomial& P);//初始化多项式
Status CreatePolyn(Polynomial& P, int i);//创建多项式
Status AddPolyn(Polynomial& Pa, Polynomial& Pb);//多项式的加法运算
Status PrintPolyn(Polynomial P);//在单链表中打印元素
int main(void)
{
int a, b;
a = b = 0;
Polynomial Pa, Pb;
InitPolyn(Pa);
InitPolyn(Pb);
cout << "创建链表Pa的长度为:";
cin >> a;
CreatePolyn(Pa,a);
cout << "创建链表Pb的长度为:";
cin >> b;
CreatePolyn(Pb, b);
AddPolyn(Pa, Pb);
PrintPolyn(Pa);
return 0;
}
Status InitPolyn(Polynomial& P)//初始化一个只有头结点的单链表
{
P = new PNode;
P->next = NULL;
return OK;
}
Status CreatePolyn(Polynomial& P, int i)
{
PNode* p, * pre, * q;
cout << "\n输入多项式的相关数据为(系数和指数):";
for (int t = 0; t < i; t++)
{
p = new PNode;//生成一个新节点*p
cin >> p->coef >> p->expn;//输入当前项指数expn和系数coef
pre = P;//pre用于保存q的前驱节点,初始时指向头节点,用于找到第一个大于输入项指数的节点的前驱
q = P->next;//q初始化,指向首元节点
while (q && (q->expn < p->expn))//比较指数,找到第一个大于输入项指数的项*q
{
pre = q;
q = q->next;
}
p->next = q;//赋值生成节点*p的指针域 将输入项p插入*q和其前驱节点pre之间
pre->next = p;
}
return OK;
}
Status AddPolyn(Polynomial& Pa, Polynomial& Pb)
{
PNode* p1, * p2, * p3, * r;
p1 = Pa->next, p2 = Pb->next, p3 = Pa;
while (p1 && p2)//p1,p2都不为空
{
if (p1->expn == p2->expn)//p1指向的指数等于p2指向的指数
{
float sum = 0;
sum = p1->coef + p2->coef;//sum表示两个系数之和
if (sum != 0)
{
p1->coef = sum;
p3->next = p1;
p3 = p1;
p1 = p1->next;
r = p2;
p2 = p2->next;
delete r;
}
else
{
r = p1;
p1 = p1->next;
delete r;
r = p2;
p2 = p2->next;
delete r;
}
}
else
{
if (p1->expn < p2->expn)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
}
p3->next = p1 ? p1 : p2;//将非空表的剩余段插入到pc
delete Pb;//释放Lb的头结点
return OK;
}
Status PrintPolyn(Polynomial P)
{
PNode* p;
p = P->next;
if (p == NULL)
{
cout << "\n表不存在。";
return ERROR;
}
while (p != NULL)
{
cout << "\n系数为:";
cout << p->coef << " ";
cout << "\n指数为:";
cout << p->expn << " ";
p = p->next;
}
return OK;
}

C++实现链式表示多项式加法运算的更多相关文章

  1. 小白专场-多项式乘法与加法运算-python语言实现

    目录 题意理解 解题思路 多项式加法 多项式乘法 完整代码 题意理解 题目: 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一 ...

  2. objective-c 一个链式加法计算器实现

    一个链式加法计算器实现思路 1.使用时的效果 Calculate * manger=[Calculate new]; int result=manger.add(123).add(123).sub(1 ...

  3. 小白专场-多项式乘法与加法运算-c语言实现

    目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...

  4. C#用链式方法表达循环嵌套

    情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...

  5. jQuery链式操作[转]

    用过jQuery的朋友都知道他强大的链式操作,方便,简洁,易于理解,如下 $("has_children").click(function(){ $(this).addClass( ...

  6. ios的链式编程笔记

    1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数  > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...

  7. javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例

    栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...

  8. java中的链式编程

    听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...

  9. 谈谈 Objective-C 链式语法的实现

    引言 对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以 ...

  10. 整数运算:CPU内部只有加法运算

    学汇编的一边儿去.我这里讲的是CPU进行计算的原理.首先我这里用MC的红石电路模拟了一个加法器:http://www.0xaa55.com/thread-313-1-1.htm首先加法器是怎么实现的呢 ...

随机推荐

  1. vue的:class设置多个值

    vue的:class设置多个值 :class="[{ 'labTilTemplate': item.editType == 11 }, { 'txtBold': item.bold == 1 ...

  2. docker 部署rocketmq 4.4

    1 mkdir -p /home/rocketmq/{name_server,broker,console} 2 mkdir -p /home/rocketmq/name_server/{logs,s ...

  3. 题解[LuoguP6222]「P6156简单题」加强版

    题解[LuoguP6222]「P6156简单题」加强版 加强版很好地体现了这个题的真正价值.(当然是指卡常 本题解给出了本题更详尽的推倒导和思考过程,思路与 CYJian 的类似,具体式子的个别地方换 ...

  4. web基础(7): JavaScript 简介/语法

    chapter4 JS简介 JS 可以实现表单验证(比如填写简历时,必要的项目是否已经填写).返回顶部.小游戏.网页特效等. JS 的开发工具 Hbuilder 官网www.dcloud.io, 能快 ...

  5. CI2454国产8位RISC核SoC芯片

    Ci2454是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片.主要应用在遥控玩具.智能灯控.数据透传.工业控制等领域.无线收发器主要特性 工作在 2.4GHz ISM 频段. 调制方 ...

  6. docker容器部署flask单页面应用

    本地安装docker,拉取centos镜像. docker pull centos:7 本地文件结构: /usr/local/var/tmp/docker_demo .app ---requireme ...

  7. shm

    进程间共享内存访问及读写 目录 进程间共享内存访问及读写 1. 进程间共享内存相关linux_C函数 2. 进程间共享内存基本流程 3. demo code 1. 进程间共享内存相关linux_C函数 ...

  8. selenium定位元素不稳定的解决方式

    1 显示的进行时间上的等待 2 能够查到元素的时候可以使用js注入,单击 element = driver.find_element(*loc) driver.execute_script(" ...

  9. Apache SSI远程命令执行漏洞复现

    漏洞原理:当目标服务器开启了SSI与CGI支持,就可以上传shtml文件,并利用语法执行任意命令,例如<!- - #exec cmd="ls"- ->,cmd后面跟要执 ...

  10. 关于webpack 开启代理proxy后,接口看不到代理地址的问题。

    今天在项目中发现, 明明在proxy里代理了 接口地址确不是10.10.11.106/front/xxxxxx.这是为啥呢?changeOrigin的修改也是一样,在网络请求中发现host还是没改.这 ...