用链表表示多项式,并实现多项式的加法运算

这篇具有很好参考价值的文章主要介绍了用链表表示多项式,并实现多项式的加法运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

输入格式:

输入在第一行给出第一个多项式POLYA的系数和指数,并以0,0 结束第一个多项式的输入;在第二行出第一个多项式POLYB的系数和指数,并以0,0 结束第一个多项式的输入。

输出格式:

对每一组输入,在一行中输出POLYA+POLYB和多项式的系数和指数。

输入样例:

5,0 2,1 1,6 8,15 0,0
-2,1 3,6 4,8 0,0

输出样例:

5,0 4,6 4,8 8,15 

本题主要思路;

1.建立两个头指针分别为head1和head2链表,链表每一个节点分别记录每一个多项式的系数coef和指数exp.

2.preA遍历链表head1,preB遍历链表head2.

3.建立一个只有一个头节点的链表head,逐步遍历链表head1和head2.分别有如下三种情况

①preA->expexp,将节点preA利用尾插法插入链表head。

②preB->expexp,将节点preB利用尾插法插入链表head.

③preB->exp=preA->exp,这种情况分为两种

当preA->coef+preB->coef=0时:

释放节点preA和preB.

当preA->coef+preB->coef≠0时:

将多项式系数相同的项的指数相加,记录在preA,并利用尾插法将preA节点插如链表head.

相加的代码如下

 文章来源地址https://www.toymoban.com/news/detail-733744.html

void Add_Poly(PNode pa,PNode pb)
{
	PNode p = pa->next;    //链表1,和多项式的结果放在链表1中 
	PNode q = pb->next;
	PNode pre = pa;
	PNode u;
	float x;        //临时变量 
	while(p != NULL && q != NULL)
	{
		if(p->exp < q->exp)
		{
			//比较链表1和链表2当前节点的指数大小,链表1也是存放结果的地方
			pre = p;
			p = p->next;
			//p指向要比较的下一个节点,pre指向结果链表的最后一个节点 
		}
		else if(p->exp == q->exp)
		{
			//假如链表1和链表2的指数相等,则要系数相加
			x = p->coef + q->coef;
			if(x != 0)
			{
				//相加后的系数不是0,保留上一个节点就好了
				p->coef = x;
				pre = p; 
			 } 
			 else
			 {
			 	//相加后系数为0,不需要保留任何一个节点,删除链表1的节点
				 pre->next = p->next;
				 free(p); 
			 }
			 p=pre->next;     //p指向下一个节点
			 
			 //下面是进行链表2的删除工作
			 u = q;
			 q = q->next;
			 free(u); 
		}
		else
		{
			//如果链表2当前节点指数小,把链表2的当前节点加入到链表1中
			u = q->next;
			q->next = p;
			pre->next = q;
			pre = q;
			q = u; 
		}
	}
	if(q)
	{
		//如果链表2比链表1长,那么需要把链表2多余的部分加入到结果链表中
		//如果链表1比链表2长,则不需要任何操作
		pre->next = q; 
	}
	free(pb);
}	

完整代码如下:

#include<stdio.h>
#include<stdlib.h>

struct tagNode
{
	float coef;     //系数 
	int exp;        //指数
	struct tagNode *next;  //指针域 
};

typedef struct tagNode Node;
typedef struct tagNode *PNode;

void insertList(PNode head,PNode pnode)
{
	PNode pPre = head;
	while(pPre->next != NULL)
	{
		if(pPre->next->exp>pnode->exp)
		{
			pnode->next = pPre->next;
			pPre->next = pnode;
			break;
		}
		else
		{
			pPre = pPre->next;
		}
	}
	if(pPre->next == NULL)
	{
		pPre->next = pnode;
	}
}

void CreateList(PNode head)
{
	int exp;
	float coef;
	PNode pTemp = NULL;
	head->next = NULL;
	scanf("%f,%d",&coef,&exp);
	while(coef != 0 || exp != 0)
	{
		pTemp = (PNode)malloc(sizeof(struct tagNode));
		pTemp->coef = coef;
		pTemp->exp = exp;
		pTemp->next = NULL;
		insertList(head,pTemp);
		scanf("%f,%d",&coef,&exp);
	}
}

void printLinkedList(PNode head)
{
	PNode temp = head->next;
	while(temp != NULL)
	{
		printf("%0.0f,",temp->coef);
		printf("%d ",temp->exp);
		temp = temp->next;
	}
	printf("\n");
}

void Add_Poly(PNode pa,PNode pb)
{
	PNode p = pa->next;    //链表1,和多项式的结果放在链表1中 
	PNode q = pb->next;
	PNode pre = pa;
	PNode u;
	float x;        //临时变量 
	while(p != NULL && q != NULL)
	{
		if(p->exp < q->exp)
		{
			//比较链表1和链表2当前节点的指数大小,链表1也是存放结果的地方
			pre = p;
			p = p->next;
			//p指向要比较的下一个节点,pre指向结果链表的最后一个节点 
		}
		else if(p->exp == q->exp)
		{
			//假如链表1和链表2的指数相等,则要系数相加
			x = p->coef + q->coef;
			if(x != 0)
			{
				//相加后的系数不是0,保留上一个节点就好了
				p->coef = x;
				pre = p; 
			 } 
			 else
			 {
			 	//相加后系数为0,不需要保留任何一个节点,删除链表1的节点
				 pre->next = p->next;
				 free(p); 
			 }
			 p=pre->next;     //p指向下一个节点
			 
			 //下面是进行链表2的删除工作
			 u = q;
			 q = q->next;
			 free(u); 
		}
		else
		{
			//如果链表2当前节点指数小,把链表2的当前节点加入到链表1中
			u = q->next;
			q->next = p;
			pre->next = q;
			pre = q;
			q = u; 
		}
	}
	if(q)
	{
		//如果链表2比链表1长,那么需要把链表2多余的部分加入到结果链表中
		//如果链表1比链表2长,则不需要任何操作
		pre->next = q; 
	}
	free(pb);
}	
	
