一元稀疏多项式计算 (数据结构实验)

#include <bits/stdc++.h>
using namespace std;
struct node{
	float coef;//系数
	int exp;//指数
	node * next; 
};

node * creat(node * l)
{
	float coef; int exp;
	l = new node;
	node * p,* q;
	
	scanf("%f %d",&coef,&exp);
	p=l;
	while(coef!=0||exp!=0)
	{
	 p->coef = coef;
	 p->exp = exp;
	 p->next = new node;
	 q = p;
	 p=p->next;
	scanf("%f %d",&coef,&exp);	
	} 
	q->next=NULL;
	return l;
}
void Print(node * l)
{
	node * q = l;
	while(q!=NULL)
	{
		if(q->coef>0&&l!=q&&l!=q)
		{
			cout<<"+";
		}
		cout<<q->coef<<"x^"<<q->exp;
		q=q->next;
	}
	cout<<"\n";
}
void sortList(node *l)
{
	node * p,*q;
	for(p=l;p!=NULL;p=p->next)
	{
		q=l;
		for(q=l;q->next!=NULL;q=q->next)
		if(p->exp<q->exp)
		{
			int tmpe; float tmpf;
			tmpe = p->exp;
			p->exp = q ->exp;
			q->exp =tmpe;
			tmpf = p->coef;
			p->coef = q ->coef;
			q->coef =tmpf;			 
		}
	}
}
node * merge(node *a,node *b,node *c,float flag)
{
	node *p,*q,*l,*lq;
	p=a; q=b; //coef系数 
	c=new node;
	l=c;
	while(p!=NULL&&q!=NULL)
	{
		if(p->exp < q->exp)
		{
		  l->coef = p->coef;
		  l->exp =p->exp;
		  l->next = new node;
		  lq = l; l = l->next; 
		  
		  l->coef = q->coef;
		  l->exp =q->exp;
		  l->next = new node;
		  lq = l; l = l->next; 
		  
		}else if(p->exp > q->exp)
		{
		  l->coef = q->coef;
		  l->exp =q->exp;
		  l->next = new node;
		  lq = l; l = l->next; 
			
		  l->coef = p->coef;
		  l->exp =p->exp;
		  l->next = new node;
		  lq = l; l = l->next;	
			
		}else 
		{
			l->coef = p->coef+(flag)*q->coef;
			l->exp = p->exp;
			lq=l; l->next = new node;
			l=l->next;
		}
		if(p!=NULL)
		p=p->next;
		if(q!=NULL)
		q=q->next;
	}
	l=new node;
	while(p!=NULL)
	{
		  l->coef = p->coef;
		  l->exp =p->exp;
		  l->next = new node;
		  lq = l; l = l->next; 
		  p=p->next;
	}
	
	while(q!=NULL)
	{
		  l->coef = q->coef;
		  l->exp =q->exp;
		  l->next = new node;
		  lq = l; l = l->next; 
		  q=q->next;
	}
	lq->next = NULL;
	return c;
}
int main()
{
	node *a,*b,*c;
	cout<<"please input in accordance with the format:  (***) \n";
	cout<<"the first formula\n";
	a = creat(a);
	cout<<"the second formula\n";
	b = creat(b);
	sortList(a);
	sortList(b);
	cout<<"the first formula: "; Print(a);
	cout<<"the second formula: ";Print(b);
	
	float plus=1,mins=-1;
	c = merge(a,b,c,plus);
	cout<<"plus: ";Print(c);
	c = merge(a,b,c,mins);
	cout<<"mins: ";Print(c);
} 

/*
3 1 -2 2 6 3 0 0

1 1 1 2 1 3 0 0
*/

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wym_king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值