C语言实现一元多项式相加
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语言实现一元多项式相加相关推荐
- 一元多项式c语言顺序存储,一元多项式相加程序(C语言)
/* 2007-3-22 一元多项式的加法 */ # include # include # include typedef struct PolyNode { int coef; int ex ...
- c语言一元多项式相加
用单链表实现一元多项式相加 #include<stdio.h> #include<stdlib.h> typedef struct Node{float coef;//系数 i ...
- C语言一元多项式相加(链表)
今天写一个关于一元多项式相加的程序,就当是在练习运用一下链表的知识.首先,我们先来分析一波,一元多项式相加,首先要用链表创建两个或多个多项式,每个节点里的数据有两个,系数和指数:其次,如果要实现乱幂输 ...
- 数据结构 - 一元多项式相加减(C语言)
通常情况下,一元多项式可写成: an(x) = a1x^e1 + a2x^e2 + a3x^e3 + ... + amx^em (数字,m为下标),其中:pi是指数为ei的项的非零系数,0<= ...
- R语言构建广义相加模型(GAM:Generalized Additive Model)实战
R语言构建广义相加模型(GAM:Generalized Additive Model)实战 目录 R语言构建广义相加模型(GAM:Generalized Additive Model)实战
- c语言实现一元多项式的除法,课内资源 - 基于C++的一元多项式的计算
1 问题描述 将多个多项式输入并存储在内存中,然后对多项式进行加.减运算并输出结果. 2 数据结构描述一元多项式的表示方式:如 f=6x^5-7x^4+3 表示为 f=6,5 -7,4 3,0 每个多 ...
- 基于C++的一元多项式相加
资源下载地址:https://download.csdn.net/download/sheziqiong/85996014 资源下载地址:https://download.csdn.net/downl ...
- 数据结构——有序链表的合并,链表实现一元多项式相加
1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...
- 编写一个程序实现两个一元多项式相加的运算。
[问题描述]编写一个程序实现两个一元多项式相加的运算. [输入形式]从标准输入中读入四行数据, 其中第一行和第三行:各是是一个整数,表示第二行和第四行数据的个数: 第二行和第四行是若干个以空格分隔的整 ...
最新文章
- string类的实现终极版
- 【CodeForces - 999D】Equalize the Remainders(思维,贪心)
- mongodb-查询
- 【体系结构】Oracle的各种文件及其重要性
- python元祖组成字典_Python之旅第四天(列表、元祖、字典和习题)
- SQL Server 内存中OLTP内部机制概述(二)
- struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作
- Snort里如何将一个tcpdump格式的二进制文件读取打印到屏幕上(图文详解)
- Lambda表达式与委托
- linux服务器怎么安装证书,linux服务器证书安装指引
- 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
- smail语法 clinit和init的区别
- mac HBux连接夜神模拟器
- 吉他调音器(1)之十二平均律
- 如何正确薅华为云的羊毛
- MySQL 数据库单表查询——高级查询
- proc*c/c++简介
- 淘淘商城业务--加油
- 图像处理学习 灰度图像与二值图像
- 互联网、因特网、万维网、广域网、局域网、以太网的区别