课 程 设 计
(数据结构)
班 级
姓 名
学 号
计科0805
刘光强
0812103167
指导教师
张艳华
二○一二年一月七日
课程设计任务书及成绩评定
课题名称 顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的
实现
Ⅰ、题目的目的和要求
1、设计目的
巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,
最终使学生能够熟练应用数据结构的知识写程序。
(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正
确求解过程并编写代码实现。
2、设计题目要求(给出你所选择的题目的要求描述)
1) 首先判定多项式是否稀疏
2) 分别采用顺序和动态存储结构实现;
3) 结果 M(x)中无重复阶项和无零系数项;
4) 要求输出结果的升幂和降幂两种排列情况;
Ⅱ、设计进度及完成情况
日 期
内
容
2012.12.26-12.27
选取参考书,查阅有关文献资料,完成资料搜集和系统分析工
作。
2011.12.28~7.31 创建相关数据结构,录入源程序。
2012.1.4~1.6
20012.1.7~1.9
调试程序并记录调试中的问题,初步完成课程设计报告。
上交课程设计报告打印版并进行课程设计答辩,要求每个同学
针对自己的设计回答指导教师 3-4 个问题。
考核结束后将课程设计报告和源程序的电子版交班长统一刻
光盘上交。
Ⅲ、主要参考文献及资料
[1] 严蔚敏.数据结构(C 语言版).清华大学出版社,2007
[2] 严蔚敏.数据结构题集(C 语言版).清华大学出版社,2007
[3] 谭浩强.C 语言程序设计.清华大学出版社,2005
[4] 与所用编程环境相配套的 C 语言或 C++相关的资料
Ⅳ、成绩评定
设计成绩:
(教师填写)
指导老师:
(签字)
二○一○年 七 月 十 日
第一章 概述 ............................................... 1
目 录
第二章 系统分析 ........................................... 1
第三章 概要设计 ........................................... 3
第四章 详细设计 ........................................... 4
第五章 运行与测试 ........................................ 13
第六章 总结与心得 ........................................ 15
参考文献 ................................................. 16
第一章 概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程
相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课
程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业
基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择
和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计
方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
在这次的课程设计中我选择的题目是顺序结构、动态链表结构下的一元多项式的加
法、减法、乘法的实现。分别采用顺序结构和链式存储结构,利用多项得结果,最后得
多项式中不含有重复阶项和零系数得项。除此之外,还得分为降幂和升幂两种排序方式。
第二章 系统分析
1. 顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。可以分为几个
模块:输入模块、输出模块(升幂降幂)、数据处理模块(多项式的加减乘)、主程序
模块。
2. 在程序过程中加入汉字提示符,让读者清楚明白的操作该程序。运行程序时看起来简
洁有序,操作简单明了。
3. 程序执行时的命令:①选择创建两个一元多项式②输入第一个一元多项式的项数③依
次输入一元多项式的系数和指数④以相同方式输入第二个一元多项式⑤选择操作方
式⑥选择降幂或升幂排序⑦输出结果⑧是否退出
1
4.测试数据。输入的一元多项式系数指数分别为 7 0,3 1,9 8,5 17 和 8 1,22 7,-9 8。
加法结果为;升幂
减法结果为:升幂
乘法结果为:升幂
降幂
降幂
降幂
2
第三章 概要设计
1、数据结构的设计
在该程序中分别分为顺序存储和链式存储结构。
2、算法的设计
本程序主要分为四大模块
①主程序模块
②输入模块:通过 Getpolyn 函数输入
③输出模块(升幂降幂):PrintPolyn 函数实现输出
④数据处理模块(多项式的加减乘):通过一元多项式的 Polynomial 基本操作实现
3、抽象数据类型的设计
一元多项式抽象数据类型的定义:
抽象数据类型 Polynomial 的定义:
3
第四章 详细设计
//系数
//指数
#include
#include
typedef struct
{ float coef;
int expn;
}term;
typedef struct LNode
{ term data;
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.expnnext!=NULL;p=p->next);
for(h=pa;h->next!=r;)//大的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
r=p;
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);
for(h=pa;h->next!=r;)//小的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
r=p;
4