C++实现链式表示多项式加法运算
#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++实现链式表示多项式加法运算的更多相关文章
- 小白专场-多项式乘法与加法运算-python语言实现
目录 题意理解 解题思路 多项式加法 多项式乘法 完整代码 题意理解 题目: 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一 ...
- objective-c 一个链式加法计算器实现
一个链式加法计算器实现思路 1.使用时的效果 Calculate * manger=[Calculate new]; int result=manger.add(123).add(123).sub(1 ...
- 小白专场-多项式乘法与加法运算-c语言实现
目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...
- C#用链式方法表达循环嵌套
情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...
- jQuery链式操作[转]
用过jQuery的朋友都知道他强大的链式操作,方便,简洁,易于理解,如下 $("has_children").click(function(){ $(this).addClass( ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...
- java中的链式编程
听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...
- 谈谈 Objective-C 链式语法的实现
引言 对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以 ...
- 整数运算:CPU内部只有加法运算
学汇编的一边儿去.我这里讲的是CPU进行计算的原理.首先我这里用MC的红石电路模拟了一个加法器:http://www.0xaa55.com/thread-313-1-1.htm首先加法器是怎么实现的呢 ...
随机推荐
- SVG 从入门到后悔,怎么不早点学起来(图解版)
点赞 + 关注 + 收藏 = 学会了 作为一只前端,只懂 Vue.React 感觉已经和大家拉不开距离了. 可视化.机器学习等领域 JS 都有涉及到,而可视化方面已经被很多领域用到,比如大屏项目. 可 ...
- XYZtoZXY
Quaternion XYZtoZXY(Vector3 p) { Vector3 v = new Vector3(p.x, -p.y, -p.z); Quaternion qx = Quaternio ...
- Ansible 实记
自动化运维工具 Ansible ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件co ...
- WPF-序列化
public class SerializeHelper { #region 二进制格式 /// <summary> /// Binary 序列化使用前需要标记类可序列化 /// < ...
- vue将地区以对象、数组的格式传给后端
项目涉及到了一个地区筛选,同时省市区三级不进行关联,后端要求以对象包数组的格式传参,完整代码 1.先拿到接口返回的地区数据 对数据进行处理,拿到想要的格式 this.provinceOption =r ...
- cocos2d-lua 控制台输入Lua指令方便调试
用脚本进行开发,如果不能实时去输入指令,就丧失了脚本的一大特色,所以对cocos2d-x程序稍微修改下,使其可以直接从控制台读入lua指令,方便调试. 1 首先在行首加入lua的引用,如下 1 #in ...
- java方法的笔记
方法 方法的概念 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程成为方法定义 方法创建后并不是直接可以运行的,需要手动 ...
- Python的入门学习Day 22~24——form”夜曲编程“
Day 22 time:2021.8.19. 顺着歌曲的旋律,内心一下子就安静了呢.终于,我可以好好写日记了,徜徉在一片金色的花海里.今天主要学习了匿名函数.这是一种很有趣的函数呢,像孙悟空会72 ...
- 路飞项目 day03 前端配置、后台主页、项目依赖问题
一.路飞项目前端配置 1.先删除一些不要的 删除多余的组件,只要app和首页组件 然后改一下组件的内部代码 -App.vue中 ______________ <template> ...
- (三)用go实现平衡二叉树
本篇,我们用go简单的实现平衡二叉查找树.具体原理参考大佬博客即可:AVL树(一)之 图文解析 和 C语言的实现 1.节点定义 type AVLNode struct{ data int height ...