华南师范大学增城学院。
课程设计报告册。
2012 ——2013 学年度第二学期。
计算机院/系网络工程专业 2011 年级 1 班。
课程名称: 数据结构课程设计
姓名: 苏梓翰
学号: 201106024115
一、程序设计与实现。
1、一元多项式运算。
1)需求分析:
一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
2)概要设计:
多项式输入输出:
功能:将要进行运算的多项式输入输出。
数据流入:要输入的多项式的系数与指数。
数据流出:合并同类项后的多项式。
程序流程图:多项式输入流程图如下图所示。
测试要点:输入的多项式是否正确,若输入错误则重新输入。
多项式的运算:
功能:将两多项式相加(减)
数据流入:调用输入函数。
数据流出:多项式相加(减)后的结果。
测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算
3)详细设计:
建立一元多项式。
polynlink createpolynlink(polynlink head,int m)
case 0:
case -1:
if(qc->xishu!=0)
else free(qc
return headc;
多项式x1-x2
polynlink subtractpolynlink(polynlink pa,polynlink pb)
pd=addpolynlink(pa,h);
for(p=h->next;p;p=p->next
p->xishu*=-1;
return pd;
4)调试报告:
在调试的过程中,我想到了在现实计算中,系数是可以为小数的,在该程序中,因为系数定义为int即整数类型的,不能完成这种操作,经过查书,只要把系数定义为float即浮点数类型就可以了,但由于老师要求是定义为int,这个程序我改动后运行可以成功,但老师要求的是int的类型,我就没把改动后的程序弄上去。
运行结果:运行一元多项式计算。exe
输入数字1输入数字2
输入数字1数字2数字3以外的字符,得到。
输入数字3,退出。
2、猴子吃桃子问题。
1)需求分析:
猴子每天都吃当前桃子的一半且再多吃一个,假设第一天开始时,即摘的桃子总数有a0只桃子,第一天吃过之后剩下a1只桃子,第二天吃过之后剩下a2只,. 第9天吃过之后剩下a9只,第10天吃过之后剩下a10只,在a0,a1, a2,. a1 0中,只有a10= 1是知道的,现要求a0,
a9= 2 * a1 0+ 1 )
a8= 2 * a9+ 1 )
a1= 2 * a2+ 1 )
a0= 2 * a1+ 1 )
也就是:ai= 2 * ai + 1), 其中i=10,9,8,7,6,..1,0
2)概要设计:
采用数组和递归方法,不管是采用哪种方法、哪种数据结构,其基本语句都是 ai= 2 * ai + 1+1),其中i=10,9,8,7,6,..1,0
3)详细设计:
采用数组数据结构:构建子函数void array(int a)初始化i=10,从10开始计算,i--,通过语句while(i>0),来循环运行a[i-1]=2*a[i]+2,以求出每天剩下的桃子数当i<=1时退出循环。 在主函数中定义数组int a[11]来存储每天剩下的桃子总数,初始化a[10] =1,通过调用子函数array(a),并利用for循环来输出每天剩下的桃子总数,其中a[0]即为原来猴群所摘的桃子的总数。
void array(int a)
可知n=2*recursion(n+1)+2语句要调用10+9+……1共55次,桃子原来的总数为: recursion(0)。
int recursion(int n){
if(n==10)
return 1;
elsereturn n=2*recursion(n+1)+2;
4)调试报告:
由于此程序是分模块进行,且每一个模块相对比较简单,所以在做程序的过程中比较顺利,刚开始时,每一个算法我都是单独的一个程序来实现,基本上没有出现问题,在将所有方法、程序做好后,再将所有程序集合在一起,利用主函数的菜单来分块调用以实现题目要求。在整合过程中,出现了一些编辑错误,但是都是比较小的错误,很快就找出来了,应该说整个程序做的过程还是比较顺利的,我在程序要求上增加了一个数字键3,用来退出这个exe程序,由于该程序相对简单,我在排版上也做了比较充足的考虑,并执行,让问题也显示在屏幕上,使得界面比较完整,看起来比较舒服,本来有在主函数里面加入背景颜色的语句system("color 15"),不过感觉不好看,最后还是把这个语句删掉。
运行结果:运行猴子吃桃子。exe
输入数字1,得到。
输入数字2,得到。
输入数字3,得到。
输入数字1数字2数字3以外的字符,得到。
3、哈夫曼编码&译码系统。
1)需求分析。
程序的功能:输入组成编码字母各个叶子的值和权值,建立哈夫曼树并生成哈夫曼编码,且能利用生成的编码对huffman**串进行译码,输出相应结果。
2)概要设计。
主要设想模块示意图如下:
3)详细设计。
哈夫曼树节点的数据类型定义:
struct node
char st1[99];
char st2[99];
float weight;
int parent,lch,rch;
;struct node ht[max];
编码和译码功能:
void creat()
float min1,min2;
int i=0,j=0,min11,min22;
printf(" 输入(编码权值),输入0结束:");
while(1)
printf(" 编码%d,权值%d:",i,i);
j=0;while(1)
scanf("%c",&ht[i].st1[j]);
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...