鱼C论坛

 找回密码
 立即注册
查看: 6893|回复: 3

一元多项式加法

[复制链接]
发表于 2017-10-20 11:02:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>

  4. //定义结构体变量  一元多项式 系数 指数 下一个节点
  5. typedef struct PolyNode
  6. {
  7.         float coaf;//系数
  8.         int exp;//指数
  9.         struct PolyNode *link;//指针域

  10. }PolyNode,*PolyLinkList;


  11. //后插法创建两个单链表
  12. struct PolyNode *creatListF(int n)
  13. {
  14.        
  15.        
  16.         struct PolyNode *head,*q,*r;//q 新增加的节点  r 当前节点
  17.         int coef,exp,i;
  18.         head =(struct PolyNode *)malloc (sizeof(struct PolyNode));
  19.         r=head;
  20. for(i=1;i<n;i++)
  21. {
  22.         scanf("%f%d",&coef,&exp);
  23.         q=(struct PolyNode *)malloc (sizeof(struct PolyNode));
  24.         r->link=q;
  25.         q->coaf=coef;
  26.         q->exp=exp;
  27.         r=q;
  28.        
  29. }
  30.         r->link=NULL;
  31.         return head;
  32. }



  33. //算法 多项式相加
  34. struct PolyNode *add_poly(struct PolyNode *AH,struct PolyNode *BH)
  35. {
  36.         struct PolyNode *p1,*q1,*r,*s;//A、B链表的当前指针 和链表的当前指针 S指向要删除的节点
  37.         p1=AH->link;//第一个节点
  38.         q1=BH->link;
  39.         r=AH->link;
  40.         while(p1!=NULL&&q1!=NULL)
  41.         {
  42.                         //判断 指数是否相等
  43.                         if(p1->exp==q1->exp)
  44.         {
  45.                 //判断系数相加是否为零
  46.                 int x = q1->exp+q1->exp;
  47.                 if(x!=0)
  48.                 {
  49.                         //p1系数改变 和链表头结点指向p1 q1对应free q1 指向后移  q1指向后移
  50.                         p1->coaf=x;
  51.                         r->link=p1;
  52.                         r=p1;
  53.                         p1=p1->link;
  54.                         s=q1;
  55.                         free(s);
  56.                         q1=q1->link;
  57.                 }
  58.                 else
  59.                 {//两个链表的当前指针同时后移
  60.                         s=p1;free(s);p1=p1->link;
  61.                         s=q1;free(s);q1=q1->link;

  62.                 }
  63.         }
  64.         else if(p1->exp<q1->exp)
  65.         {
  66.                 //和链表指向拥有指数小节点的链表
  67.                 r->link=p1;r=p1;p1=p1->link;

  68.         }
  69.         else
  70.         {
  71.                 r->link=q1;r=q1;q1=q1->link;
  72.         }//剩余节点
  73.         if(p1!=NULL){r->link=p1;};
  74.         if(q1!=NULL){r->link=q1;};
  75.         }
  76.         free(BH);
  77.         return AH;
  78. }

  79. //遍历
  80. void DispList(PolyNode *l)
  81. {
  82.         //输出每一个节点
  83.         //p为当前节点
  84.         PolyNode *p = l->link;
  85.         while(p!=NULL)
  86.         {
  87.                 printf("%fx%d",p->coaf,p->exp);
  88.                 p=p->link;
  89.         }
  90.         printf("\n");
  91. }
  92. int main ()
  93. {
  94.         PolyNode *A;
  95.         PolyNode *B;
  96.        
  97.         A=creatListF(5);
  98.         DispList(A);
  99.         printf("\n");
  100.        
  101.         B=creatListF(5);
  102.         DispList(B);
  103.         printf("\n");
  104.        
  105.         add_poly(A,B);
  106.         DispList(A);
  107.        
  108.         return 0;

  109. }
复制代码



不知道为什么输出结果是这样的

数据的格式出了什么问题吗 还是我的程序写得有问题

数据的格式出了什么问题吗  还是我的程序写得有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 18:16:32 | 显示全部楼层
21行,
  1. int coef,exp,i;;
复制代码
改成
  1. float ceof;
复制代码

display函数改成:
  1. void DispList(PolyNode *l)
  2. {
  3.     //输出每一个节点
  4.     //p为当前节点
  5.     PolyNode *p = l->link;
  6.     while (p->link != NULL)
  7.     {
  8.         printf("%.1fx^%d + ", p->coaf, p->exp);
  9.         p = p->link;
  10.     }
  11.     printf("%.1fx^%d", p->coaf, p->exp);
  12.     printf("\n");
  13. }
复制代码

QQ截图20171022181617.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-24 14:46:02 | 显示全部楼层
Crazy_Snail 发表于 2017-10-22 18:16
21行,改成
display函数改成:

谢谢   不过能不能给我解释一下为什么么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 07:34:23 | 显示全部楼层
看来还有很多东西要学习啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 23:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表