【结构与算法】一元多项式的相加运算
2021/9/29 11:10:50
本文主要是介绍【结构与算法】一元多项式的相加运算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一元多项式相加的具体实现:
在一元多项式相加的函数中。首先会要求传入两个已经创建好的一元多项式PA,PB,然后进行相加,实现PA=PA+PB的功能。
程序执行过程:只有在Pa和Pb都不为空的时候程序才会进行循环,因为一元多项式以链式线性表以指数升序存储。所以每次进入循环都会首先比较Pa和Pb中的需要比较的qa和qb中指数的大小。如果qa的指数小,则会ha和qa指针都后移,继续比较。如果qa和qb的指数相等,则会把qa和qb的系数进行相加并赋值给qa的系数。从而实现相同指数的系数相加,加完后将qb所指结点删除,同时qa后qb指针都后移。如果qa的指数比qb大,则把qb所在的结点链接到qa的前面。qb指针继续后移。进行循环。这是就这个加法的具体实现过程。在最后,如果qa已经为空,而qb不为空,则把qb剩下的结点都直接链接在PA的最后。释放hb的头结点。
原文链接:https://blog.csdn.net/qq_38265137/article/details/80317209
代码实现
`
include <stdio.h>
include <stdlib.h>
typedef struct
{
int coef;//系数
int expn;//指数
struct UNARY *next;
} UNARY;
//升幂的一元多项式的相加
UNARY *unaryAdd(UNARY LA,UNARY LB)
{
//LA作为输出链
UNARY r,s,p,q;
int cmp;
p = LA->next;//用于比较
q = LB->next;//用于比较
s = LA;//用于记录p的前置
r = LB;//用于记录q的后置
while(p!=NULL && q!=NULL) { if(p->expn<q->expn) cmp = -1; else if(p->expn>q->expn) cmp = 1; else cmp = 0; switch(cmp) { case -1: { s = p; p = p->next; }; break; case 0: { int x = p->coef+q->coef; if(x!=0) { p->coef = x; s = p p = p->next; } else { //删除LA节点 s->next = p->next; free(p); p = s->next; //删除LB节点 r->next =q->next; free(q); q = r->next; } }; break; case 1: { r->next = q->next; q->next = s->next; s->next = q; s = q; q = r->next; }; break; } } if(q!=NULL) { //前面的结束条件 p = null 所以 p的前置s位于链表的尾部,s连接q s->next = q; } free(LB); return LA;
}
`
这篇关于【结构与算法】一元多项式的相加运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding
- 2024-04-14出海软件草根逆袭打法是什么?
- 2024-04-13鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙
- 2024-04-11RAG应用开发实战(01)-RAG应用框架和解析器
- 2024-04-10DevOps已死?2024年的DevOps将如何发展
- 2024-04-10码农必看:常见源代码混淆技术详解
- 2024-04-07以一当十丨TiDB 在东吴证券秀财 APP 的应用实践
- 2024-04-07月活超 1.1 亿,用户超 4 亿,你也在用的「知乎」是如何在超大规模 TiDB 集群上玩转多云多活的?来听听知乎代晓磊的答案!