一元多项式的表示及相加

符号多项式的操作,已经成为表处理的典型用例,在数学上,一个一元多项式Pn(x)可按升幂写成:

Pn(x)=p0+p1x1+p2x2+p3x3+…+pnxn

它由n+1个系数惟一确定。因此,在计算机里,它可用一个线性表P来表示:

P=(p0,p1,p2,p3,…,pn)

每一项的指数i隐含在其系数pi的序号里。

本节内容将主要讨论如何利用线性链表的基本操作为实现一元多项式的运算。

利用线性链表的基本操作来实现一元稀疏多项式的运算,实现抽象数据类型Polynomial。


ADT Polynomial{
数据对象:D={ ai | ai∈TermSet, i=1,2,...,m,  m≥0 
TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}
数据关系:R1={ <ai-1, ai>|ai-1, ai∈D, 且ai-1中的指数值<ai中的指数值,i=2,……,n}
基本操作:
     CreatPolyn(&P,m)
操作结果:输入m项的系数和指数,建立一元多项式P。
     DestroyPolyn(&P)
初始条件:一元多项式P已存在。
操作结果:销毁一元多项式P。
     PrintPolyn(P)
初始条件:一元多项式P已存在。
操作结果:打印输出一元多项式P。
     PolynLength(P)
初始条件:一元多项式P已存在。
操作结果:返回一元多项式P中的项数。
    AddPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相加运算,即:Pa=Pa+Pb,并销毁一元多项式Pb。
    SubtractPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb。
    MultiplyPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相乘运算,即:Pa=Pa×Pb,并销毁一元多项式Pb。
}ADT Polynomial

实现上述定义的一元多项式,显然应采用链式存储结构。如何实现用这种线性表表示的多相式的加法运算。

根据一元多项式相加的运算规则:对于两个一元多项式所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。

时间: 2024-10-03 14:55:42

一元多项式的表示及相加的相关文章

第二章:5.线性表应用---一元多项式的表示及相加

前言: 学习了线性表的 顺序结构 和链式结构,那么这种学习有什么用? 本节将会学习如何用线性表来实现 一元多项式的表示及相加. 目录: 1.一元多项式 正文: 一元多项式: 数学上,一个一元多项式可写成 按幂升序排列的形式: Pn(x)= P0 + P1x1 + P2x2 + .... + Pnxn 它由 n+1 个系数唯一确定,因此在计算机里可以用线性表 P 来表示: P= (P0,P1, P2 , ....  Pn): 其中每一项的指数 隐藏在Pi 的序号中 一元多项式的相加(采用 顺序存储

数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 1 抽象数据类型一元多项式的定义 2 ADT Polyomail{ 3 数据对象:D = {a[i]|a[i]属于TermSet, i = 1,2,3...,m,m>=0 4 TermSet中每个元素包含一个表示系数的实数和表示指数的整数} 5 数据关系 6 基本操作: 7 CreatPolyn(&P, m) 8 操作结果:输入 m 项的系数和指数,建立一元

pat(A) 1002. A+B for Polynomials (一元多项式的表示及相加)

代码: #include<cstdio> #include<cstring> using namespace std; int main() { double a[1005]; int k; while(scanf("%d",&k)==1) { memset(a,0,sizeof(a)); int exp; double c; while(k--) { scanf("%d%lf",&exp,&c); a[exp]+=c

单链表之一元多项式求和C++实现

单链表之一元多项式求和 一元多项式求和单链表实现伪代码 1.工作指针 pre.p.qre.q 初始化2.while(p 存在且 q 存在)执行下列三种情况之一: 2.1.若 p->exp < q->exp:指针 p 后移: 2.2.若 p->exp > q->exp,则 2.2.1.将结点 q 插到结点 p 之前 2.2.2.指针 p 指向他原指结点的下一个结点: 2.3.若 p->exp == q->exp,则 2.3.1.p->coef = p-&

《数据结构》2.6单链表应用举例

1 //单链表倒置(头插法,时间复杂度O(n)) 2 /*算法思路: 3 依次取出原链表中的每个节点,每次都将其作为第一个节点插入原链表中:由于采用头插法,插入顺序与取节点 4 顺序正好相反,故可以完成倒置操作. 5 */ 6 void reverseList(LinkList h) //reverse:背面.相反.颠倒 7 { 8 LNode *p; 9 p = h->next; //*p指向第一个数据元素节点 10 h->next = NULL; //将原链表置为空表 11 while(p

数据结构2_线性表

2 线性表 线性结构,线性结构的特点:(1)是数据元素的非空有限集合:(2)存在唯一的一个被称做"第一个"的数据元素:(3)存在唯一的一个被称做"最后一个"的数据元素:(4)除第一个以外,集合中的每个数据元素均有一个前驱:(5)除最后一个以外,集合中的每个数据元素均有一个后继: 2.1 线性表的类型定义 线性表示最常用也是最简单的数据结构. 简言之,一个线性表示n个数据元素的有限序列. 每个数据元素的具体含义在不同的情况下不同,可以是一个整数,一个符号,甚至一页书,

线性表之单链表实现一元多项式相加

一元多项式定义: 设a0,a1,a2,-,an-1,an都是数域F中的数(注:1,2,--,n-1,n均为a的下角标),n是非负整数,那么表达式 anx^n +an-1x^(n-1)+-+a2x^2 +a1x + a0(an≠0) (1) 叫做数域F上一个文字x的多项式或一元多项式.在多项式(1)中,a0叫做零次多项式或常数项,a1x叫做一次项,一般,aix叫做i次项,ai叫做i次项的系数.一元多项式用符号f(x),g(x),-来表示. 说一下思路,利用带有两个数据元素的链表实现加法运算,数据域

一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

数学中一元n次多项式可表示成如下的形式: Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她) (1)请设计一套接口用以表示和操作一元多项式 (2)根据上述设计实现一元n次多项式的加法运算 (3)根据上述设计实现一元n次多项式的乘法运算 分析:  题目大概意思: 数学里常见的一元 n 次表达式,设计出加减乘除的函数(方法),同时提供对外接口,把内部实现封装起来,而 n 的大小没有指定. 问题的本质: 就是一系列的单个未知数 x,指数和系

【链表的应用】一元多项式相加及相乘 和对问题的分析

一元多项式相乘,需要将一个多项式的每一项的指数与另一个多项式的每一项的指数相乘. 代码实现: 头文件以及函数声明: #ifndef _POLYN_H #define _POLYN_H #include<iostream> #include <malloc.h> #include <stdio.h> using namespace std; #define _CRT_SECURE_NO_DEPRECATE #define NULL 0 typedef struct NOD