int main()
{
	PNode head1 = (PNode)malloc(sizeof(struct tagNode));
	PNode head2 = (PNode)malloc(sizeof(struct tagNode));
	CreateList(head1);
	CreateList(head2);
	Add_Poly(head1,head2);
	printLinkedList(head1);
	return 0;
	
}	
	

测试结果如下:

7-6 多项式的加法 分数 50 作者 张瑞霞 单位 桂林电子科技大学 用链表表示多项式,,链表,算法,数据结构 

 

 

到了这里,关于用链表表示多项式,并实现多项式的加法运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 多项式加法(用 C 语言实现)

    多项式加法(用 C 语言实现)

    目录 一、多项式的初始化 二、多项式的创建 三、多项式的加法 四、多项式的输出 五、清除链表 六、主函数 用链表实现多项式时,每个链表节点存储多项式中的一个非零项,包括 系数( coef ) 和 指数( exp )两个数据域 以及 一个指针域( next ) 。对应的数据结构定义为

    2024年02月01日
    浏览(7)
  • 第39关:基于链表的两个一元多项式的基本运算

    第39关:基于链表的两个一元多项式的基本运算

    任务描述 本关任务:给定两个一元多项式A(x)与B(x),利用链表表示A(x)与B(x),实现A(x)与B(x)的加法、减法、乘法和求导运算。 编程要求 输入 输入多组数据,总计n*( a+b+2)+1行。其中,第一行整数n代表总计有n组数据,之后依次输入n组数据。每组数据包括a+b+2行,其中第一行是两

    2024年02月06日
    浏览(10)
  • 数据结构:链表应用:第1关:基于链表的两个一元多项式的基本运算

    任务描述 本关任务:给定两个一元多项式A(x)与B(x),利用链表表示A(x)与B(x),实现A(x)与B(x)的加法、减法、乘法和求导运算。 编程要求 输入 输入多组数据,总计n*( a+b+2)+1行。其中,第一行整数n代表总计有n组数据,之后依次输入n组数据。每组数据包括a+b+2行,其中第一行是两

    2024年04月12日
    浏览(83)
  • 【C 数据结构】 用单链表存储一元多项式,并实现两个多项式相加运算。

    【C 数据结构】 用单链表存储一元多项式,并实现两个多项式相加运算。

    本次代码纯c语言,可以支持输入两个多项式的项式、系数、指数。 实验目的: 1 掌握单链表的基本工作原理; 2 实现链式存储下的两个多项式的相加。 实验步骤 1 定义链式存储的数据结构 2 完成多项式的初始化,即给多项式赋初值 3 完成多项式的输出 4 实现多项式的相加及结

    2024年02月06日
    浏览(15)
  • 【数据结构】一元多项式的表示及相加

    【数据结构】一元多项式的表示及相加

    📒博客主页: 程序员好冰 🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】 📌本文由 程序员好冰 原创,CSDN 首发! 📆入站时间: 🌴2022 年 07 月 13 日🌴 ✉️ 是非不入松风耳,花落花开只读书。 💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》 💬参考在线编程网

    2024年02月11日
    浏览(7)
  • 【链表应用】| 一元多项式的操作

    【链表应用】| 一元多项式的操作

    专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏 名字 Elasticsearch专栏 es spring专栏 spring开发 redis专栏 redis学习笔记 项目专栏 项目集锦 修bug专栏 bug修理厂 设有两个一元多项式: p(x)=p0+p1x+p2x2+···+pnxn q(x)=q0+q1x+q2x2+··

    2024年02月06日
    浏览(26)
  • 数据结构(严蔚敏)【一元多项式的运算】【C语言】

    数据结构(严蔚敏)【一元多项式的运算】【C语言】

    1、一元多项式的运算:实现两个多项式加、减乘运算 设计内容: 用顺序存储结构实现一元多项式的加法、减法和乘法。具体要求为:用五个函数分别实现一元多项式的创建、输出、加法、减法和乘法; 设计思路: 将顺序表数组下标作为多项式的指数项,数组内的数据元素

    2023年04月15日
    浏览(21)
  • 【ZZULI数据结构实验一】多项式的三则运算

    【ZZULI数据结构实验一】多项式的三则运算

    📃 博客主页: 小镇敲码人 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 什么?你问我答案,少年你看,下一

    2024年04月15日
    浏览(10)
  • 数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)

    数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)

    线性表的操作和应用(顺序存储)。用顺序存储实现一元多项式,并进行加、减、乘运算。 (1)一元多项式结构体创建  (2)初始化 (3)一元多项式赋值             (4)打印一元多项式 (5)加法运算                        (6)减法运算 (7)乘法运算    全部代

    2024年02月01日
    浏览(49)
  • 南京邮电大学数据结构实验一(线性表的基本运算及多项式的算术运算)(代码篇)

    小伙伴们要多多体会,不要全部借鉴哦!

    2024年02月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包