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首先加法器是怎么实现的呢 ...
随机推荐
- linux下yum安装时出现Loaded plugins: fastestmirror
linux使用yum安装软件时出现报错Loaded plugins:fastestmirror,是提示这个插件不能使用了,fastestmirror是yum的一个加速插件, 解决的办法是:将这个插件禁 ...
- MongoDB升级
因业务需要所以需要对mongoDB客户端jar包升级,在此记录一些过程 1.jar包替换,引入依赖 3.2.2: mongo-java-driver | 4.6.1: mongo-dr ...
- Centos7忘记root密码,修改root密码及其他用户密码
具体步骤: 1.重启系统,在开机过程中,快速按下方向键↑和↓.在引导程序页面暂停. 2.选择第一行(背景高亮即为选中),按下键盘上的e,进入编辑模式 3.将光标一直移动到 LANG=en_US.UTF ...
- uni-app学习笔记之----传参、通讯
1.页面传参 父级页面传递参数到详情页: 详情页得到参数: 打印: 2.组件通信 (1)子组件---->父组件:$emit() (2)父组件---->子组件:props (3)兄弟组件: ...
- 如何用premiere添加配乐?pr视频添加音乐
在pr中,怎么给视频添加音乐? 给视频添加音乐,有两种情况:1是视频音乐已存在:2是视频没有音乐,只是单纯的视频. 1.从酷狗音乐里下载一首音乐到桌面. 2.将音乐文件直接拖动到音频轨道里,把素材面板 ...
- pl/sql导出表结构的方法步骤
转载:pl/sql怎么导出表结构-pl/sql导出表结构的方法步骤-下载吧 (xiazaiba.com) PL/SQL Developer是一个专为Oracle数据库开发存储程序单元的集成开发环境,用 ...
- Jupyter notebook upload无法加载本地ipynb文件
可能是本地浏览器(IE)问题,修改默认浏览器.
- python APScheduler用法
参考: https://blog.csdn.net/weixin_44799217/article/details/127353134 https://blog.csdn.net/weixin_428 ...
- pj_0001_compare_col_csv
#!/usr/bin/python# -*- coding: UTF-8 -*- import pathlibimport pandas as pd print("please input ...
- CMMI审核期间的主要流程
整个阶段大致2个月左右,正式评估大概一个星期 一 计划准备阶段,包括我们一些资料的准备,做评估计划等 二 执行评估阶段 启动会议 主要主任评估师讲,所有人员参会 会议内容:主任评估师自我介绍 ,项目信 ...