C语言 链表实现一元多项式相加

  • 这里的代码复制后,可以直接运行,按照规定的输入即可得出多项式的结果。

问题描述

  • 设计一种单链表存储结构,每个节点成员有一个系数和一个指数,以及下一个节点的指针,数据类型都是整型,要求:实现多项式输入、相加、输出相加后的多项式。

规则:输入时逐项、按顺序输入一元多项式的系数、指数,输入系数为 0时表述输入结束,如 p(x)=5+2x+3x5−2x7规则:输入时逐项、按顺序输入一元多项式的系数、指数,输入系数为\ 0\ 时表述输入结束,如 \ p(x)=5+2x+3x^5−2x^7 规则:输入时逐项、按顺序输入一元多项式的系数、指数,输入系数为 0 时表述输入结束,如 p(x)=5+2x+3x5−2x7

​ 即输入: 5 0 2 1 3 5 -2 7 0 0
举例:

A(x)=5+2x+3x^5 −2x^7
B(x)=12x+2x^7 +13x^15
则结果多项式为:
C(x)=5+14x+3x^5 +13x^15

  • 这里构建链表创建函数,带头结点的链表,除了头指针,每一个节点存放一个系数和一个指数,通过循环实现输入并存到链表中,最后返回链表的头指针。
#include <stdlib.h>
#include <stdio.h> //存放多项式某项的结点结构
struct node
{int exp ;  // 表示指数int coef ; //表示系数struct node *next;  //指向下一个结点的指针
};typedef  struct node * PNODE ;/*函数功能:生成多项式函数名:createPoly函数参数:无返回值:指向多项式的头指针
*/
PNODE createPoly(void)
{//在此处填写代码,能实现创建一个多项式并返回多项式头指针的函数//注意:头指针不存放多项式的项。 /**********  Begin **********/PNODE head, temp;int coef, exp;scanf("%d", &coef);scanf("%d", &exp);head=(PNODE)malloc(sizeof(struct node));if(head==NULL)return 0;head->next=NULL; temp=head;while(coef!=0 || exp!=0){PNODE p = (PNODE)malloc(sizeof(struct node));if(p==NULL) return 0;p->next=NULL;p->coef=coef;p->exp=exp;if(head->next==NULL){temp->next=p;temp=p;}else if(temp->next==NULL){temp->next = p;temp=p;}scanf("%d", &coef);scanf("%d", &exp);} return head;/**********  End  **********/
} 
  • 下面函数addPoly()用于实现两个多项式相加,创建存放相加结果的链表temp,进入循环,只有AB多项式都为空时跳出,判断其中一个多项式当前节点是否为空,若为空,则当前节点往后相加的结果就是另一个多项式;如果不为空的话,判断对应节点的指数是否相同,相同,再判断当前系数和是否为零,若为零,则AB往下一个节点,temp不存返回结果为零的节点,保持原位,若不为零,temp存放两个节点相加的结果,然后都往下一个节点;如果其中一个多项式的节点指数比另一个指数小,则将小的多项式对应的节点存放到temp中去;所有结果考虑完了,跳出循环,并返回相加后的多项式的的头指针。
/*函数功能:进行多项式相加函数名:addPoly函数参数:polyAddLeft :加法左边多项式头指针, polyAddRight:加法右边多项式头指针 返回值:指向结果多项式的头指针
*/
PNODE addPoly(PNODE polyAddLeft , PNODE polyAddRight)
{//在此处填写代码,能实现创两个多项式相加并返回结果多项式头指针的函数/**********  Begin **********/PNODE p, q;PNODE tail, temp;
//  PNODE tail, temp=(PNODE)malloc(sizeof(struct node));
//  temp->next=NULL;
//  if(temp==NULL) return 0;int sum=0;p=polyAddLeft->next;q=polyAddRight->next;tail=p;while(p||q){if(p->exp > q->exp){temp=q;q->next=tail->next;tail->next=q;tail=tail->next;q=q->next;free(temp);}else if(p->exp < q->exp){tail=tail->next;p=p->next;    }else{sum=p->coef + q->coef;if(sum!=0){temp=p;p->coef=sum;tail=tail->next;p=p->next;temp=q;q=q->next;free(temp);}else{temp=p;p=p->next;free(temp);temp=q;q=q->next;free(temp);}}} if(p) tail->next=p;else tail->next=q;free(polyAddRight);return polyAddLeft;/**********  End **********/
}  
  • 下面是链表输出函数、销毁函数、主函数的创建。
