编写一个程序,用单链表存储多项式,并实现两个多项式相加的函数。求思路。

whdugh 2013-01-17 08:45:15
rt。菜鸟求思路。谢谢
...全文
3795 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengfoo 2013-01-17
  • 打赏
  • 举报
回复
上面图片的顺序错了,注意一下。。。
pengfoo 2013-01-17
  • 打赏
  • 举报
回复

pengfoo 2013-01-17
  • 打赏
  • 举报
回复
链表实现多项式的算术运算:(降幂排列)
#include<iostream>
using namespace std;

class Term
{
	int coef;
	int exp;
	Term *link;
	friend ostream& operator<<(ostream&,const Term&);
	friend class Polynominal;
public:
	Term(int c,int e):coef(c),exp(e)
	{
		link=0;	
	}
	Term(int c,int e,Term* nxt):coef(c),exp(e),link(nxt){}
	Term* InsertAfter(int c,int e);
};
Term* Term::InsertAfter(int c,int e)
{
	link=new Term(c,e,link);
	return link;
}
ostream& operator<<(ostream& os,const Term& val)
{
	if(val.coef==0)return os;
	os<<val.coef;
	switch(val.exp)
	{
		case 0:break;
		case 1:os<<"X";break;
		default:os<<"X^"<<val.exp;break;
	}
	return os;
}

class Polynominal
{
	Term* theList;
	friend ostream& operator<<(ostream&,const Polynominal&);
	friend istream& operator>>(istream&, Polynominal&);
	friend Polynominal operator+ (Polynominal&,Polynominal&);
public:
	Polynominal()
	{
		theList=new Term(0,-1);
		theList->link=theList;
	}
	void AddTerms(istream& in);
	void Output(ostream& out)const;
	void PolyAdd(Polynominal& r);
};
void Polynominal::AddTerms(istream& in)
{
	Term* q=theList;
	int c,e;
	for(;;)
	{
		cout<<"input a term(coef,exp):"<<endl;
		in>>c>>e;
		if(e<0)break;
		q=q->InsertAfter(c,e);
	}
}
void Polynominal::Output(ostream& out)const
{
	int first=1;
	Term* p=theList->link;
	cout<<"the polynominal is:"<<endl;
	for(;p!=theList;p=p->link)
	{
		if(!first&&(p->coef>0))
			out<<"+";
		first=0;
		out<<*p;	
	}
	cout<<endl;
}
void Polynominal::PolyAdd(Polynominal& r)
{
	Term* q,*q1=theList,*q2,*p;
	p=r.theList;
	q=q1->link;
	p=p->link;
	while(p->exp>=0)
	{
		while(p->exp<q->exp)
		{
			q1=q;
			q=q->link;
		}
		if(p->exp==q->exp)
		{
			q->coef=p->coef+q->coef;
			if(q->coef==0)
			{
				q2=q;
				q1->link=q->link;
				q=q->link;
				delete q2;
				p=p->link;
			}
			else
			{
				q1=q;
				q=q->link;
				p=p->link;
			}
		}
		else
		{
			q1=q1->InsertAfter(p->coef,p->exp);
			p=p->link;
		}	
	}
}

ostream& operator<< (ostream& out,const Polynominal& x)
{
	x.Output(out);
	return out;
}
istream& operator>> (istream& in, Polynominal& x)
{
	x.AddTerms(in);
	return in;
}
Polynominal operator+(Polynominal &a,Polynominal &b)
{
	a.PolyAdd(b);
	return a;
}
int main()
{
	Polynominal p,q;
	cin>>p;
	cout<<p;
	cin>>q;
	cout<<q;
	q=q+p;
	cout<<q;
}
xiaoyaoxiaonizi 2013-01-17
  • 打赏
  • 举报
回复
给点我的想法吧: 1、多项式存储用字符串存储,类似 2、多项式解析函数,起码能够识别字母和符号,高级点的功能是提取因式 3、利用2把每个多项式格式化成你规定的统一格式 4、把3中的每个多项式做匹配,再合并 大功告成,实现数学功能主要是重逻辑,平时怎么算得,算法基本就是那个思路,最主要的就是把一堆程序无法识别的字符串格式化成程序认识的格式。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