实验2 一元多项式的运算(基于链表)

本文介绍了如何使用有序链表实现一元多项式的加法运算。通过分析问题,提出需要基于线性表操作,并利用有序链表进行存储。详细讲述了在链表数据录入时进行排序的方法,以优化相加过程。最后提供了相关代码实现。
摘要由CSDN通过智能技术生成

 

问题描述

Pn(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。

基本要求

需要基于线性表的基本操作来实现一元多项式的加法运算

需要利用有序链表来实现线性表。 (注意此处!顺序链表的意思就是你的节点数据必须是有序的!)

一、问题分析:

一元多项式就是说类似于这样的式子:2x^3+3x^6......未知数只有一个的式子。我的思路是基于链表来实现,两个多项式分别用链表去存储,计算得到的结果再用一个链表去存储,总共要使用三个链表。

二、具体实现:

怎么生成链表我就不说了,详见上一篇博客。接下来重点讲的是两个链表相加的情况,要是考虑不齐全就会出错。首先两个多项式的长度不一定相等,因此要分成一下三种情况:(1)两个多项式,只有多项式A;(2)两个多项式,只有多项式B(3)两个多项式存储在。因为要求实现是有序链表,因此两个多项式相加的时候,最好从最大的幂或者最大的系数开始加,具体何种顺序自己定,我这里是按照幂的大到小。

不多说,贴代码:

Link* Link::Add(Link* A,Link* B)
{
	Link* C = new Link;
	C->next = NULL;//创建一个C链表 
	Link* p1 = A->next;
	Link* p2 = B->next;
	Link* p3;
	Link* rearC=C;//初始化C链表(头尾一样,链表为空) 
	while(p1!=NULL&&p2!=NULL)//情况3
	{
		if(p1->exp>p2->exp)
		{
			p3 = new Link;//申请一个新节点
			p3->exp = p1->exp;
			p3->cofe = p1->cofe;
			p3->next=NULL;//方便下一个节点链接
			rearC->next=p3;//插入到C链表的尾部 
			rearC=p3;
			p1=p1->next ;//寻找下一个 
		}
		else if(p1->exp<p2->exp)
		{
			p3 = new Link;//申请一个新节点
			p3->exp = p2->exp;
			p3->cofe = p2->cofe;
			p3->next=NULL;//方便下一个节点链接
			rearC->next=p3;//插入到C链表的尾部 
			rearC=p3;
			p2=p2->next ;//寻找下一个 
		}
		else
		{ 
			if(p1->cofe+p2->cofe!=0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值