/*函数功能:输出多项式 函数名:printPoly函数参数:待输出多项式的头指针poly 返回值:无
*/void printPoly(PNODE poly){//在此处填写代码,能实现按格式输出多项式的功能,输出格式样例见说明 /**********  Begin **********/PNODE p;p=poly->next;while(p){if(p->next==NULL)printf("%dx^%d", p->coef, p->exp);elseprintf("%dx^%d + ", p->coef, p->exp);p = p->next;}/**********  End **********/
}  void destroyPoly(PNODE poly)
{
//释放存储多项式的链表空间PNODE p=poly, temp;while(p!=NULL){temp=p;p=p->next;free(temp);}
}int main(void)
{PNODE p, q, poly;p=createPoly();
//  printPoly(p);q=createPoly();
//  printPoly(q);poly=addPoly(p, q);printPoly(poly);destroyPoly(poly);return 0;
}

下面是结果测试

输入:
5 0 2 1 3 5 -2 7 0 0
12 1 2 7 13 15 0 0输出:
5x^0+14x^1+3x^5+13x^15终端exe
5 0 2 1 3 5 -2 7 0 0
12 1 2 7 13 15 0 0
5x^0+14x^1+3x^5+13x^15
--------------------------------
Process exited after 1.164 seconds with return value 0
请按任意键继续. . .

到此就完成了一元多项式的相加了,觉得有用的小伙伴记得点个赞噢,嘿嘿~

C语言实现一元多项式相加相关推荐

  1. 一元多项式c语言顺序存储,一元多项式相加程序(C语言)

    /* 2007-3-22 一元多项式的加法 */ # include # include # include typedef struct  PolyNode { int  coef; int  ex ...

  2. c语言一元多项式相加

    用单链表实现一元多项式相加 #include<stdio.h> #include<stdlib.h> typedef struct Node{float coef;//系数 i ...

  3. C语言一元多项式相加(链表)

    今天写一个关于一元多项式相加的程序,就当是在练习运用一下链表的知识.首先,我们先来分析一波,一元多项式相加,首先要用链表创建两个或多个多项式,每个节点里的数据有两个,系数和指数:其次,如果要实现乱幂输 ...

  4. 数据结构 - 一元多项式相加减(C语言)

    通常情况下,一元多项式可写成: an(x) = a1x^e1 + a2x^e2 + a3x^e3 + ... + amx^em (数字,m为下标),其中:pi是指数为ei的项的非零系数,0<= ...

  5. R语言构建广义相加模型(GAM:Generalized Additive Model)实战

    R语言构建广义相加模型(GAM:Generalized Additive Model)实战 目录 R语言构建广义相加模型(GAM:Generalized Additive Model)实战

  6. c语言实现一元多项式的除法,课内资源 - 基于C++的一元多项式的计算

    1 问题描述 将多个多项式输入并存储在内存中,然后对多项式进行加.减运算并输出结果. 2 数据结构描述一元多项式的表示方式:如 f=6x^5-7x^4+3 表示为 f=6,5 -7,4 3,0 每个多 ...

  7. 基于C++的一元多项式相加

    资源下载地址:https://download.csdn.net/download/sheziqiong/85996014 资源下载地址:https://download.csdn.net/downl ...

  8. 数据结构——有序链表的合并,链表实现一元多项式相加

    1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...

  9. 编写一个程序实现两个一元多项式相加的运算。

    [问题描述]编写一个程序实现两个一元多项式相加的运算. [输入形式]从标准输入中读入四行数据, 其中第一行和第三行:各是是一个整数,表示第二行和第四行数据的个数: 第二行和第四行是若干个以空格分隔的整 ...

最新文章

  1. string类的实现终极版
  2. 【CodeForces - 999D】Equalize the Remainders(思维,贪心)
  3. mongodb-查询
  4. 【体系结构】Oracle的各种文件及其重要性
  5. python元祖组成字典_Python之旅第四天(列表、元祖、字典和习题)
  6. SQL Server 内存中OLTP内部机制概述(二)
  7. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作
  8. Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
  9. Lambda表达式与委托
  10. linux服务器怎么安装证书,linux服务器证书安装指引
  11. 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
  12. smail语法 clinit和init的区别
  13. mac HBux连接夜神模拟器
  14. 吉他调音器(1)之十二平均律
  15. 如何正确薅华为云的羊毛
  16. MySQL 数据库单表查询——高级查询
  17. proc*c/c++简介
  18. 淘淘商城业务--加油
  19. 图像处理学习 灰度图像与二值图像
  20. 互联网、因特网、万维网、广域网、局域网、以太网的区别

热门文章

  1. iconfont 使用
  2. 笔记:caffe安装编译,并用ssd gpu训练自己的数据集
  3. simulink代码生成
  4. 遍历列表python_Python-遍历列表中的每两个元素
  5. 判断iPhone 硬件设备型号
  6. 解决了一个Web网页显示不全的BUG
  7. IBM Personal System/2 —— 25年的PC历史
  8. element 时间选择器禁止选择以前或以后的时间
  9. 安卓apk解析包失败,重新签名
  10. TUTK摄像头配网方式之AP模式配网