当前位置:文档之家› 数据结构实验一一元多项式相加

数据结构实验一一元多项式相加

数据结构实验一一元多项式相加
数据结构实验一一元多项式相加

数据结构实验报告实验一:一元多项式相加

姓名:周成

学号:

专业:软件工程

任课教师:马慧珠

2013年12 月01 日

1.实验名称:

一元多项式相加

2.实验目的:

如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。

3.实验要求:

对一元多项式能实现输入、输出,以及两个一元多项式相加及结果显示。

4.实验内容:

一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。

核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。运算规则如下:相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描,比较qa和qb所指结点指数域的值,可能出现下列三种情况之一:

(1)qa->exp大于qb->exp,则qa继续向后扫描。

(2)qa->exp等于qb->exp,则将其系数相加。若相加结果不为零,将结果放入qa->coef中,并删除qb所指结点,否则同时删除qa和qb所指结点。

然后qa、qb继续向后扫描。

(3)qa->exp小于qb->exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。

扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果表上。所得pa指向的链表即为两个多项式之和。

5.实验程序代码及运行结果:

#include""

#include<>

#include<>

#include<>

#include<>

#define NULL 0

typedef struct NODE

{

float coef;

验总结

本来我对编程很没有信心,做这样一个课程设计感觉有点吃力,虽然有些人觉得很简单,但是我还是坚持做下来了,我不断的看书,翻阅资料,询问同学,上网搜索,总算有模有样地把这个程序编的能运行了。

其次,这次编程是我更多地理解掌握了线性链表的逻辑机构和物理特性。对学过的知识有了很好的巩固。困难还是很多的,比如初次运行的时候,好几十个错误,当时真的感到非常崩溃。幸亏我没有放弃,才最终完成。长舒一口气。

最后,通过这次编程,不仅仅考察了我对知识的掌握,更重要的是锻炼了我的思维能力和耐心,在最困难的时候没有放弃,今天才能如此舒心。

数据结构实验多项式加法

数据结构实验报告 实验名称:多项式加减法 学号:1200310419 姓名:林强 实验日期:2015.5.05 一、实验目的 通过实现多项式的加减法,对链表有更深入的了解 二、实验具体内容 1、实验题目1: (1)题目设计一个一元稀疏多项式简单的加减法计算器 实现要求: 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式: 85 17 A+ x + x =; + 3 9 x 7 ) (x 79 8 x B- + = x 22 8 x ) (x (2)输出多项式 (3)多项式A和B相加,建立多项式C=A+B,并输出相加的结果多项式C (4)选作:多项式A和B相减,建立多项式C=A-B,并输出相加的结果多项式D (2)分析 1:本程序的任务是实现两个多项式的加法其中多项式的系数为浮点型, 指数为整数,输出的结果也为系数和指数。 (1)输入的形式和输入值的范围: 输入多项式的系数a和未知数X的指数b,当a和b都为零时,输入结束。输入值的范围:a为实数,b为整数。 (2)输出形式:输出多项式的系数和多项式未知数X的指数即(a,b)形式。 (3)程序所能达到的功能,实现两个多项式的加法,并输出最后的结果 2: 整个程序运行期间实行动态创建节点,一边输入数据, 一边创建节点当将全部数据输入到单链表中后再调用多项式加法这 个函数,并一边实现多项式的相加,一边释放节点,有效防止了 在程序反复运行过程中可能出现系统空间不够分配的现象 (3)实验代码 typedef int Status; #define OVERFLOW -1 #define null 0 typedef struct Lnode{

一元多项式的相加减复习过程

实验一一元多项式的表示和相减、相乘 一、实验目的 1.掌握链表的存储方式 2.掌握一元多项式的存储及运算。 二、实验内容 已知一元多项式P(x)和Q(x)已存在,求P(x)-Q(x)和P(x)* Q(x)并输出。 要求: 1.通过键盘随机输入两多项式P(x)和Q(x)的内容。 2.输出结果要有P(x)和Q(x)的以及它们的差P(x)-Q(x)和乘积P(x)* Q(x)。 三、实验步骤: 1.创建一元多项P(x)和Q(x)。 2.求P(x)-Q(x),P(x)* Q(x)。 3.输出P(x)、Q(x)、P(x)-Q(x),P(x)* Q(x)。 四、算法说明 首先,定义一元多项式的存储方式,然后从键盘输入P(x)和Q(x)对应多项式的各对系数和指数,建立相应的一元多项式 五、测试结果参考下图 多项式相减 多项式相乘

六、源代码 1.多项式的相减 # include # include typedef struct{ float coef; //系数 int expn; //指数 }ElemType; typedef struct LNode{ //结点类型 ElemType data; struct LNode *next; }*LinkList; void MakeNode(LinkList &s,ElemType e){ //生成结点 s=(LinkList)malloc(sizeof(LNode)); s->data=e; }

void InsAfter(LinkList p,LinkList s){ //插入结点 s->next=p->next; p->next=s; } int compare(ElemType e1,ElemType e2){ //比较 if(e1.expn>e2.expn) return 1; else if(e1.expnnext,s; while(q){ int n=compare(e,q->data); if(n<0){ MakeNode(s,e); InsAfter(p,s);break; } else if(n==0) { q->data.coef=q->data.coef+e.coef; if(q->data.coef==0){p->next=q->next;free(q);} break; }

数据结构-多项式相加

数据结构课程设计 2012年12月 班级:XXX 学号:XXX 姓名: XXX 指导教师:XXX

一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【算法设计思想】 ①一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

【实现提示】 用带表头结点的单链表存储多项式。 【程序代码】 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } } void display(polynmial L)//显示,输出多项式L { struct node *p, *q; int flag = 0; int k = 0; q = L->next; while(q)

