鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 5

如何将链表中的元素相加

[复制链接]
发表于 2021-3-9 17:04:48 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
使用线性表结构实现多项式求和运算
要求:
1、请分别使用顺序表和链表实现两个多项式的加法运算,其中多项式的项按指数从高到低排列。例如,输入形式为3  2 (为次数) -1  1  2  0。
测试样例:
样例1:
输入样例:
3  4  2  3  1  2(第一个多项式)
-2  3  4  2  5  1  6  0(第二个多项式)
输出样例:
3  4  5  2  5  1  6  0(求和结果)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-9 17:39:59 | 显示全部楼层
不太理解样例中的求和结果
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 22:41:33 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct Node{
  4.         int a;
  5.         int x;
  6.         struct Node *next;
  7. };


  8. int main(void){
  9.         struct Node *head1 = (struct Node*)malloc(sizeof(struct Node)); // 第一个多项式头指针
  10.         struct Node *head2 = (struct Node*)malloc(sizeof(struct Node)); // 第二个多项式头指针
  11.         head1->next = NULL; head2->next = NULL;
  12.         struct Node *tmp1 = head1, *tmp2 = head2;
  13.        
  14.         int len_head1, len_head2;
  15.         puts("请输入多项式1的项数: ");
  16.         scanf("%d", &len_head1);
  17.         puts("请输入多项式1:");
  18.         for(int i = 1; i <= len_head1; i++){
  19.                 struct Node *p = (struct Node*)malloc(sizeof(struct Node));
  20.                 scanf("%d%d",&p->a,&p->x);
  21.                 tmp1->next = p;
  22.                 tmp1 = p;
  23.         }
  24.         tmp1->next = NULL;
  25.        
  26.         puts("请输入多项式2的项数: ");
  27.         scanf("%d", &len_head2);
  28.         puts("请输入多项式2:");
  29.         for(int i = 1; i <= len_head2; i++){
  30.                 struct Node *p = (struct Node*)malloc(sizeof(struct Node));
  31.                 scanf("%d%d",&p->a,&p->x);
  32.                 tmp2->next = p;
  33.                 tmp2 = p;
  34.         }
  35.         tmp2->next = NULL;
  36.        
  37.         tmp1 = head1->next, tmp2 = head2->next;
  38.         struct Node *ans = (struct Node*)malloc(sizeof(struct Node));
  39.         ans->next = NULL;
  40.         struct Node *ans_head = ans;
  41.         while(tmp1 && tmp2){
  42.                 if(tmp1->x > tmp2->x) {
  43.                         struct Node *tmp = (struct Node *) malloc(sizeof(struct Node));
  44.                         tmp->x = tmp1->x;
  45.                         tmp->a = tmp1->a;
  46.                         ans_head->next = tmp;
  47.                         ans_head = tmp;
  48.                         tmp1 = tmp1->next;
  49.                 }
  50.                 else if(tmp2->x > tmp1->x){
  51.                         struct Node *tmp = (struct Node *) malloc(sizeof(struct Node));
  52.                         tmp->x = tmp2->x;
  53.                         tmp->a = tmp2->a;
  54.                         ans_head->next = tmp;
  55.                         ans_head = tmp;
  56.                         tmp2 = tmp2->next;
  57.                 }
  58.                 else {
  59.                         struct Node *tmp = (struct Node *) malloc(sizeof(struct Node));
  60.                         tmp->x = tmp1->x;
  61.                         tmp->a = tmp2->a + tmp1->a;
  62.                         ans_head->next = tmp;
  63.                         ans_head = tmp;
  64.                         tmp1 = tmp1->next;
  65.                         tmp2 = tmp2->next;
  66.                 }
  67.         }
  68.         if(tmp1) ans_head->next = tmp1;
  69.         if(tmp2) ans_head->next = tmp2;
  70.        
  71.         puts("答案为:");
  72.         ans_head = ans->next;
  73.         while(ans_head){
  74.                 if(ans_head->a) printf("%d %d ",ans_head->a, ans_head->x);
  75.                 ans_head = ans_head->next;
  76.         }
  77.         return 0;
  78. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 22:45:48 | 显示全部楼层
本帖最后由 baige 于 2021-3-9 22:48 编辑

这种写法感觉是比较容易想的,不用去太多考虑指针的指向;
随便写的,我也没有去释放内存空间,太久没有用C语言了
不清楚你的多项式要怎么结束输入,就加了个项数
屏幕截图 2021-03-09 224701.png

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

使用道具 举报

 楼主| 发表于 2021-3-9 23:13:00 From FishC Mobile | 显示全部楼层
是将不同多项式如5X(三次方)+3X+2,与另一多项式3X(四次方)+2X(三次方)想加
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-9 23:14:15 From FishC Mobile | 显示全部楼层
我是C++初学者,对于一些库函数啥的不是太了解,还请大佬指导
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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