数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.pdf
《数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.pdf》由会员分享,可在线阅读,更多相关《数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、武汉工业学院计算机与信息工程系数据结构课程设计设计题目:一元稀疏多项式计算器1 专业计算机班级1003 班学号100511319 姓名李晓军指导教师易逵2011 年 9 月 1 日目录一、课程题目,1 二、需求分析,1 三、测试数据,2 四、概要设计,2 五、调用关系图,3 六、程序代码,3 七、测试结果,11 八、心得体会及总结,12 数据结构课程设计一、课程题目一元稀疏多项式计算器二、需求分析1、一元稀疏多项式简单计算器的功能是:1.1 输入并建立多项式;1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,cn,en,其中 n 是多项式的项数,ci 和 ei 分别是第 i
2、项的系数和指数,序列按指数降序排列;1.3 求多项式 a、b 的导函数;1.4 计算多项式在 x 处的值;1.5 多项式 a 和 b 相加,建立多项式a+b;1.6 多项式 a 和 b 相减,建立多项式a-b。2、设计思路:2.1 定义线性表的动态分配顺序存储结构;2.2 建立多项式存储结构,定义指针*next 2.3 利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构造的一元多项式2.4 演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运
3、行结果在屏幕上显示。多项式显示的格式为:c1xe1+c2xe2+,+cnxen 3、设计思路分析要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为序数 coef 指数 expn 指针域 next 运用尾插法建立两条单链表,以单链表polyn p 和 polyn h 分别表示两个一元多项式 a 和 b,a+b的求和运算等同于单链表的插入问题(将单链表 polyn p 中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。为了实现处理,设p、q 分别指向单链表polya 和 polyb 的当前项,比较 p、q
4、结点的指数项,由此得到下列运算规则:若 p-expnexpn,则结点 p 所指的结点应是“和多项式”中的一项,令指针 p 后移。若 p-expn=q-expn,则将两个结点中的系数相加,当和不为 0 时修改结点 p 的系数。若 p-expnq-expn,则结点 q 所指的结点应是“和多项式”中的一项,将结点 q 插入在结点 p 之前,且令指针 q 在原来的链表上后移。三、测试数据:1、(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7);2、(6x-3-x+4.4x2-1.2x9+1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.
5、8x15-1.2x9+12x-3-x);3、(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5);4、(x+x3)+(-x-x3)=0;5、(x+x100)+(x100+x200)=(x+2x100+x200);6、(x+x2+x3)+0=x+x2+x3.四、概要设计 1、元素类型、结点类型和指针类型:typedef struct Polynomial float coef;/系数 int expn;/指数 struct Polynomial *next;*Polyn,Polynomial;2、建立一个头指针为head、项数为 m的一元多项式,建立新结点以接收数据,调用
6、 Insert函数插入结点:Polyn CreatePolyn(Polyn head,int m)int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial);head-next=NULL;for(i=0;icoef,&p-expn);Insert(p,head);return head;3、主函数和其他函数:void main()int m,n,a,x;char flag;Polyn pa=0,pb=0,pc;float ValuePolyn(Polyn head,int x)/输入 x 值,计算并返回多项式的值五、调用关系图主函数
7、Pa pb pc建立链表Polyn CreatePolyn(Polyn head,int m)多项式相加Polyn AddPolyn(Polyn pa,Polyn pb)输出多项式WhilePrintf(“”);返回*head返回*hcreturnheadc*h项数m(图 1)六、程序代码:#include#include /定义多项式的项typedef struct Polynomial float coef;/系数 int expn;/指数 struct Polynomial *next;*Polyn,Polynomial;void Insert(Polyn p,Polyn h)if(p-
8、coef=0)free(p);/系数为 0 的话释放结点 else Polyn q1,q2;q1=h;q2=h-next;while(q2&p-expn expn)/查找插入位置 q1=q2;q2=q2-next;if(q2&p-expn=q2-expn)/将指数相同相合并 q2-coef+=p-coef;free(p);if(!q2-coef)/系数为 0的话释放结点 q1-next=q2-next;free(q2);else /指数为新时将结点插入 p-next=q2;q1-next=p;Polyn CreatePolyn(Polyn head,int m)/建立一个头指针为 head、项
9、数为 m的一元多项式 int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial);head-next=NULL;for(i=0;icoef,&p-expn);Insert(p,head);/调用 Insert函数插入结点 return head;void DestroyPolyn(Polyn p)/销毁多项式 p Polyn q1,q2;q1=p-next;q2=q1-next;while(q1-next)free(q1);q1=q2;q2=q2-next;void PrintPolyn(Polyn P)Polyn q=P-next
10、;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-coef);if(q-expn=1)putchar(X);else if(q-expn)printf(X%d,q-expn);else if(q-coef=1)if(!q-expn)putchar(1);else if(q-expn=1)putchar(X)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 _ 一元 稀疏 多项式 计算器 报告 代码 _ 完整版
限制150内