一元多项式求和使用链表

一元多项式求和

题目介绍

  1. 工作指针p、q初始化;
  2. while(p存在且q存在)执行下列三种情形之一
    2.1 如果p->expexp,则指针p后移;
    2.2 如果p->exp>q->exp,则
    2.2.1 将结点q插入到结点p之前;
    2.2.2 指针q指向原指结点的下一个结点;
    2.3 如果p->exp=q->exp,则
    2.3.1 p->coef =p->coef+q->coef;
    2.3.2 如果p->coef ==0,则执行下列操作,否则,指针p后移;
    2.3.2.1 删除结点p;
    2.3.2.2 使指针p指向它原指结点的下一个结点;
    2.3.3 删除结点q;
    2.3.4 使指针q指向它原指结点的下一个结点;
    3. 如果q不为空,将结点q链接在第一个单链表的后面;
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct Po
{
	int coef;
	int exp;
	struct Po *next;
}poly;
void Create(poly *&L,int n)//创建  从exp小到大输入。
{
	poly *s;
	int a,b;
	L=(poly *)malloc(sizeof(poly));
	L->next=NULL;
	for(int i=0;i<n;i++)
	{
		s=(poly *)malloc(sizeof(poly));
		cout<<"输入第"<<i+1<<"个系数";
		cin>>a;
		s->coef=a;
		cout<<"输入第"<<i+1<<"个指数";
		cin>>b;
		s->exp=b;
		s->next=L->next;
		L->next=s;
	}
}
bool Insert(poly *&L,int i,poly *K)
{
	poly *p=L,*s;
	if(i<0)
		return false;
	for(int j=0;j<i&&p->next!=NULL;j++)
	{
		p=p->next;
	}
	if(p==NULL)
	{
		return false;
	}
	else
	{
		s=(poly *)malloc(sizeof(poly));
		s->coef=K->next->coef;
		s->exp=K->next->exp;
		s->next=p->next;
		p->next=s;
		return true;
	}
}
bool Dele(poly *&L,int i)
{
	poly *p=L,*s;
	if(i<0)
		return false;
	for(int j=0;j<i&&p->next!=NULL;j++)
	{
		p=p->next;
	}
	if(p==NULL)
	{
		return false;
	}
	else
	{
		s=p->next;

		p->next=s->next;
		free(s);
		return true;
	}
}
int main()
{
	int m,n,k=0;
	poly *p,*q;
	cout<<"第一个的项数"<<endl;
	cin>>m;
	Create(p,m);
	cout<<"第二个的项数"<<endl;
	cin>>n;
	Create(q,n);
	poly *p1=p,*q1=q;
	while(p1->next!=NULL&&q1->next!=NULL)
	{
		
		if(p1->next->exp>q1->next->exp)//依次比较,p的大就和q后面的比
		{
			p1=p1->next;
			k++;
		}
		else if(p1->next->exp<q1->next->exp)//p小于就把q的那个插入p
		{
			Insert(p,k,q1);
			q1=q1->next;
		}
		else if(p1->next->exp==q1->next->exp)//相同就相加
		{
			p1->next->coef=p1->next->coef+q1->next->coef;
			if(p1->next->coef==0)//发现相加后,他们的系数为0 ,删掉这一个。
			{
				Dele(p,k);
				q1=q1->next;
			}
			else
			{
				p1=p1->next;
				q1=q1->next;
				k++;
			}
			
		}
	}
	
	if(q1->next!=NULL)
	{
		p1->next=q1->next;
	}
	while(p->next!=NULL)//输出
	{
		if(p->next->next==NULL)
			cout<<p->next->coef<<"*x^"<<p->next->exp<<endl;			
		else
			cout<<p->next->coef<<"*x^"<<p->next->exp<<"+";
		p=p->next;
	}
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值