数据结构课程设计报告-一元多项式加减运算.doc

上传人:聆听****声音 文档编号:2007498 上传时间:2023-05-02 格式:DOC 页数:25 大小:147.79KB
下载 相关 举报
数据结构课程设计报告-一元多项式加减运算.doc_第1页
第1页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第2页
第2页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第3页
第3页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第4页
第4页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第5页
第5页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第6页
第6页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第7页
第7页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第8页
第8页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第9页
第9页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第10页
第10页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第11页
第11页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第12页
第12页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第13页
第13页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第14页
第14页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第15页
第15页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第16页
第16页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第17页
第17页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第18页
第18页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第19页
第19页 / 共25页
数据结构课程设计报告-一元多项式加减运算.doc_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告-一元多项式加减运算.doc

《数据结构课程设计报告-一元多项式加减运算.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-一元多项式加减运算.doc(25页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告-一元多项式加减运算.doc

山东理工大学计算机学院

课程设计

(数据结构)

班级

计科1102

姓名

张汝全

学号

1111051010

指导教师

肖爱梅

2013年1月7日

课程设计任务书及成绩评定

课题名称

动态链表结构下的一元多项式的加法、减法和乘法的实现。

Ⅰ、题目的目的和要求:

1.巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。

(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。

(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。

2.设计题目要求:

1)首先判定一元多项式是否稀疏

2)分别采用顺序和链式结构实现;

3)结果在M(x)中无重复阶项和无零系数项;

4)要求结果以升幂排列输出

Ⅱ、设计进度及完成情况

日期

内容

1.7-1.9

选取参考书,查阅有关文献资料,完成资料搜集和系统分析工作。

1.10-1.12

创建相关数据结构,录入源程序。

1.13-1.15

调试程序并记录调试中的问题,初步完成课程设计报告。

1.16

上交课程设计报告打印版并进行课程设计答辩,要求每个同学针对自己的设计回答指导教师3-4个问题。

1.17

考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。

Ⅲ、主要参考文献及资料

[1]严蔚敏数据结构(C语言版)清华大学出版社1999

[2]严蔚敏数据结构题集(C语言版)清华大学出版社1999

[3]谭浩强C语言程序设计清华大学出版社

[4]与所用编程环境相配套的C语言或C++相关的资料

Ⅳ、成绩评定:

设计成绩:

(教师填写)

指导老师:

(签字)

二年月日

目录

第一章概述……………………………………………………………1

第二章系统分析………………………………………………………2

第三章概要设计………………………………………………………3

第四章详细设计………………………………………………………4

第五章运行与测试……………………………………………………18

第六章总结与心得……………………………………………………20

参考文献………………………………………………………………21

第一章概述

课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。

同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在这次的课程设计中我选择的题目是动态链表结构下的一元多项式的加法、减法和乘法的实现。

一元多项式计算是用C语言设计一个一元多项式简单计算器。

它能够实现按指数升序排列建立并输出多项式,并且能够完成两个多项式的相加、相减与相乘的运算和将其结果输入的功能。

通过设计一元多项式,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能提高,综合运用所学的理论知识和方法独立分析和解决问题的能力;加深对常用数据结构的理解,强化逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。

第二章系统分析

 

1.动态链表结构下的一元多项式的加法、减法、乘法的实现。

可以分为几个模块:

输入模块、输出模块(升幂)、数据处理模块(多项式的加减乘)、主程序模块。

2.在程序执行过程中加入汉字提示符,让使用者清楚明白的操作该程序。

运行程序时看起来简洁有序,操作简单明了。

3.程序执行时的命令:

①创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤数据处理⑥输出结果。

4.测试数据。

输入的一元多项式系数指数分别为70,31,98,517和81,227,-98。

加法结果为:

7+11x+22x^(7)+5x^(17)

减法结果为:

7-5x-22x^(7)+18x^(8)+5x^(17)

5.乘法结果为:

56x+24x^

(2)+154x^(7)+3x^(8)+45x^(9)+198x^(15)-81x^(16)+40x^(18)+110x^(24)-45x^(25)

第三章概要设计

1.数据结构的设计

为了节省存储空间,只存储多项式中系数非零的项,本程序使用链式存储结构。

2.算法的设计本设计从总体上划分为3个模块。

a)主函数模块。

程序的入口,主要实现各个函数的调用。

b)头文件模块。

定义类和结构体。

c)函数模块。

数据处理和实现每个功能。

3.抽象数据类型

ADTlist{

数据对象:

D={ai|ai∈ElenSet,i=1,2,…,n,n≥0}

数据关系:

R1={|ai-1,ai∈D,i=2,…,n}

基本操作:

InitLink(&head,len)

初始条件:

链表为空。

操作结果:

创建链表。

Sparsity(&head,len)

初始条件:

链表已存在。

操作结果:

判断是否稀疏。

Display(head)

初始条件:

链表已存在。

操作结果:

输出多项式。

Merge(&head)

初始条件:

链表已存在。

操作结果:

合并指数相同的项。

SelectSort(&head)

初始条件:

链表已存在。

操作结果:

选择排序。

Negative(&head)

初始条件:

链表已存在。

操作结果:

取负。

DelZero(&head)

初始条件:

链表已存在。

操作结果:

删除系数为0的项。

operator+(&head,&b);

初始条件:

链表已存在。

操作结果:

重载+。

operator*(&head,&b);

初始条件:

链表已存在。

操作结果:

重载*。

}

第四章详细设计

1.类定义。

polynomial.h