数据结构实验一一元多项式相加

数据结构实验报告实验一:一元多项式相加 姓名:周成 学号: 专业:软件工程 任课教师:马慧珠 2013年12 月01 日

1.实验名称: 一元多项式相加 2.实验目的: 如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。 3.实验要求: 对一元多项式能实现输入、输出,以及两个一元多项式相加及结果显示。 4.实验内容: 一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。 核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。运算规则如下:相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描,比较qa和qb所指结点指数域的值,可能出现下列三种情况之一:

(1)qa->exp大于qb->exp,则qa继续向后扫描。 (2)qa->exp等于qb->exp,则将其系数相加。若相加结果不为零,将结果放入qa->coef中,并删除qb所指结点,否则同时删除qa和qb所指结点。 然后qa、qb继续向后扫描。 (3)qa->exp小于qb->exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。 扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果表上。所得pa指向的链表即为两个多项式之和。 5.实验程序代码及运行结果: #include"" #include<> #include<> #include<> #include<> #define NULL 0 typedef struct NODE {

一元多项式求和

一元多项式求和——链表编程 一.实验名称:一元多项式求和——链表编程。 二.实验环境:Windows Xp ,Vc++6.0。 三.实验目的: 1.掌握一元多项式的链表式存储算法; 2.掌握链表的结构定义; 3.采用尾插法生成单链表。 四.实验内容: 1.一元多项式的表示: 一元多项式可按升幂的形式表示为 12012()n e e e n n P x p p x p x p x =++++…… 其中:i e 为第i 项的指数,i p 是指数i e 的项的系数,且 121i n e e e e <=<=<=<=<=<=……。 则多项式()n P x 可以用一个线性表P 来表示:01(,)m P p p p =, ;同理,多项式 ()n Q x 可表示为01(,,)n Q q q q =…(mcodf=c;

多项式加法(C语言实现)

多项式加法 #include #include #define Max_Size 100 typedef struct node { float coef; int expn; struct node *next; }PolyNode; int CreCoeStr(float C[]) { char flag; int i=0; do { scanf("%f",&C[i++]); scanf("%c",&flag); } while (flag!='#'); return(i); } void CreExpStr(int E[]) { int i=0; char flag; do { scanf("%d",&E[i++]); scanf("%c",&flag); } while (flag!='#'); } void InitPolyList(PolyNode **sq) { if((*sq=(PolyNode *)malloc(sizeof(PolyNode)))==NULL) exit(1); (*sq)->next=NULL; }

void CreatPolyList(PolyNode **sq,float C[],int E[],int num) { int i; PolyNode *s,*r=*sq; for(i=0;icoef=C[i]; s->expn=E[i]; r->next=s; r=s; } r->next=NULL; } void InsertSortPoly(PolyNode **sq) { PolyNode *p,*q,*r,*u; p=(*sq)->next; (*sq)->next=NULL; while (p) { r=*sq; q=(*sq)->next; while (q&&q->expn<=p->expn) { r=q; q=q->next; } u=p->next; p->next=r->next; r->next=p; p=u; } } void DispList(PolyNode *sq) { PolyNode *p=sq->next; while(p) { printf("(%7.2f,%d)",p->coef,p->expn); p=p->next; }

链表实现多项式相加实验报告

实验报告 课程名称:数据结构 题目:链表实现多项式相加 班级: 学号: 姓名: 完成时间:2012年10月17日

1、实验目的和要求 1)掌握链表的运用方法; 2)学习链表的初始化并建立一个新的链表; 3)知道如何实现链表的插入结点与删除结点操作; 4)了解链表的基本操作并灵活运用 2、实验内容 1)建立两个链表存储一元多项式; 2)实现两个一元多项式的相加; 3)输出两个多项式相加后得到的一元多项式。 3、算法基本思想 数降序存入两个链表中,将大小较大的链表作为相加后的链表寄存处。定义两个临时链表节点指针p,q,分别指向两个链表头结点。然后将另一个链表中从头结点开始依次与第一个链表比较,如果其指数比第一个小,则p向后移动一个单位,如相等,则将两节点的系数相加作为第一个链表当前节点的系数,如果为0,则将此节点栓掉。若果较大,则在p前插入q,q向后移动一个,直到两个链表做完为止。 4、算法描述 用链表实现多项式相加的程序如下: #include #include #include struct node{ int exp; float coef; struct node*next; };

