链表应用——多项式相加
f(X)=1+x+x2+x5
g(X)=x3+x6+x8+x100
f(X)+g(X)=1+x+x2+x3+x5+x6+x8+x100
两个有序多项式相加合并问题:
显然第一个想到的是用数组解决,可仔细想一想,数组有诸多弊端,比如大量空间浪费,无法同时存储系数和指数(当然可以用结构体数组,但那不还是链表吗),插入删除都需移动大量数据,索性,就用单链表解决吧
思路如下:
1)将f(X)和g(X)分别存储在两个单向链表内,每个节点存储多项式的一项,内含系数和指数,并指向下一项节点,连贯成一个多项式,头结点分别是head1,和head2;
2)接下来就是两个多项式合并同类项了(初中貌似最喜欢做这玩意了,可计算机可不如你啊),用Node *p1=head->next; 指向f(X)的第一个项节点(head节点均为无数据的表头),
Node *p2=head->next;指向g(X)的的一项; 在定义两个指针pre1=head1、pre2=head2(一会儿有用),准备工作基本做完了。
3)此算法的关键在于将两个有序链表合并成一个,并依然有序;只需将f(X)看成主串,g(X)看成插入串即可,遍历g(X)的各节点,比较其与f(X)各节点指数的大小,小的就插在前面,大的话指针p1就往后移,相等就合并,如果f(X)先遍历到结尾,说明g(X)的其余项都比f(X)的最后一项的指数大,只需将f(X)的最后一个节点指向g(x)的剩余节点即可,最后别忘了把head2删了,因为它是个没有数据的节点。
好了还是上代码吧:
using namespace std;
typedef struct node
{
int coe; //系数
int exp; //指数
struct node *next;
}Node;
/生成链表
Node *Create()
{
Node *head=new Node;
head->next=NULL;
Node *p=head;
int n; //项数
cout<<"N:";
cin>>n;
for(int i=0;i<n;i++)
{
p->next=new Node ;
p=p->next;
cin>>p->coe>>p->exp;
p->next=NULL;
}
return head;
}
int main()
{
Node *head1=Create();
Node *head2=Create();
Node *p1=head1->next,*p2=head2->next;
Node *pre1=head1,*pre2=head2; //pre1指针用来指向比较节点的前一个节点
//pre2指针用作temp
while(p1 && p2)
{
if(p1->exp < p2->exp)
{
pre1=p1;
p1=p1->next;
}
else if(p1->exp > p2->exp)
{
pre1->next=p2;
pre2=p2->next;
p2->next=p1;
p2=pre2;
pre1=pre1->next;
}
else if(p1->exp == p2->exp)
{
p1->coe+=p2->coe;
pre2=p2;
p2=p2->next;
delete pre2;
}
}
if(p1==NULL)
{
pre1->next=p2;
}
delete head2;
Node *temp=head1->next;
while(temp)
{
cout<<temp->coe<<'X'<<'('<<temp->exp<<')'<<" ";
temp=temp->next;
}
return 0;
}
转载于:https://www.cnblogs.com/gavindlutsw/archive/2011/09/24/2189784.html
链表应用——多项式相加相关推荐
- 链表应用 多项式相加
用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 ...
- 【数据结构笔记07】不带头结点链表实现多项式相加、相乘
本次笔记内容: 2.4 多项式的加减运算实现 P24 1.题意理解与多项式表示 P25 2.程序框架及读入多项式 P26 3.加法.乘法运算及多项式输出 文章目录 多项式加法运算 采用不带头结点的单项 ...
- 数据结构(Java):用单链表实现多项式相加
要求: 1.已知有两个多项式Pn(x)和Qm(x),并且在Pn(x)和Qm(x)中指数相差很多,设计算法,求Pn(x)+Qm(x) 2.进行加法运算时不重新开辟存储空间. //定义节点类 class ...
- MFC版链表实现稀疏多项式相加减
链表实现多项式运算(加减)MFC可视化版 题目 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立两个多项式: (2)多项式a与b相加,建立和多项式c: (3)多项式a与b相减,建立差多项 ...
- 数据结构C语言描述——用单链表实现多项式的相加
#include <stdio.h> #include <stdlib.h>typedef DataType; typedef struct Node2{DataType xi ...
- 基础数据结构【四】————环形链表与多项式
主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...
- 多项式加法 java 链表_多项式加法,用单链表实现。
---恢复内容开始--- #include #include typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//系数 i ...
- 用c语言链表编写便利店零售系统,链表实现多项式求和(C语言)
链表实现多项式求和(C语言)0 aebgt2013.06.26浏览270次分享举报 1 多项式求和中两个链表合并问题,请各位大侠帮忙啊 #include #include typedef struct ...
- 【数据结构】C++单链表实现多项式加法(直接输入多项式)
题目描述: 计算两个多项式的和. 输入: 输入有两行,每行为一个每项按照指数从大到小顺序的多项式,多项式的每一项用mx^n表示,其中系数m为非0整数,指数n是非负整数. 输出: 输出两个多项式相加的结 ...
最新文章
- 从RocketMQ看长轮询(Long Polling)
- CSP-S初赛知识点复习(全)
- vs中html如何设计分页_如何在电路设计中使用负载线(Load Line)?
- linux课堂笔记(6)
- boost库 bind/function的使用
- word根据目录切块php,PHP导出Word文档如何自定义目录?
- 在Blazor中构建数据库应用程序——第5部分——查看组件——UI中的CRUD列表操作
- tensorflow2 目标检测_BJX 系列 小型远距离检测型光电传感器代理报价
- python dataframe 合并乱序列表_Python数据处理--删除重复项、数值替换和表合并
- matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
- 报错Takes no arguements解决办法
- git hub寻找资源
- Ansible企业运维实例(三)—批量硬盘初始化
- 几倍根号用学生计算机,几倍根号几怎么算不要网上抄的 祥细的 例如2√2 3√3 4√4 怎么算...
- 如何找到微信公众号的视频链接及视频?
- aws ec2时间_Amazon EC2
- 关于Elastic、关于Elasticsearch教程
- 从另一个角度看汉芯事件
- iOS仿UC浏览器顶部频道滚动效果
- 机器学习(二) 学习规划及资料汇总