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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计

(数据结构)

班级

姓名

学号

指导教师

二○一○年七月十日

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

课题名称顺序结构、动态链表结构下的一元多项式的加法、减法、

乘法的实现。

Ⅰ、题目的目的和要求

1、设计目的

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

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

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

2、设计题目要求(给出你所选择的题目的要求描述)

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

2)分别采用顺序和动态存储结构实现;

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

4)要求输出结果的升幂和降幂两种排列情况;

Ⅱ、设计进度及完成情况

Ⅲ、主要参考文献及资料

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

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

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

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

Ⅳ、成绩评定

设计成绩:(教师填写)

指导老师:(签字)

二○一○年七月十日

目录

第一章概述 (1)

第二章系统分析 (1)

第三章概要设计 (2)

第四章详细设计 (3)

第五章运行与测试 (13)

第六章总结与心得 (16)

参考文献 (17)

本目录是根据正文文档自动生成的,请在报告完成后,更新目录的页码,更新方法如下:

1.鼠标单击目录任意部分选中目录;

2.单击鼠标右键选择“更新域”;

3.在出现的“更新目录”的对话框中选择“只更新页码”,见图1-3,单击“确定”按钮,目录页码将被更新。

更新完成后,最好再核对一下。

图1-3 更新目录页码示意图

第一章概述

课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。

数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在这次的课程设计中我选择的题目是顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。分别采用顺序结构和链式存储结构,利用多项得结果,最后得多项式中不含有重复阶项和零系数得项。除此之外,还得分为降幂和升幂两种排序方式。

第二章系统分析

1.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。可以分为几个模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序模块。

2.在程序过程中加入汉字提示符,让读者清楚明白的操作该程序。运行程序时看起来简洁有序,操作简单明了。

3.程序执行时的命令:①选择创建两个一元多项式②输入第一个一元多项式的项数③依次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤选择操作方式⑥选择降幂或升幂排序⑦输出结果⑧是否退出

4.测试数据。输入的一元多项式系数指数分别为7 0,3 1,9 8,5 17和8 1,22 7,-9 8。加法结果为;升幂降幂

减法结果为:升幂降幂

乘法结果为:升幂降幂

第三章概要设计

1、数据结构的设计

在该程序中分别分为顺序存储和链式存储结构。

2、算法的设计

本程序主要分为四大模块

①主程序模块

②输入模块:通过Getpolyn函数输入

③输出模块(升幂降幂):PrintPolyn函数实现输出

④数据处理模块(多项式的加减乘):通过一元多项式的Polynomial基本操作实现

3、抽象数据类型的设计

一元多项式抽象数据类型的定义:

抽象数据类型Polynomial的定义:

第四章详细设计

#include

#include

typedef struct

{ float coef; //系数

int expn; //指数

}term;

typedef struct LNode

{ term data; //term多项式值

struct LNode *next;

}LNode,*LinkList;

typedef LinkList polynomail;

/*比较指数*/

int cmp(term a,term b)

{ if(a.expn>b.expn) return 1;

if(a.expn==b.expn) return 0;

if(a.expn

else exit(-2);

}

/*又小到大排列*/

void arrange1(polynomail pa)

{ polynomail h=pa,p,q,r;

if(pa==NULL) exit(-2);

for(p=pa;p->next!=NULL;p=p->next); r=p;

for(h=pa;h->next!=r;)//大的沉底

{ for(p=h;p->next!=r&&p!=r;p=p->next)

if(cmp(p->next->data,p->next->next->data)==1) { q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;//r指向参与比较的最后一个,不断向前移动} }

/*由大到小排序*/

void arrange2(polynomail pa)

{ polynomail h=pa,p,q,r;

if(pa==NULL) exit(-2);

for(p=pa;p->next!=NULL;p=p->next); r=p;

for(h=pa;h->next!=r;)//小的沉底

{ for(p=h;p->next!=r&&p!=r;p=p->next)

if(cmp(p->next->next->data,p->next->data)==1) { q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;//r指向参与比较的最后一个,不断向前移动} }

/*打印多项式,求项数*/

相关文档
最新文档