一元多项式加法与乘法运算链表实现

原创 2017年01月29日 01:56:36
typedef struct PolyNode *Polynomial;
struct PolyNode{
	int coef;//系数 
	int expon;//指数 
	Polynomial link;/*指向下一个结点的指针*/ 
}; 
Polynomial P,Rear,t1,t2,t;//这句一定要写 

int main()
{
	Polynomial P1,P2,PP,PS;
	P1=ReadPoly();
	P2=ReadPoly();
	PP=Mult(P1,P2);
	PrintPoly(PP);
	PS=Add(P1,P2);
	PrintPoly(PS);
	return 0;
} 
void Attach(int c,int e,Polynomial *pRear)//*pRear是指针的指针 
{
	Polynomial P;
	
	P=(Polynomial)malloc(sizeof(struct PolyNode));
	P->coef=c;//对新结点赋值 
	P->expon=e;
	P->link=NULL;
	(*pRear)->link=P;
	*pRear=P;//修改pRear的值 
}
Polynomial ReadPoly()//读入多项式 
{
	Polynomial P,Rear,t;
	int c,e,N;
	scanf("%d",&N);
	P=(Polynomial)malloc(sizeof(struct PolyNode));//链表头空结点
	P->link=NULL;
	Rear=P;
	while(N--){
		scanf("%d %d",&c,&e);
		Attach(c,e,&Rear);//将当前插入多项式尾部 
	} 
	t=P;P=P->link; free(t);//删除临时生成的头结点
	return P; 
}
Polynomial Mult(Polynomial P1,Polynomial P2)//如何将两个多项式相乘 
{
	Polynomial P,Rear,t1,t2,t;
	int c,e;
	if(!P1||!P2) return NULL; 
	t1=P1;t2=P2;
	P=(Polynomial)malloc(sizeof(struct PolyNode));  P->link=NULL;
	Rear=P;
	while(t2){//先用P1的第一项乘以P2,得到P 
			 Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);	
			 t2=t2->link;	
	}
	t1=t1->link;
	while(t1){ 
			  t2=P2;Rear=P;
			  while(t2){
			  			e=t1->expon+t2->expon;
			  			c=t1->coef*t2->coef;
			  			while(Rear->link&&Rear->link->expon>e)
			  				Rear=Rear->link;
			  			if(Rear->link&&Rear->link->expon==e){
			  				if(Rear->link->coef+c)
			  						Rear->link->coef+=c;
							else{
									t=Rear->link;
									Rear->link=t->link;
									free(t);
							} 
						  }
						  else{t=(Polynomial)malloc(sizeof(struct PolyNode));
						  		t->coef=c;t->expon=e;
						  		t->link=Rear->link;
						  		Rear->link=t;Rear=Rear->link;
						  }
			  			   t2=t2->link;
			  }
			  t1=t1->link;
	}
	t2=P;P=P->link;free(t2);
	return P; 
}
void PrintPoly(Polynomial P)
{//输出多项式 
		int flag=0;//辅助调整输出格式用
		if(!P) {printf("0 0\n"); return;}
		while(P){
			if(!flag)
					flag=1;
			else
					printf(" ");
			printf("%d %d",P->coef,P->expon);
			P=P->link;
		} 
		printf("\n");
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

PAT 一元多项式的乘法与加法运算(链表 c++版)

题目按照指数递减的顺序给出两个一元多项式,输出两个多项式的乘积,还有 和 ,按照指数递减的顺序。 用链表实现一元多项式的乘法与加法运算。 首先来看加法运算 多项式 poly1   x^4 +...
  • chaiwenjun000
  • chaiwenjun000
  • 2015年09月09日 22:45
  • 3517

7-1 一元多项式的乘法与加法运算(20 point(s))

7-1 一元多项式的乘法与加法运算(20 point(s)) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入...
  • codeswarrior
  • codeswarrior
  • 2017年11月10日 21:38
  • 204

用链表实现一元多项式的加法运算

#include using namespace std; struct Node { int coef; int exp; Node * next; Node(){coef=0;exp=0;...
  • fightingyxy
  • fightingyxy
  • 2016年02月26日 19:13
  • 2803

PTA--一元多项式的乘法与加法运算

这个问题耗时90分钟才搞定,其中主要的逻辑用时30分钟,调输出格式用时60分钟。。。 我想起来这是我为什么很抵触去写OJ题,很多情况下是你想明白了问题的解法,但是在最后的格式输出上不能完全匹配,便被...
  • u011240016
  • u011240016
  • 2016年10月04日 19:46
  • 1000

c++一元多项式的乘法和加法

首先是结点类:Term.h代码如下:#ifndef CH_H #define CH_H #include #include #include #include using namespace s...
  • tianjun2012
  • tianjun2012
  • 2014年03月26日 20:28
  • 1173

02-线性结构1 一元多项式的乘法与加法运算 (20分)

02-线性结构1 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降...
  • sysusyf
  • sysusyf
  • 2016年03月26日 16:51
  • 1322

5-2 一元多项式的乘法与加法运算 (20分)

5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多...
  • qq_26437925
  • qq_26437925
  • 2015年10月10日 10:33
  • 1113

PAT 3-04 一元多项式的乘法与加法运算(C语言实现)

题目描述: 设计函数分别求两个一元多项式的乘积与和。 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为...
  • wutongyu0113
  • wutongyu0113
  • 2014年10月03日 15:14
  • 1561

用链表实现一元多项式的加、减、乘、求导运算

在数据结构线性表的链表学习中有一个很有趣的题目:计算两个多项式的加、减、乘和多项式的导数。   题目不难,将多项式的系数和指数存进链表,然后进行相应操作即可。   一、加法:     1、判断指...
  • Jung_zhang
  • Jung_zhang
  • 2015年09月09日 15:27
  • 3361

02-线性结构2 一元多项式的乘法与加法运算 (20分)

设计函数分别求两个一元多项式的乘积与和。 输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。...
  • wanmeiwushang
  • wanmeiwushang
  • 2016年09月22日 18:43
  • 4110
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一元多项式加法与乘法运算链表实现
举报原因:
原因补充:

(最多只允许输入30个字)