期末复习——一元多项式的表示及运算

本文探讨了一元多项式的表示,如2+x^5+10x^{100},并介绍了如何使用线性表和单链表存储非零项。重点讲解了两个多项式相加的过程,通过定义指针遍历多项式,根据指数域判断同类项,进行系数相加或插入操作,实现多项式的合并。此外,还提到了算法的具体实现,包括输入系数和指数,利用尾插法构建一元多项式链表。

一个一元多项式pn(x)可按升幂的形式写成:
pn(x) = p0+p1X+p2X2+p3X3+…+pnXn
可以用线性表存储:(p0,p1,p2,…,pn

例:2+x5+10x100
可以只存储非0项,用单链表存储多项式的结点结构:

typedef struct Polynode{
	int coef; 
	int exp; 
	Polynode *next;
}Polynode,*Polylist;

两个多项式相加

A(x) = 7+3x+9x8+5x17
B(x) = 8x+22x7-9x8

在这里插入图片描述
定义两个指针p,q分别指向两个多项式的第一个元素,判断p,q指向的指数域是否相同,相同就是同类项,系数加起来,然后释放另一个表里的同类项,没有同类项的直接插入到尾结点的位置。

在这里插入图片描述

  • 若p->exp < q->exp,则结点p所指的结点应是“和多项式”中的一项,令指针p后移;
  • 若p->exp = q->exp,则将两个结点中的系数相加,当和不为零时修改结点p的系数域,释放q结点;若和为零,则和多项式中无此项,从A中删去p结点,同时释放p和q结点;
  • 若p->exp > q->exp,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。

算法实现

输入多项式的系数和指数,用尾插法建立一元多项式的链表。

Polylist polycreate(){
	Polynode *head,*rear,*s; 
	int c,e; 
	rear=head=(Polynode *)maloc(sizeof(Polynode)); 
	scanf("%d,%d",&c,&e); 
	while(c!=0){
		s=(Polynode*)malloc(sizeof(Polynode); 
		s->coef=c; 
		s->exp=e; 
		rear->next=s; 
		rear=s; 
		scanf("%d,%d",&c,&e);
	} 
	rear->next=NULL; 
	return(head);
}

两个多项式相加

void polyadd(Polylist polya,Polylist polyb){
	.../*p和q分别指向polya和polyb链表中的当前计算结点*V*/
	.../*rear指向和多项式链表中的尾结点*/
	while(p!=NULL&&q!=NULL)
	{
		if(p->exp<q->exp)
		{.../*将p结点加入到和多项式中*/)}
		else if(p->exp==q->exp)
		{.../*若指数相等,则相应的系数相加。
		若系数为0则删除p,q节点*/}
		else
		{.../*将q结点加入到和多项式中*/}
	}
	/*将多项式polya或polyb中剩余的结点加入到和多项式中*/
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值