#ifndefPOLYNOMIAL_H_INCLUDED

#definePOLYNOMIAL_H_INCLUDED

template

structNode{

Tcoef;//定义系数

Texpn;//定义指数

Node*next;

};//定义结构体

template//模板类

classLinkList{

private:

Node*head;//定义头结点

public:

LinkList();//初始化链表

voidInitLink(intlen);//建立链表

voidSparsity(intlen);//是否稀疏

voidDisplay();//显示

voidMerge();//合并指数相同的项

voidSelectSort();//选择排序

voidNegative();//取负

voidDelZero();//删除系数为0的项

LinkListoperator+(LinkList&b);//重载+

LinkListoperator*(LinkList&b);//重载*

};

#endif//POLYNOMIAL_H_INCLUDED

2.成员函数。

polynomial.cpp

#include

#include"polynomial.h"

usingnamespacestd;

template

LinkList:

:

LinkList(){

head=newNode;

head->next=NULL;

}//初始化

template

voidLinkList:

:

InitLink(intlen){

Node*p,*q;

q=head;

cout<<"系数指数:

"<

while(len--){

p=newNode;

cin>>p->coef>>p->expn;

p->next=NULL;

q->next=p;

q=p;

}

}//建立多项式

template

voidLinkList:

:

Display(){

DelZero();

Node*q;

q=head->next;

if(!

q){//空链表输出0

cout<<"0"<

return;

}

if(q->coef){

if(q->coef==1){

if(q->expn==0){

cout<coef;

}

elseif(q->expn==1){

cout<<"x";

}

else{

cout<<"x^"<<"("<expn<<")";

}

}

elseif(q->coef==-1){

if(q->expn==0){

cout<coef;

}

elseif(q->expn==1){

cout<<"-x";

}

else{

cout<<"-x^"<<"("<expn<<")";

}

}

else{

if(q->expn==0){

cout<coef;

}

elseif(q->expn==1){

cout<coef<<"x";

}

else{

cout<coef<<"x^"<<"("<expn<<")";

}

}

}

q=q->next;

while(q){

if(q->coef){

if(q->coef>0){

if(q->coef==1){

if(q->expn==0){

cout<<"+";

}

elseif(q->expn==1){

cout<<"+x";

}

else{

cout<<"+x^"<<"("<expn<<")";

}

}

else{

if(q->expn==0){

cout<<"+"<coef;

}

elseif(q->expn==1){

cout<<"+"<coef<<"x";

}

else{

cout<<"+"<coef<<"x^"<<"("<expn<<")";

}

}

}

else{

if(q->coef==-1){

if(q->expn==0){

cout<coef;

}

elseif(q->expn==1){

cout<<"-x";

}

else{

cout<<"-x^"<<"("<expn<<")";

}

}

else{

if(q->expn==0){

cout<coef;

}

elseif(q->expn==1){

cout<coef<<"x";

}

else{

cout<coef<<"x^"<<"("<expn<<")";

}

}

}

}

q=q->next;

}

cout<

}//输出多项式

template

voidLinkList:

:

Sparsity(intlen){

if(head->next==NULL){

cout<<"0"<

cout<<"不稀疏!

"<

return;

}

Node*p,*q;

q=head;

p=head->next;

while(q->next){

q=q->next;

}

doublex=1.0*len/(q->expn-p->expn);

Display();

if(x<=0.05)

cout<<"稀疏!

"<

else

cout<<"不稀疏!

"<

}//判断是否稀疏

template

voidLinkList:

:

Merge(){

Node*p,*q,*t;

for(q=head->next;q;q=q->next){

for(p=q->next;p&&p->expn==q->expn;){

q->coef+=p->coef;

q->next=p->next;

t=p;

p=p->next;

free(t);

}

}

}//合并指数相同的项

template

voidLinkList:

:

SelectSort(){

Node*p,*q;

for(q=head->next;q;q=q->next){

for(p=q->next;p;p=p->next){

if(q->expn>p->expn){

swap(q->coef,p->coef);

swap(q->expn,p->expn);

}

}

}

Merge();

}//选择排序升幂

template

voidLinkList:

:

Negative(){

Node*p;

p=head->next;

while(p){

p->coef=0-p->coef;

p=p->next;

}

}//取负

template

voidLinkList:

:

DelZero(){

Node*p,*q,*t;

p=head->next;

q=head;

while(p){

if(p->coef==0){

q->next=p->next;

t=p;

p=p->next;

free(t);

}

else{

q=p;

p=p->next;

}

}

}//删除系数为0的项

template

LinkListLinkList:

:

operator+(LinkList&b){

LinkListm;

Node*q,*p;

Node*pa,*pb;

pa=head->next;

pb=b.head->next;

q=m.head;

while(pa&&pb){

Tx=pa->expn-pb->expn;

if(x<0){

p=newNode;

p->coef=pa->coef;

p->expn=pa->expn;

p->next=NULL;

q->next=p;

q=p;

pa=pa->next;

}

elseif(x>0){

p=newNode;

p->coef=pb->coef;

p->expn=pb->expn;

p->next=NULL;

q->next=p;

q=p;

pb=pb->next;

}

else{

Tcoef=pa->coef+pb->coef;

if(coef){

p=newNode;

p->coef=coef;

p->expn=pa->expn;

p->next=NULL;

q->next=p;

q=p;

pa=pa->next;

pb=pb->next;

}

else{

pa=pa->next;

pb=pb->next;

}

}

}

while(pa){

p=newNode;

p->coef=pa->coef;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2