应用实例

《一》多项式的加法运算实现

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;
}
复制代码

 

posted @   存在与虚无  阅读(111)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示