数据结构课程设计___一元稀疏多项式计算器(报告+代码)__完整版.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
系别电子信息系
专业计算机科学与技术
班级学号4090113
姓名王健
指导教师党群
成绩
2011年7 月14 日
目录
一、课程题目 (1)
二、需求分析 (1)
三、测试数据 (2)
四、概要设计 (2)
五、调用关系图 (3)
六、程序代码 (3)
七、心得体会及总结 (12)
数据结构课程设计
一、课程题目
一元稀疏多项式计算器
二、需求分析
1、一元稀疏多项式简单计算器的功能是:
1.1 输入并建立多项式;
1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en,
其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;
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演示程序以用户和计算机的对话方式执行,即在计算机终站上显示
“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。多项式显示的格式为:c1x^e1+c2x^e2+…
+cnx^en
3、设计思路分析
要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为
运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。
为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:
① 若p->expn
令指针p后移。
② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结
点p的系数。
③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,
将结点q插入在结点p之前,且令指针q在原来的链表上后移。
三、测试数据:
1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7);
2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15
)=(-7.8x^15-1.2x^9+12x^-3-x);
3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5);
4、(x+x^3)+(-x-x^3)=0;
5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200);
6、(x+x^2+x^3)+0=x+x^2+x^3.
四、概要设计
1、元素类型、结点类型和指针类型:
typedef struct Polynomial{
float coef; //系数
int expn; //指数
struct Polynomial *next;
}*Polyn,Polynomial;
2、建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点:
Polyn CreatePolyn(Polyn head,int m){
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i { p=(Polyn)malloc(sizeof(struct Polynomial)); printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&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值,计算并返回多项式的值 五、调用关系图 (图1) 六、程序代码: #include #include float coef; //系数 int expn; //指数 struct Polynomial *next; }*Polyn,Polynomial; void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p); //系数为0的话释放结点 else { Polyn q1,q2; q1=h; q2=h->next; while(q2&& p->expn < q2->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 { //指数为新时将结点插入