多项式的规范化,采用单链表,使用C语言实现,gcc调试通过。
//该程序是为了将无序的、不规范的多项式进行规范化而写的。
#include<stdio.h>
#include<stdlib.h>
#define N 8 //指明多项式数据项的数目
int GetLength(); //获得单链表的长度
void Print(); //打印出单链表的节点数据
typedef struct multinomialnode //定义存储多项式数据项的节点的结构体
{
int coefficient,power; //定义系数和幂
struct multinomialnode *next;
}node;
node *Create(int num) //创建存储多项式的链表
{
int i;
node *head,*pointer,*tmp;
head=(node*)malloc(sizeof(node));
if(head!=NULL) pointer=head;
printf("请依次输入要处理的多项式元素的系数和幂:\n");
for(i=0;i<num;i++)
{
printf("请输入第 %d 个元素的系数和幂:\n",i+1);
tmp=(node*)malloc(sizeof(node));
if(tmp!=NULL)
{
scanf("%d%d",&tmp->coefficient,&tmp->power);
tmp->next=NULL;
pointer->next=tmp;
pointer=tmp;
}
}
return(head);
}
node *Standard(node *head) //对多项式进行规范化的过程
{
int i;
node *pointer,*pre,*cur,*tmp,*q;
pointer=head->next; //代表用于比较及合并相同幂的节点,也用于条件判断,控制循环
pre=pointer; //代表被比较的节点的上一个节点的指针,用于链接节点的操作,从而构造新的链表
cur=pointer->next; //代表被比较的节点,也用于条件判断,控制循环
while(pointer->next!=NULL) //合并无序多项式中具有相同幂的节点,并将被合并后的节点删除
{
while(cur!=NULL)
{
if(pointer->power==cur->power) //相等则合并,同时删除被合并过的节点
{
pointer->coefficient+=cur->coefficient; //合并具有相同幂的项的系数
q=cur;
cur=cur->next;
pre->next=cur;
free(q); //释放内存
}
else //不等则指向被比较的节点及其上一节点的指针均后移
{
cur=cur->next;
pre=pre->next;
}
}
pointer=pointer->next; //后移
pre=pointer; //重新初始化
cur=pointer->next; //重新初始化
}
Print(head); //打印出上面while以后构造成的多项式
for(i=0;i<GetLength(head);i++) //将上一步while完成以后得到多项式进一步规范化,使之按数据项的幂由大到小依次排列
{
pre=head; //代表指向当前节点的指针的上一指针,用于交换节点的操作
cur=head->next; //代表指向当前节点的指针,用于比较
tmp=cur->next; //代表指向当前节点的下一节点的指针,用于比较和条件判断
while(tmp!=NULL)
{
if(cur->power<tmp->power) //如果当前数据项的幂小于其后紧邻的数据项的幂,则交换两个节点在链表中的位置,然后改变指针使重新指向
{
pre->next=tmp;
cur->next=tmp->next;
tmp->next=cur;
pre=tmp;
tmp=cur->next;
}
else //如果条件相反的话,直接后移这三个指针
{
pre=pre->next;
cur=cur->next;
tmp=tmp->next;
}
}
}
return(head);
}
int GetLength(node *head) //获得单链表的长度
{
int i=0;
node *pointer;
pointer=head->next;
while(pointer!=NULL)
{
i++;
pointer=pointer->next;
}
return i;
}
void Print(node *head) //打印出单链表的节点数据
{
int i=0;
node *pointer;
pointer=head->next;
printf("\n新的多项式系数和幂表示如下:\n");
while(pointer!=NULL)
{
i++;
printf("第 %d 个数据元素的系数为:%d,幂为:%d\n",i,pointer->coefficient,pointer->power);
pointer=pointer->next;
}
}
int main()
{
node *multinomial;
multinomial=Create(N);
Print(multinomial);
multinomial=Standard(multinomial);
Print(multinomial);
return 0;
}
调试环境:Ubuntu Desktop 8.04.4 VI 7.1.138 GCC 4.2.4
QQ:81064483
E-mail:AllenNewOK@126.com
复习之用,不足之处,烦请高手们指点。< ^_^ >
分享到:
相关推荐
请实现求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)、M(x)=Am(x)×Bn(x)以及计算M(x)=0的根,计算多项式在x处的值,求多项式M的导函数M,并将结果保存在文本文件中。 (3)多项式的输出形式为类数学表达式。例如,多项式...
链表是一种动态数据结构,每个节点包含数据元素(多项式的系数和指数)以及指向下一个节点的指针。这样的设计允许我们在运行时轻松地添加、删除和修改多项式的项,而无需预先确定多项式的长度。 在给定的文件中,`...
在本文中,我们将深入探讨如何使用C语言通过链表数据结构来实现一元多项式的相加。这个主题涉及计算机科学的基础知识,特别是针对数据结构、算法以及编程语言的理解。 一元多项式通常由一系列的项组成,每个项包括...
C语言计算厄密多项式 例如,H3(2)的值是40。请编写一个递归函数,计算Hn(x)的值。你的函数应该与下面的原型匹配: int hermite( int n, int x); Hermite polynomials用于物理学和统计学。它们也可以作为递归练习在...
数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算 本篇文章主要讲述了使用单链表存储一元多项式,并实现两个多项式的相加运算的算法和实现细节。 一、单链表的声明和实现 在C语言中,单链表是...
"多项式集成计算_c_多项式集成计算_"这个项目显然涉及到使用C语言实现多项式的加法、减法和乘法操作。C语言是一种底层、高效且灵活的编程语言,非常适合处理这种数学计算任务。 首先,我们要理解什么是多项式。在...
在本项目“数据结构之多项式_C++_”中,我们聚焦于使用C++实现对多项式的数据结构及其计算的优化。C++是一种强大的、通用的编程语言,特别适合处理复杂的数据结构和算法。 多项式是数学中的一个重要概念,通常表示...
最近在学数据结构,讲完单链表后老师就布置了一个这样的答辩作业。代码附上啦,大多地方都添加了注释,要交作业的同学可以看一看。 实现要求: 1)两个一元稀疏多项式进行存储,并实现加法运算。 2)使用单链表的...
单链表的接本操作,有在单链表中插入,删除数据的功能,以及...1.单链表的数据结构的建立实现。 2.单链表元素结点插入操作实现。 3.单链表元素结点删除操作实现。 4.实现单链表的合并。 5.实现一元多项式的相加。
"Zernike_pvrms_多项式系数_zernike拟合_zernike多项式_zernike_"这个标题提到了几个关键概念,包括Zernike多项式的多项式系数、RMS(均方根)和PV(峰值到谷值)值的计算,以及拟合过程。下面我们将深入探讨这些...
它的语法简洁明了,允许直接操作内存,因此非常适合实现数据结构和算法。在处理多项式运算时,C语言提供了一种灵活的方式来表示和操作数学表达式。 多项式是由常数、变量和这些元素的乘积组成的数学表达式,例如 \...
总之,使用C语言和单链表实现多项式的相加是一个典型的计算机科学问题,它涉及到数据结构的使用、链表的操作以及算法设计。理解这个过程可以帮助你提升在算法和数据结构领域的知识,这对任何IT职业都是非常重要的。
MATLAB作为一种强大的数值计算和可视化工具,提供了丰富的函数库支持多项式拟合。多项式拟合是一种通过拟合数据点到多项式函数来逼近数据趋势的方法。例如,一个一阶多项式为直线,二阶多项式为抛物线,依此类推。在...
在IT领域,尤其是在计算机科学与数据结构相关的课程中,一元稀疏多项式简单计算器的设计是一个重要的实践课题。本文将详细解析这个主题,探讨稀疏多项式计算的原理及其在简单计算器中的应用。 首先,我们需要理解...
通过这种单链表实现,我们可以高效地处理多项式求和问题,特别是在处理大量项或者需要频繁进行加法运算时,链表的动态性优势尤为明显。同时,这种实现方式也便于扩展,例如,可以轻松地添加对减法、乘法等其他运算的...
在图像处理领域,"tuxiangpeizhun.zip_双线性内插_多项式几何_控制点多项式_校正_配准校正"这个压缩包文件涉及到的关键技术主要包括双线性内插、多项式几何校正模型、控制点多项式以及图像的配准与校正。下面将详细...
在编程领域,链表是一种非常基础且重要的数据结构,它被广泛用于实现各种算法和数据管理。在这个场景中,我们讨论的是如何使用C++通过链表来实现多项式的加、减、乘、除运算。首先,我们需要理解链表的基本概念以及...
本主题将深入探讨如何使用C语言的链表数据结构来实现一元多项式的操作。 首先,我们需要理解链表的概念。链表是一种动态数据结构,它的元素(节点)在内存中不是顺序排列的,而是通过指针互相链接。对于一元多项式...
在MATLAB中,多项式数据拟合是一种常用的数据分析方法,用于寻找一组多项式函数来最佳地逼近数据点。这个过程对于理解数据趋势、预测未来值以及去除噪声都非常有用。`matlabfit`函数是MATLAB中进行多项式拟合的一个...
本主题主要关注的是使用多项式函数进行高程拟合,特别是通过GPS数据实现这一过程。下面将详细探讨这一技术及其在Matlab中的实现。 一、高程拟合的概念 高程拟合是指根据一系列离散的高程点,通过数学方法构建一个...