应用实例
《一》多项式的加法运算实现
P1=3X5+4X4-X3+2X-1
P2=2X4+X3-7X2+X
P=3X5+6X4-7X2+3X-1
多项式加法运算
采用不带头节点的单向链表,按照指数递减的顺序排列各项
struct PolyNode{ int coef;//系数 int expon;//指数 struct PolyNode *link; //指向下一个结点的指针 }; typedef struct PolyNode *Polynomial; Polynomial P1,P2;
算法思路:两个指针P1和P2分别指向这两个多项式第一个结点,不断循环;
*P1->expon==P2->expon:系数相加,若结果不0,则作为结果多项式对影响的系数。同时,P1和P2都分别指向下一项;
*P1->expon>P2->expon:P1的当前项存入结果多项式,并使P1指向下一项;
*P1->expon<P2->expon:将P2的当前项存入结果多项式,并使P2指向下一项;
当某一项处理完时,将另一个多项式的所有节点依次复制到结果多项式中去。
Polynomial PolyAdd(Polynomial P1,Polynomial P2) { Polynomial front,rear,temp; int sum; rear=(Polynomial)malloc(sizeof(struct PolyNode)); front=rear; while(P1&&P2) switch(Compare(P1->expon,P2->expon)){ case 1: Attach(P1->coef,P1->expon,&rear); P1=P1->link; break; case -1: Attach(P2->coef,P2->expon,&rear); P2=P2->link; break; case 0: sum=P1->coef+p2->coef; if(sum)Attach(sum,p1->expon,&rear); p1=p1->link; p2=p2->link; break; } for(;p1;p1=p1->link)Attach(p1->coef,p1->expon,&rear); for(;p2;p2=p2->link)Attach(p2->coef,p2->expon,&rear); rear->link=NULL; temp=front; front=front->link; free(temp); return front;
}
void Attach(int c,int e,Polynomial *pRear)
{ polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
p->coef=c;
p->expon=e;
p->link=NULL;
(*pRear)->link=p;
*pRear=P;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端