void add_node(struct node*h1,struct node*h2); void print_node(struct node*h); struct node*init_node() { struct node*h=(struct node*)malloc(sizeof(struct node)),*p,*q; int exp; float coef=1.0; h->next=NULL; printf("请依次输入多项式的系数和指数(如:\"2 3\";输入\"0 0\"时结束):\n"); p=(struct node*)malloc(sizeof(struct node)); q=(struct node*)malloc(sizeof(struct node)); for(;fabs(coef-0.0)>1.0e-6;) { scanf("%f %d",&coef,&exp); if(fabs(coef-0.0)>1.0e-6) { q->next=p; p->coef=coef; p->exp=exp; p->next=NULL; add_node(h,q); } } free(p); free(q); return(h); } void add_node(struct node*h1,struct node*h2) { struct node*y1=h1,*y2=h2; struct node*p,*q; y1=y1->next; y2=y2->next; for(;y1||y2;) if(y1) { if(y2) { if(y1->expexp) y1=y1->next; else if(y1->exp==y2->exp) { y1->coef+=y2->coef; if(y1->coef==0)

一元多项式的计算数据结构课程设计

一元多项式的计算—加,减 摘要(题目)一元多项式计算 任务:能够按照指数降序排列建立并输出多项式; 能够完成两个多项式的相加、相减,并将结果输入; 目录 1.引言 2.需求分析 3.概要设计 4.详细设计 5.测试结果 6.调试分析 7.设计体会 8.结束语 一:引言: 通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数

降序排列。 二:需求分析 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果 三:概要设计 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 1.单连表的抽象数据类型定义: ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={| ai-1, ai∈D,i=2,…,n} 基本操作: InitList(&L) //操作结果:构造一个空的线性表 CreatPolyn(&L) //操作结果:构造一个以单连表存储的多项试 DispPolyn(L) //操作结果:显示多项试 Polyn(&pa,&pb) //操作结果:显示两个多项试相加,相减的结果 } ADT List 2.本程序包含模块: typedef struct LNode //定义单链表 { }LNode,*LinkList; void InitList(LinkList &L) //定义一个空表 { } void CreatPolyn(LinkList &L) //用单链表定义一个多项式 { } void DispPolyn(LinkList L) //显示输入的多项式

多项式求和

数据结构课程设计 题目:多项式运算 学生姓名:熊奉标 学号:10115011046 专业:计算机科学与技术 班级:10级(1)班 指导教师姓名及职称:陈正铭讲师 起止时间:2012 年2 月——2012 年4 月 1 需求分析

1.1 课题背景及意义 本课程设计主要解决一元多项式的运算问题,通过链表的使用,实现对一元多项式的构建、录入、存储、打印、以及之间的运算。在本课程设计中,程序设计语言为C++语言,程序运行平台为Windows/98/2000/XP,程序采用了链表存储方法以及结构化和模块化的设计方法,通过调试运行,可以进行多项式的加、减、乘运算,勉强实现了设计目标,并且经过适当完善后,将可应用到实际中解决某些问题。 一元多项式的运算,虽然无法直接在除数学外的其他领域作出贡献,但是在数学上,它可以为人们解决一些自己动笔动手很难解决的问题,比如说那些很长很长的多项式,用笔算可能要算半天,但是用该程序,只需短短的几秒钟,所以它给人们带来了不少方便,同时相信它也能间接地为其他领域做出贡献。 1.2 课题要求 (1)掌握线性表的创建、插入、删除等基本运算。 (2)掌握线性表的顺序存储结构和链式存储结构 (3)掌握线性表的典型应用—多项式运算(加、减、乘)。 该程序的主要任务是将用户输入的多项式用线性表存储,然后通过对线性表的基本操作,而实现多项式之间的三则运算,把正确结果输出给用户。 1.3 软件格式规定 输入格式:有两类编辑框可供输入,系数编辑框、指数编辑框,在系数编辑框中允许输入浮点型数据,在指数编辑框中只允许输入整型数据。 正确的输入: f(x)=8X^6+4X^5-2X^4-12X^3-1X^1+10X^0 g(x)=2X^3-5X^2+1X^1 正确的输出结果: f(x)+g(x):结果= 8.00X^6 +4.00X^5 -2.00X^4 -121.00X^3 -5.00X^2 +10.00 f(x)-g(x):结果= 8.00X^6 +4.00X^5 -2.00X^4 -125.00X^3 +5.00X^2 -2.00X

一元多项式求和问题的研究与实现

一元多项式求和问题的研究与实现 学生姓名:指导老师: 摘要在数学上,一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+anxn,它由n+1个系数唯一确定,一元多项式求和实质上是合并同类项的过程。在实际应用中,多项式的指数可能很高且变化很大,在表示多项式的线性表中就会存在很多零元素。因此,采用单链表来存储一个一元多项式的每一个非零项的系数和指数,即每一个非零项对应单链表中的一个结点,且单链表按指数递增有序排列,就可实现两个一元多项式求和问题。程序通过调试运行,能基本达到设计要求,解决问题。 关键词数据结构;一元多项式;单链表;结点

1 引言 一个一元多项式可按升幂表示为:A(x)=a0+a1x+a2x2+……+a n x n,它由n+1个系数唯一确定。因此,可以用一个线性表(a0,a1,a2,……,an)来表示,每一项的指数i隐含在其系数ai的序号里。若有A(x)= a0+a1x+a2x2+……+a n x n和B(x)=b0+b1x+b2x2+……+b m x m,一元多项式求和也就是求A(x)=A(x)+B(x),这实质上是合并同类项的过程。 1.1 设计目的 设计合理数据结构表示一元多项式,并设计高效算法实现两个一元多项式相加。 1.2 设计要求 本课程设计要求用C++实现两个一元多项式的求和问题,用带头结点的单链表村存储多项式。基本功能要求如下: 1.输入并建立多项式,输入形式为整数序列n,x1,y1,x2,y2,……,x n,y n。其中n是多项式的项数,x i和y i分别是第i项的系数和指数。 2.输出多项式,按指数升序排列。 3.多项式A(x)和B(x)相加,建立多项式A(x)+B(x),输出相加的多项式,形式为类数学表达式。 2 需求分析 2.1 输入形式和输入值的范围 从键盘依次输入两个多项式的项数,系数和指数。系数为任意整数,项数和指数为大于等于0的整数。 2.2 输出形式 从屏幕输出,显示用户输入的多项式,并显示两多项式相加后的多项式和值。2.3 时间性能分析 所谓时间性能是指实现基于某种存储结构的基本操作(即算法)的时间复杂度。

一元多项式相加完整实验报告

一元多项式相加实验报告 一元多项式的相加

一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 float coef; // 系数 int expn; // 指数 term, ElemType; V oid AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b) Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构

一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项,对

一元多项式计算(数据结构课程设计)

一元多项式计算(数据结构课程设计)

一、系统设计 1、算法思想 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。 因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。P 的指数小于q的指数的话就应该复制q的节点到多项式中。P的指数大于q的指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。 (2)一元多项式的减法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q的节点到多项式中。P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。 2、概要设计 (1)主函数流程图: (注:a代表第一个一元二次方程,b代表第二个一元二次方程)

两个一元多项式相加-c++版

《数据结构》实验报告 ——两个一元多项式相加 一、实验题目:两个一元多项式相加 二、实验内容: 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 三、设计思想: (1)建立两个顺序列表,分别用来表示两个一元多项式;顺序列表奇数位,存储该多项式的系数;顺序列表的偶数位,存储该相应多项式的指数。 (2)用成员函数merg(qList&l2)实现两多项式的相加。实现的大致方法为:比较第二个多项式列表与第一个多项式列表的偶数位的数值大小(指数),如果 相同,则将他们的前一位数(系数)相加;如果不同,就将他的前一位数(系 数)及它自己(指数)插入第一个多项式列表的后面。 (3)建立函数shu(double a[],int j)实现多项式的输入。 四、源程序代码 #include "stdafx.h" #include using namespace std; template class List { private: Telem * elem; int curlen; int maxlen; public: List(int maxsz=100):maxlen(maxsz) { curlen=0; elem=new Telem{maxlen}; }; List(Telem a[],int n,int maxsz=100):maxlen(maxsz) { curlen=n; elem=new Telem[maxlen]; for(int i=0;i

一元多项式的运算

数据结构课程设计实验报告 专业班级: 学号: 姓名: 2011年1月1日

题目:一元多项式的运算 1、题目描述 一元多项式的运算在此题中实现加、减法的运算,而多项式的减法可以通过加法来实现(只需在减法运算时系数前加负号)。 在数学上,一个一元n次多项式P n(X)可按降序写成: P n(X)= P n X^n+ P(n-1)X^(n-1)+......+ P1X+P0 它由n+1个系数惟一确定,因此,在计算机里它可以用一个线性表P来表示: P=(P n,P(n-1),......,P1,P0) 每一项的指数i隐含在其系数P i的序号里。 假设Q m(X)是一元m次多项式,同样可以用一个线性表Q来表示: Q=(q m,q(m-1),.....,q1,q0) 不是一般性,假设吗吗m

[计算机]一元多项式相加完整实验报告

[计算机]一元多项式相加完整实验报告一元多项式的相加 一实验内容 根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加 二需求分析 1掌握线性结构的逻辑特性和物理特性。 2建立一元多项式。 3将一元多项式输入,并存储在内存中,并按照指数降序排列输出多项式。 4能够完成两个多项式的加减运算,并输出结果。 三概要设计 1 本程序所用到的抽象数据类型: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式 结点的数据元素类型定义为: typedef struct { // 项的表示 oat flcoef; // 系数 int expn; // 指数 term, ElemType; Void AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b)

Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(LinkList L) Status Append(LinkList&L, Link S) FreeNode() 2 存储结构 一元多项式的表示在计算机内用链表来实现,同时为了节省存储空间,只存储其中非零的项,链表中的每个节点存放多项式的系数非零项。它包含三个域,分别存放多项式的系数,指数,以及指向下一个项的指针。 序数coef 指数exp 指针域next 创建一元多项式链表,对运算中可能出现的各种情况进行分析,实现一元多项式的相加相减操作。 3 模块划分 a) 主程序;2)初始化单链表;3)建立单链表; 4)相加多项式 4 主程序流程图 开始 申请结点空间 输入多项式各项的系数X,指数Y 输出已输出的多项式 否 是否输入正确 合并同类项 结束 四详细设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相

一元多项式相家问题

一元多项式相加问题 # include typedef struct node{ float coef; int exp; int flg; struct node *next; }PolyNode,*PolyList; PolyNode *head_a,*head_b,*head_c; PolyList A,B,C; PolyNode *Creat_PolyNode() { PolyNode *s,*r; PolyList L; float x;int y; L=new PolyNode; L->next=NULL; r=L; cin>>x>>y; while(x||y) //输0的时候输入【0,另一个链表有的指数】{ s=new PolyNode; s->coef=x; s->exp=y; r->next=s; r=s; cin>>x>>y; } r->next=NULL; return L; } void Out_PolyNode(PolyNode *L,float a[100],int b[100]) { PolyNode *p;int i=0,j=0; p=L->next; if(p==NULL) cout<<"0"; while(p) { a[i]=p->coef; b[i]=p->exp; p=p->next; i++,j++; }

for(i=0;inext,q=B->next; while(p&&q) { if(p->exp==q->exp) { s=new PolyNode; s->coef=p->coef+q->coef; if(s->coef==0) { p=p->next; q->flg=1; } else { s->exp=p->exp; r->next=s; r=s; p->flg=1; q->flg=1; p=p->next; q=B->next; } } else if(p->exp!=q->exp&&q->next==NULL) { s=new PolyNode; s->coef=p->coef; s->exp=p->exp; r->next=s; r=s; p->flg=1; p=p->next; q=B->next; } else

数据结构——一元多项式的建立与相加

#include #include using namespace std; typedef struct PolyNode { int coef; //系数 int expn; //指数 struct PolyNode *next; } *PNode; //多项式结点的指针 void InitPoly(PNode &head,PNode &p) { head=(PNode)malloc(sizeof(struct PolyNode)); head->next=NULL; head->coef=0; head->expn=-1; p=head; } void CreatePoly(PNode &head,int a,int n) { PNode s; s=(PNode)malloc(sizeof(struct PolyNode)); //建立新的结点s->coef=a; s->expn=n; s->next=NULL; head->next=s; head=s; } void PrintPoly(PNode head) { int i=1;//控制第一对系数指数的显示 head=head->next;//指向表头结点的下一个 PNode p; p=head; while ((p->next)!=NULL) { if(i) //显示第一对的时候是不需要显示加号的 { if (p->expn==1) cout<coef<<"x"; else if (p->expn==0) cout<coef<

else cout<coef<<"x^"<expn; i=0; } else { if (p->expn==1) cout<coef<<"+x"; else if (p->expn==0) cout<<"+"<coef<coef<<"x^"<expn; } p=p->next; } cout<next; pb=pb->next; p=pc; while (pa!=NULL && pb!=NULL) { if (pa->expn>pb->expn) { s=(PNode)malloc(sizeof(struct PolyNode)); s->coef=pa->coef; s->expn=pa->expn; s->next=NULL; p->next=s; p=s; pa=pa->next; } else if (pa->expnexpn) { s=(PNode)malloc(sizeof(struct PolyNode)); s->coef=pb->coef; s->expn=pb->expn; s->next=NULL; p->next=s; p=s; pb=pb->next; }

二元多项式相加

华北水利水电大学数据结 构试验报告 ------二元多项式相加 2013160班

/*二元多项式的相加*/ #include #include struct node{ int coefficient; int expoentx; int exponety; struct node *next; }; typedef struct node *ptrtonode; ptrtonode bulidnode( void )//建立多项式链表 { int i, j; ptrtonode head, pnew, p; printf("请输入多项式含有的项数\n"); scanf("%d", &i); getchar(); if( (head = (ptrtonode)malloc( sizeof( struct node ))) == NULL ) return NULL; head->expoentx = 0; head->exponety = 0; head->next = NULL; head->coefficient = i;//将多项式的项数存在首节点 p = head; for( j = 0; j < i; j++ ) { if( (pnew = (ptrtonode)malloc( sizeof( struct node ))) == NULL ) return NULL; printf("请输入系数x和y的次幂中间用空格隔开\n"); scanf("%d%d%d", &pnew->coefficient, &pnew->expoentx, &pnew->exponety); fflush(stdin); p->next = pnew; p = pnew; p->next = NULL; } return head;

数据结构_一元多项式的表示与相加

实验一一元多项式的表示与相加 实验目的: 1.复习并熟练掌握数据结构所使用的程序设计语言——C语言; 2.学会单步跟踪、调试自己的程序; 3.加深对线性表特别是链表知识的理解和掌握,并能够运用相关知识来解决相关的具体问题,如一元多项式相加等; 程序流程: 1.定义一元多项式链表结构体类型; 2.输入多项式项数以分配存储空间; 3.输入多项式每项的系数和指数,将其插入当前多项式链表。同时判断是否有与当前节点指数相同的项,若存在,则将两项系数相加合并。此外,若存在系数为0的项,将其存储空间释放; 4.进行多项数加法时,新建一个存储结果的链表,分别将两多项式各项依次插入结果多项式即完成多项式相加运算; 5.进行多项数加法时,将减项多项式各项系数化为相反数后进行加法操作,即完成多项式相减运算; 6.对x赋值后,将x值代入多项式进行运算得到多项式的值; 7.输出多项式。 注意:进行完一次运算以后,应该及时销毁无用多项式以释放空间以便再次应用。 算法及注释: 1)定义一元多项式链表结构体类型 typedef struct Lnode{ float cof; //定义系数 int exp; //定义指数 struct Lnode *next; //定义指针变量指向下一个节点 }Lnode ,*Linklist; //定义新的变量类型 2)建立多项式存储线性链表头结点 void makehead(Linklist &head){ head=(Linklist)malloc(sizeof(Lnode)); //建立新的节点 head->exp=-1; head->next=NULL; //指针赋空 head->cof=1; }

相关主题
文本预览
相关文档 最新文档