问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用链表实现两个多项式相加

发布网友 发布时间:2022-05-20 13:25

我来回答

1个回答

热心网友 时间:2023-11-16 06:16

#include<iostream.h>
class Linkedlist;
class Node
{
friend class Linkedlist;
private:
Node *next;
public:
float coef;
int exp;
Node(Node *ptrNext=NULL);
Node(float a,int b,Node *ptrNext=NULL);
};
Node::Node(Node *ptrNext):next(ptrNext){}
Node::Node(float a,int b,Node *ptrNext)
{
coef=a;
exp=b;
next=ptrNext;
}
class Linkedlist
{
private:
Node *head;
int size;
Node *currPtr;
public:
Linkedlist();
~Linkedlist();

void Create();
int ListSize();
void Add(Linkedlist &s1,Linkedlist &s2);
void Insert(float a,int b,int pos);
Node *Index(int pos);
void ClearList();
float GetCoef(int pos);
int GetExp(int pos);
Node *Next();
};
Linkedlist::Linkedlist()
{
head=new Node();
size=0;
}
Linkedlist::~Linkedlist()
{
ClearList();
delete head;
head=NULL;
}
void Linkedlist::Create()
{
Node *ptr=head->next;
float a;
int b,i=0,pos=0;
cout<<"请输入多项式各项的系数和指数,系数输入'0'结束"<<endl;
while(1)
{
cin>>a>>b;
if(a!=0)
{
while(ptr->exp<b&&ptr->next!=NULL)
{
ptr=Index(pos-1);
pos++;
}
ptr=Index(pos-1);
Node *qtr=new Node(a,b,ptr->next);
ptr->next=qtr;
size++;
}
else
break;
}
}
Linkedlist::ListSize()
{
return size;
}
void Linkedlist::Add(Linkedlist &s1,Linkedlist &s2)
{
int i=0,m=0,n=0;
while(s1.Next()&&s2.Next())
{
if(s1.GetExp(m)>s2.GetExp(n))
{
Node *ptr=Index(i-1);
Node *qtr=new Node(s2.GetCoef(n),s2.GetExp(n),ptr->next);
ptr->next=qtr;
size++;
n++;
i++;
s2.Next();
}
if(s1.GetExp(m)==s2.GetExp(n))
{
if(s1.GetCoef(m)+s2.GetCoef(n)!=0)
{
Node *ptr=Index(i-1);
Node *qtr=new Node(s1.GetCoef(m)+s2.GetCoef(n),s1.GetExp(m),ptr->next);
ptr->next=qtr;
size++;
m++,n++,i++;
s1.Next();
s2.Next();
}
else
{
m++,n++;
s1.Next();
s2.Next();
}
}
if(s1.GetExp(m)<s2.GetExp(n))
{
Node *ptr=Index(i-1);
Node *qtr=new Node(s1.GetCoef(m),s1.GetExp(m),ptr->next);
ptr->next=qtr;
size++;
m++,i++;
s1.Next();
}
}
if(s1.Next())
{
Node *ptr=Index(i-1);
Node *qtr=new Node(s1.GetCoef(m),s1.GetExp(m),ptr->next);
ptr->next=qtr;
size++;
m++,i++;
s1.Next();
}
else
if(s2.Next())
{
Node *ptr=Index(i-1);
Node *qtr=new Node(s2.GetCoef(n),s2.GetExp(n),ptr->next);
ptr->next=qtr;
size++;
i++,n++;
s2.Next();
}
}
void Linkedlist::Insert(float a,int b,int pos)
{
Node *ptr=Index(pos-1);
Node *qtr=new Node(a,b,ptr->next);
ptr->next=qtr;
size++;
}
Node *Linkedlist::Index(int pos)
{
if(pos<-1||pos>size-1)
{
cout<<"下标越界:"<<endl;
return NULL;
}
if(pos==1) return head;
Node *p=head->next;
int i=0;
while(i<pos)
{
p=p->next;
i++;
}
return p;
}
void Linkedlist::ClearList()
{
Node *p,*pl;
p=head->next;
while(p!=NULL)
{
pl=p;
p=p->next;
delete pl;
}
size=0;
}
float Linkedlist::GetCoef(int pos)
{
Node *p=Index(pos);
return p->coef;
}
int Linkedlist::GetExp(int pos)
{
Node *p=Index(pos);
return p->exp;
}
Node *Linkedlist::Next()
{
if(currPtr!=NULL)
currPtr=currPtr->next;
return currPtr;
}
void Print(Linkedlist &L)
{
int i,length=L.ListSize();
for(i=0;i<length;i++)
{
if(L.GetExp(i)==0)
cout<<L.GetCoef(i);
else
cout<<"+"<<L.GetCoef(i)<<"x^"<<L.GetExp(i);
}
cout<<endl;
}
void main()
{
Linkedlist s1,s2,s3;
s1.Create();
cout<<"a(x)=";
Print(s1);
s2.Create();
cout<<"b(x)=";
Print(s2);
s3.Add(s1,s2);
cout<<"两多项式和为:"<<endl;
cout<<"c(x)=";
Print(s3);
}
找不到错误,但运行不了。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
填地方专项志愿会影响本科二批录取吗? 地方专项计划成绩不好的可以报吗 国家专项地方专项影响本科填报吗 地方专项计划滑档影响本科录取吗 报地方专项计划会影响高考录取吗 地方专项计划影响后续录取吗 电脑最高配组装机配置组装电脑什么配置比较好 台式组装游戏电脑配置组装电脑什么配置比较好 打游戏主机电脑配置台式电脑主要是玩游戏什么配置最合适 组装高配置台式电脑组装电脑什么配置比较好 自己去站点充煤气,如何才能辨别煤气给我充满了自己去充煤气一罐大概多少钱呢?呢? 如何用C语言实现两个一元多项式的相加和相乘? 多项式相加 两个多项式函数相加后的次数 两个一元多项式相加的算法怎么写啊? 请教各位高手一下,关于数据结构单链表的题,给定两个多项式,实现多项式的相加算法, 数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算,怎么做? 给定两个多项式,实现两个多项式相加算法。用c语言编程 两个多项式相加运算(用c语言) 找一部动画 一个男人和他的狗 guess how much i love you 动画片豆瓣评分适合多大孩子观看 求BBC《与古兽同行》&《与恐龙同行》纪录片打包下载,要求高清,中英文对照。 BBC奥运宣传片东游记在哪里看? 在哪可以看完整的超清的bbc《与恐龙同行》纪录片 根据左撇子工具公司的案例,如何做市场细分?目标市场策略是什么?如何进行市场+_百度问一问 急 急 案例分析:解答 美国的“丽”(Lee)牌牛仔裤就始终把目标市场对准占人口比例较大的那部分 个人消费者市场和生产者市场细分的区别 360p1路由器,怎样连接两台电脑上网,现在一台连接路由器不能上网, 浙江国能新能源APP理财会跑路吗 网络APP 投资被骗的分享下 我是被浙江恒悦新能被骗了两w多 是通过微信公众号“全球电力资‘ 两个一元多项式相加 一元多项式的计算 能够按照指数降序排列建立并输出多项式 能够完成两个多项式的相加及相减 用c语言编写两个一元多项式的相加 多项式相加(C语言) matlab中两个不同次的多项式怎么实现相加 利用顺序表或链表表示两个一元多项式,并完成两多项式的乘法运算。 长时间站着不动,会不会有病 为什么会有一直站着不动的啊也不做事情 怎样站着不动 一个人站着不动最多能站多长时间 长时间站立,但不是站着不动,有什么利于弊,可以减肥吗? 只是站着不动会减肥吗? 小人站着不动,不听话是怎么回事 我是男性.正常的时候我*处总是湿湿的.有轻微尿液流出,总感觉想尿.却尿不出来. 阴茎勃起龟头出水后就软了怎么了 股票,上影线超过5%如何编写公式? 娥用模拟器MUMU在玩楚留香手游,所以有人知道是什么奇遇吗? 怎么知道华硕电脑已经充满电 百度云任何有效链接打不开,一直显示“文件名”,如下图。 生物技术专业毕业,现在可以考哪些证书,除了