数据结构课程设计——一元多项式计算.doc
《数据结构课程设计——一元多项式计算.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计——一元多项式计算.doc(25页珍藏版)》请在三一办公上搜索。
1、成绩 南京工程学院课程设计说明书(论文)题 目 一元多项式计算 课 程 名 称 数据结构 院(系、部、中心) 通信工程 专 业 计算机通信 班 级 算通111 学 生 姓 名 余丹红 学 号 208110410 设 计 地 点 信息楼322 指 导 教 师 郝慧珍 设计起止时间:2012年12月 17日至2012 年12月18日目 录1设计目标12总体设计121数据结构描述与定义122模块设计23测试结果与分析114课程设计总结13参考文献:15附录A: 源程序清单151 设计目标通过课程设计,达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,使学生能够根据数据对象的特性,掌握数
2、据组织、算法设计、算法性能分析的方法,并培养良好的程序设计能力。本程序是利用单链表来表示一元多项式然后实现各项指数和系数的输入,进行多项式建立,并以多项式的形式输出,实现多项式的相加,相减和多项式的相乘这三种运算。2总体设计21数据结构描述与定义一元多项式定义系数和指数结构如下: coefexpnnextcoef域-存放结点的系数值expn域-存放结点的指数值next域-存放结点的直接后继的地址(位置)的指针域(链域)定义多项式的结构为线性链表的存储结构,每个结点包含三个元素:系数coef,指数expn和指向下一个结点的指针*next。通过指针,我们就可以把多个单项式连接起来,形式一个多项式,
3、需要说明的是从广义的角度讲,单项式也是一个多项式。基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next; /下一个指针*Polyn,Polynomial; /Polyn结构体变量名22模块设计从实现多项式式运算过程的角度来分析,至少需要这样一些子功能模块。 多项式创建功能 多项式销毁功能 多项式输出功能 多项式的相加功能 多项式的相减功能 多项式的相乘功能定义并调用的函数有:void Insert(Polyn p,Polyn h);
4、/将结点p插入链表hPolyn CreatePolyn(Polyn head,int m);/创建链表(多项式)void DestroyPolyn(Polyn p);/销毁void PrintPolyn(Polyn P);/输出Polyn AddPolyn(Polyn pa,Polyn pb);/a+bPolyn SubtractPolyn(Polyn pa,Polyn pb);/a-bPolyn MultiplyPolyn(Polyn pa,Polyn pb);/a*b void main()/主函数系统共分几个模块,每个模块的算法描述及流程图(核心模块)1系统模块图(模块划分)图1 系统模
5、块划分图2 模块流程图及算法描述 分模块流程图(1)多项式的创建 (2)多项式的销毁开始从键盘输入项数mmnextq不为空NY结束输出“-X(q的指数)”输出“-X”输出“-1”输出X(q的指数)输出“X”输出“X”输出X(q的指数)YN(4)多项式的相加开始定义存储和链表hc动态分配空间qa=pa-nextqb=pb-nextqa!=qb?Yqaqb?Yqa的各个值赋给qcqa指向qa的nextqb的各个值赋给qcqb指向qb的nextNqa的系数加qb的系数赋给qc的系数qa的指数赋给qc的指数qa指向qa的nextqb指向qb的nextqc插入到hc中qc的系数不为0Y释放qc空间结束(
6、5)多项式的相减 (6)多项式的相乘开始定义存储和链表h动态分配空间p=p-coef*(-1)两多项式相加输出P不为0?p=p-nextYN结束开始定义存储和链表hf动态分配空间qa=pa-nextqb=pb-nextqb存在?qa存在?Y定义存储和链表pf动态分配空间将qa和qb的系数相乘赋给pf的系数将qa和qb的指数相加赋给pf的指数将pf插入到hf中qb=pb-nextYNqa=qa-next返回hf结束算法描述(1)多项式的创建Polyn CreatePolyn(Polyn head,int m) /建立一个头指针为head、项数为m的一元多项式 /在主程序初始时,先输入的多项式中的
7、项数m、n 在这里为m。主程序中的pa、pb在此为headint i;/用来计数 Polyn p;/定义一个p链表 p=head=(Polyn)malloc(sizeof(struct Polynomial);/动态分配空间,建立头结点 head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); /调用Insert函数插入结点p return head;(2)多项式的销毁利用循环逐渐销毁多项式void DestroyPolyn(Polyn p) /销毁多项式p Polyn q1,q2; q1=p-next; q2=q1-next; while
8、(q1-next)/利用循环逐渐销毁多项式Pfree(q1); q1=q2;/指针后移 q2=q2-next;free(q1);(3)多项式的输出void PrintPolyn(Polyn P) /输出多项式Polyn q=P-next; int flag=1;/项数计数器 if(!q) /若多项式为空,输出0 putchar(0); printf(n); return; while(q) /多项式存在 if(q-coef0&flag!=1) putchar(+); /系数大于0且不是第一项if(q-coef!=1&q-coef!=-1) /系数非1或-1的普通情况 printf(%g,q-c
9、oef); /%g表示使用%e或%f,哪个输出宽度稍短就使用哪一个 if(q-expn=1) putchar(X); /若指数为1 else if(q-expn) printf(X%d,q-expn); /指数不为1 else if(q-coef=1) /系数为1的情况 if(!q-expn) putchar(1); /指数为0,则为1 else if(q-expn=1) putchar(X); /指数为1则为xelse printf(X%d,q-expn); if(q-coef=-1)/系数为-1的情况if(!q-expn) printf(-1); /指数为0,则为-1else if(q-e
10、xpn=1) printf(-X); /指数为1,则为-xelse printf(-X%d,q-expn);q=q-next; flag+; /项数加1 printf(n);(4)多项式的相加利用对a、b两个多项式每一项分模块讨论进行的,如a指数大或者b空,则将a项该节点插入新链c中,若b指数大或者a空,则将b项插入到c中,如若a、b两项指数相等,则合并后再插入到c链中。Polyn AddPolyn(Polyn pa,Polyn pb) /求解并建立多项式a+b,返回其头指针 Polyn qa=pa-next; Polyn qb=pb-next; Polyn headc,hc,qc; hc=(
11、Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc-next=NULL; headc=hc; while(qa|qb) qc=(Polyn)malloc(sizeof(struct Polynomial); switch(compare(qa,qb)case 1: qc-coef=qa-coef; qc-expn=qa-expn; / a的指数大或b为空,把qa赋值给qc qa=qa-next; /qa指向下一个 break;case 0: qc-coef=qa-coef+qb-coef; qc-expn=qa-expn; /qc等于qa与qb的和
12、 qa=qa-next; qb=qb-next; /qa,qb都分别指向下一个 break;case -1: qc-coef=qb-coef; /b的指数大或a为空,把qb赋值给qc qc-expn=qb-expn; qb=qb-next; /qb指向下一个 break; if(qc-coef!=0) qc-next=hc-next;/qc插入到hc中去,并重新生成新的hc,到最后实现a与b的和 hc-next=qc; hc=qc;else free(qc);/当相加系数为0时,释放该结点 return headc; /返回头指针,实现多项式a与b的相加(5)多项式的相减利用a-b=a+(-b
13、)来进行的,即只将b系数取反即可。Polyn SubtractPolyn(Polyn pa,Polyn pb)/求解并建立多项式a-b,返回其头指针,将pb的系数取反后调用相加的函数,实现相减功能 Polyn h=pb; Polyn p=pb-next; Polyn pd;while(p) /将pb的系数取反 p-coef*=-1; p=p-next; /p向后移动 pd=AddPolyn(pa,h); for(p=h-next;p;p=p-next) /恢复pb的系数 p-coef*=-1; return pd; /返回pd的值,实现a与b两个多项式相减(6)多项式的相乘将a中的每一项乘b中
14、的每一项,即系数相乘,指数相加,将它放在新节点中并插入新链h,最后返回链h。Polyn MultiplyPolyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa-next; Polyn qb=pb-next; hf=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hf-next=NULL; for(;qa;qa=qa-next) for(qb=pb-next;qb;qb=qb-next) pf=(Polyn)malloc(sizeof(struct Polynomia
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 多项式 计算
链接地址:https://www.31ppt.com/p-2396732.html