鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: lemon3

[已解决]一元多项式相加问题(C语言实现数据结构)

[复制链接]
发表于 2018-12-25 02:28:42 | 显示全部楼层
本帖最后由 Croper 于 2018-12-25 02:30 编辑

我用Dev改了个scanf_s就没问题了啊

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-25 02:53:49 | 显示全部楼层
刚刚忘了改纯C环境,这下可以了
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int bool;
  4. #define true 1
  5. #define false 0

  6. typedef struct node
  7. {
  8.         int    coef, exp;
  9.         struct node  *next;
  10. } NODE;

  11. NODE * multiplication(NODE *, NODE *);
  12. void input(NODE *);
  13. void output(NODE *);

  14. NODE* Link(NODE* p,int i)   //?????,???i???,i?0??
  15. {
  16.         int j;
  17.     for (j = 0; j <= i; j++)
  18.     {
  19.         p = p->next;
  20.         if (p == NULL) return NULL;
  21.     }
  22.     return p;
  23. }
  24. int Length(NODE* p)      //?????,????,
  25. {
  26.         int j=0;
  27.         while (p->next != NULL)
  28.         {
  29.                 j++;
  30.                 p = p->next;

  31.         }
  32.         return j;
  33. }

  34. void Append(NODE* p, int coef0, int exp0)  //???????????????????,
  35. {
  36.         p->next = (NODE*)malloc(sizeof(NODE));
  37.         p = p->next;
  38.         p->coef = coef0;
  39.         p->exp = exp0;
  40.         p->next=NULL;
  41. }

  42. void DeleteLinklist(NODE* head)  //????
  43. {
  44.         NODE *pPre;
  45.         while (head != NULL)
  46.         {
  47.                 pPre = head;
  48.                 head = head->next;
  49.                 free(pPre);
  50.         }
  51. }

  52. NODE * multiplication(NODE *p1, NODE *p2)   //????
  53. {
  54.         NODE* ans,*p3;
  55.         NODE* Temp1,* Temp2;
  56.         int i,j;
  57.         p3 = (NODE*)malloc(sizeof(NODE));     //????p3
  58.         ans = p3;          //ans??p3????,????
  59.         int len = Length(p1) + Length(p2)-1;    //p3?????=?????????
  60.         for (i = 0; i < len; i++)           //????p3????
  61.         {
  62.                 Append(p3, 0, i);
  63.                 p3=p3->next;
  64.                 for (j = 0; j <= i; j++)
  65.                 {
  66.                         Temp1 = Link(p1,j);            
  67.                         Temp2 = Link(p2, i - j);
  68.                         if ((Temp1!=NULL)&&(Temp2!=NULL)) p3->coef += (Temp1->coef*Temp2->coef);
  69.                 }
  70.         }
  71.         return ans;
  72. }

  73. void input(NODE * p)   //?????,?????????
  74. {
  75.         int a, b;
  76.         int i = 0;

  77.         rewind(stdin);
  78.         while(scanf("<%d,%d>,", &a, &b))    //????,????????a?b?
  79.         {
  80.                 for (i; i < b; i++)
  81.                                 {
  82.                                         Append(p, 0, i);   //????,????=b
  83.                                         p=p->next;
  84.                                 }
  85.                 Append(p, a, b);                       //??
  86.                 p=p->next;
  87.                 i++;
  88.         }

  89. }

  90. void output(NODE * head)
  91. {
  92.         bool b = false;                                    //???????????
  93.         while (head->next != NULL)
  94.         {
  95.                 head = head->next;
  96.                 if (head->coef != 0)
  97.                 {
  98.                         b = true;                                           //??????????0,????????
  99.                         printf("<%d,%d>,", head->coef, head->exp);
  100.                 }
  101.         }
  102.         if (!b) printf("<0,0>,");                                 //??????????,?????0???,??<0,0>
  103.         printf("\n");
  104. }

  105. int main()
  106. {
  107.         int i;
  108.         NODE * head1, *head2, *head3;

  109.         head1 = (NODE *)malloc(sizeof(NODE));
  110.         input(head1);

  111.         head2 = (NODE *)malloc(sizeof(NODE));
  112.         input(head2);

  113.         head3 = multiplication(head1, head2);

  114.         output(head3);
  115.         
  116.         DeleteLinklist(head1);
  117.         DeleteLinklist(head2);
  118.         DeleteLinklist(head3);
  119.         return 0;
  120. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-25 02:57:03 | 显示全部楼层
症结在与你把。。。。Append(NODE*& p,..)的引用符号删了,删除了之后你又没有手动加一个移位,这样只会在一个地方反复读,当然什么东西都出不来
C语言里不能这么玩我不知道是我的问题。。。但是你也要知道你到底干了点啥啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-25 11:37:11 | 显示全部楼层
Croper 发表于 2018-12-25 02:57
症结在与你把。。。。Append(NODE*& p,..)的引用符号删了,删除了之后你又没有手动加一个移位,这样只会在 ...

谢谢大哥!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-25 13:42:24 | 显示全部楼层

请问这个有没有不改变预设代码写的方法?!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 18:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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