数据结构课程设计报告.docx
- 文档编号:10656035
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:39
- 大小:589.25KB
数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(39页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
沈阳工程学院
课程设计
设计题目:
数据结构与算法课程设计
系别信息工程系班级系统本111-2
学生姓名马金波李享学号415212415114
指导教师张楠代钦职称讲师讲师
起止日期:
2012年12月10日起——至2012年12月14日止
沈阳工程学院
课程设计任务书
课程设计题目:
数据结构与算法课程设计
系别信息工程系班级系统本111-2
学生姓名马金波学号2011415212
学生姓名李享学号2011415114
指导教师张楠代钦职称讲师讲师
课程设计进行地点:
F608
任务下达时间:
2012年12月10日
起止日期:
2012年12月10日起——至2012年12月14日止
教研室主任年月日批准
一、课程设计的原始资料及依据
数据结构与算法课程设计是在完成数据结构理论课程学习之后进行的一个综合性的实践教学环节,是对课程理论和课程实验的一个补充。
通过课程设计,培养学生综合运用已学过的理论和技能去分析和解决实际问题的能力,并使所学知识得到进一步巩固、深化和扩展。
二、课程设计主要内容及要求
设计内容:
1、叉树用二叉链表存储,编写一算法,判别给定的二叉树是否为完全二叉树。
(马金波)
2、编写先序遍历二叉树的非递归算法。
(李享)
3、校园导游程序(2人)
●问题描述:
用无向图表示你所在学校的景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等消息。
●基本要求:
1.能查询各景点的相关信息
2.为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
设计要求:
(1)每名同学任选两题;
(2)学生应明确设计任务和要求,并拟定设计计划,按时完成;
(3)设计分阶段进行,每一阶段的设计没有原则错误时才能允许进行下一阶段设计;
(4)设计过程中,提倡独立思考、深入钻研,主动地、创造性地进行设计;
(5)要求设计态度严肃认真、有错必改。
三、对课程设计说明书撰写内容、格式、字数的要求
1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:
设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。
一般不应少于3000字。
2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。
4.课程设计说明书手写或打印均可。
手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。
文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。
5.课程设计说明书装订顺序为:
封面、任务书、成绩评定表、目录、正文、参考文献。
四、设计完成后应提交成果的种类、数量、质量等方面的要求
1.完成“任务书”中指定的功能,运行结果正确。
2.课程设计报告。
五、时间进度安排
顺序
阶段日期
计划完成内容
备注
1
第1天
阅读资料及系统分析设计
2
第2-3天
程序编制
3
第4天
程序编制、调试及运行
4
第4天
成绩评定
5
第5天
书写课程设计说明书
六、主要参考资料(文献)
[1]《数据结构》,清华大学出版社,2001,严蔚敏吴伟民
[2]《数据结构题集》,清华大学出版社,1999,严蔚敏吴伟民
[3]《数据结构习题与解析》,清华大学出版社,2006,李春葆
[4]《数据结构》,高等教育出版社,2006,许卓群
[5]《数据结构习题解析》,清华大学出版社,2011,殷人昆
沈阳工程学院
数据结构与算法课程设计成绩评定表
系(部):
信息工程系班级:
系统本112学生姓名:
马金波
指导教师评审意见
评价
内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价
内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评阅教师签名:
年月日
课程设计总评成绩
分
沈阳工程学院
数据结构与算法课程设计成绩评定表
系(部):
信息工程系班级:
系统本111学生姓名:
李享
指导教师评审意见
评价
内容
具体要求
权重
评分
加权分
调研
论证
能独立查阅文献,收集资料;能制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力
态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作,
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,难度适宜。
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指导教师签名:
年月日
评阅教师评审意见
评价
内容
具体要求
权重
评分
加权分
查阅
文献
查阅文献有一定广泛性;有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中。
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,结论严谨合理,文字通顺,技术用语准确,符号统一,编号齐全,图表完备,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评阅教师签名:
年月日
课程设计总评成绩
分
摘要
用无向图表示学校的景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等消息。
能查询各景点的相关信息,为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
判断完全二叉树,先序遍历二叉树等算法的实现。
关键词:
最短路径,数据结构,完全二叉树,先序遍历
第1章绪论
1.1背景
计算机技术作为信息化的核心技术受到全社会的普遍重视。
如今,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。
深入掌握计算机专业知识、具有良好系统设计与分析能力的计算机高级专业人才在社会上深受欢迎。
而系统设计与分析能力的培养需要通过实践训练才能获得。
通过计算机对一些系统的管理已经成为一种系统、便捷的方式。
1.2设计目的与任务
1.2.1本课程设计的目的
1.课程设计是电子信息类专业重要的实践教学环节。
设置课程设计的目的是加强学生对本课程及相关课程知识的理解,培养学生综合运用理论知识分析解决实际问题的方法与能力。
有助于提高学生的创新能力和创新意识。
搞好课程设计教学工作,对实现专业培养目标,提高学生全面素质有重要作用。
2.通过课程设计更进一步理解数据结构的基础知识。
3.训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
4.熟练掌握数据结构知识在程序中的应用,了解书本知识在解决实际问题下的用途。
1.2.2本课程设计的任务
1.校园导游程序(2人)
问题描述:
用无向图表示你所在学校的景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等消息。
基本要求:
(1)能查询各景点的相关信息
(2)为来访客人提供景点的问路查询,即已知一个景点,查询到某景点之间的一条最短路径及长度。
2.运用所学数据结构知识实现二叉树的建立,遍历,判断是否是完全二叉树等等相关操作。
(马金波)
3.编写先序遍历二叉树的非递归算法。
(李享)
第2章校园导游系统总体设计
2.1功能设计分析
2.1.1设计思路分析
首先设计主函数,运用Switch语句设计选择菜单,用do…while语句实现主函数的循环,其次是功能模块的设计,利用数组、结构体存储景点信息供游者查询,用矩阵存放最短路径供游者查询。
2.1.2设计功能分析
设计算法,实现查询景点信息,景点间最短路径的功能。
2.2总体流程图的绘制
图2.1校园导游系统总体流程图
第3章校园导游系统详细设计及编程实现
3.1详细设计思路
首先设计输入语句,要求用户输入选项前的代码,若输入不正确要求重新输入,用户输入正确后,设置Switch语句,实现选择的功能,并用do…while语句实现主函数的循环,其次设计功能函数,首先设置输入函数,允许校方输入景点信息,利用for循环、结构体、数组实现;接着设计查询景点信息功能模块,首先要求用户输入查询景点信息,程序判断景点是否存在,若不存在提示用户重新输入,否则输出景点信息;最后设计查询最短路径功能模块,首先要求用户输入出发点和终点,若出发点和重点相同,提示用户输入不同的景点,否则给出最短路径。
3.2详细设计流程图的绘制
3.2.1主函数流程图
图3.1校园导游系统主函数流程图
3.2.2输入信息的函数流程图
图3.2信息输入函数流程图
3.2.3查询景点信息函数流程图
图3.3景点信息查询流程图
3.2.4查询最短路径函数流程图
图3.4最短路径查询流程图
3.3编码实现
#include
#include
#include
#defineV_NUM5//景点个数
structinformation//存储景点信息
{
intnum;//景点编号
charname[10];//景点名字
charjsh[20];//景点介绍
}jd[5];//jd[5]用于存储景点信息
voiddy_jd_infor()//输入景点信息
{
for(inti=0;i<5;i++)
{
jd[i].num=i+1;
printf("请输入景点%d的名字:
",i+1);
scanf("%s",&jd[i].name);
printf("请输入景点%d的简介:
",i+1);
scanf("%s",&jd[i].jsh);
system("pause");
system("cls");
}
}
voidshow()//查询函数
{
inti,k;
printf("请输入查询景点的编号:
");
scanf("%d",&k);
while(k>6||k<0)
{
printf("错误!
请重新输入:
\n");
scanf("%d",&k);
}
for(i=0;i<5;i++)
{
if(jd[i].num==k)
{
printf("%s\n",jd[i].name);
printf("%s\n",jd[i].jsh);
system("pause");
system("cls");
break;
}
}
}
voidmin()//最短路径
{
intq,zh;//起点和终点
printf("请输入查询出发景点的编号:
");
scanf("%d",&q);
printf("请输入查询终点景点的编号:
");
scanf("%d",&zh);
while(q==zh)
{
system("cls");
printf("错误!
请重新输入不同的景点!
\n");
printf("请输入查询出发景点的编号:
");
scanf("%d",&q);
printf("请输入查询终点景点的编号:
");
scanf("%d",&zh);
}
intlj[5][5]={0,100,700,200,400,100,0,600,300,300,700,600,0,
600,150,200,300,600,0,600,400,300,150,600,0};
printf("从景点%d到景点%d的最短路径为:
%d\n",q,zh,lj[q][zh]);
system("pause");
system("cls");
}
voidmune()//主函数菜单
{
printf("1.输入景点信息\n");
printf("2.查询景点信息\n");
printf("3.查询景点间最短路径\n");
printf("0.退出系统\n");
}
voidmain()
{
do{
intchoce;
mune();
printf("请选择:
");
scanf("%d",&choce);
while(choce<0||choce>3)//检查是否输入错误
{
printf("错误!
请重新输入\n");
scanf("%d",&choce);
}
system("cls");
switch(choce)
{
case1:
dy_jd_infor();break;
case2:
show();break;
case3:
min();break;
case0:
printf("感谢使用校园导游系统,再见!
\n");
exit(0);break;
}
}while
(1);
}
第4章校园导游系统程序运行与调试
4.1程序调试
运行程序,输入不同数据,测试不同模块的功能,若测试结果是否和预期结果一致,则证明程序正确,否则调试程序,直到程序正确为止。
4.2程序运行截图
4.2.1程序运行开始
图4.1程序开始运行截图
4.2.2输入数据
图4.2输入数据截图1
图4.2输入数据截图2
图4.3输入数据截图3
图4.4输入数据截图4
图4.5输入数据截图5
4.2.3查询景点信息结果
图4.6景点查询截图1
图4.7景点查询截图2
4.2.4查询景点间最短路径
图4.8查询最短路径截图1
图4.9查询最短路径截图2
图4.10查询最短路径截图3
4.2.5退出程序
图4.11退出程序截图
第5章判断完全二叉树总体设计
5.1功能设计分析
5.1.1设计思路分析
建立二叉树,首先设置结点结构体,包括结点的左子树,右子树,数据的存储以及相关指针的设置。
5.1.2设计功能分析
设计算法,实现判断二叉树是否是完全二叉树的功能。
5.2总体流程图的绘制
图5.1判断完全二叉树总体流程图
第6章判断完全二叉树详细设计及编程实现
6.1详细设计思路
首先设计输入语句,一次性输入二叉树的全部信息,不存在的元素用“0”代替,构建二叉树,将输入的数据赋值给相应结点存储数据的成员。
设计算法,实现判断完全二叉树的功能。
首先在建立二叉树时,设计变量K,记录输入元素的个数,然后利用二叉树的遍历,设计变量I,计算实际输出的元素的个数,在利用完全二叉树所有元素的个数k=POW(2,M)-1,计算二叉树的深度,并计算该深度完全二叉树应有元素的个数P。
如果K=P,那么该二叉树是完全二叉树,否则不是。
6.2详细设计流程图的绘制
图6.1判断完全二叉树详细流程图
6.3编码实现
#include
#include
#include
inti=0;//计算实际存在元素的个数
intm=0;//计算二叉树的深度
typedefcharElem;
typedefstructNode//结点信息
{
Elemdata;
structNode*pLchild;
structNode*pRchild;
}BTreeNode,*BTree;
intk=0;//计算输入元素的个数,包括0
BTreeCreateBTree(BTreeT)//创建二叉树
{
Elemx;
k=k+1;
printf("\t");
scanf("%c",&x);
if('0'==x)
{
T=NULL;
}
else
{
T=(BTree)malloc(sizeof(BTreeNode));
T->data=x;
T->pLchild=CreateBTree(T->pLchild);
T->pRchild=CreateBTree(T->pRchild);
}
returnT;
}
voidPreTraverseBTree(BTreeT)//实现前序遍历,用于计算
{
if(NULL!
=T)
{
i=i+1;//计算实际存在元素的个数
PreTraverseBTree(T->pLchild);
PreTraverseBTree(T->pRchild);
}
}
voidnume()//显示菜单
{
printf("\t*************************\n");
printf("\t*若子树不存在,以0表示*\n");
printf("\t*例:
*\n");
printf("\t*A*\n");
printf("\t*BC*\n");
printf("\t*DEFG*\n");
printf("\t*输入:
ABCD00E00F00G00*\n");
printf("\t*************************\n");
}
voidpanduan()//判断是否是完全二叉树
{
intp=0;//若是完全二叉树应有元素的个数
while(pow(2,m) { p=p+pow(2,m); m++; } if(p==k) { printf("\t该二叉树是完全二叉树\n");} else { printf("\t该二叉树不是完全二叉树\n"); } } voidmain()//主函数 { BTreeT=NULL; nume(); printf("\t请输入二叉树元素: \n"); T=CreateBTree(T); PreTraverseBTree(T); printf("\t\n"); panduan(); } 第7章判断完全二叉树程序运行与调试 7.1程序调试 运行程序,输入不同数据,测试结果是否和预期结果一致,若一致则证明程序正确,否则调试程序,直到程序正确为止。 7.2程序运行截图 7.2.1程序运行开始截图 图7.1程序运行开始截图 7.2.2输入数据截图 图7.2输入数据截图 7.2.3程序运行结果截图 图7.3程序运行截图1 图7.4程序运行截图2 第8章先序遍历二叉树程序的编写与运行 8.1先序遍历二叉树的非递归算法 算法如下 #include"stdio.h" #include"malloc.h" #include"string.h" #include"stdlib.h" #include"conio.h" #defineMax20//结点的最大个数 typedefstructBinTNode { intdate; structBinTNode*lchild,*rchild; }BinTNode; voidPreOrderUnrec(Bitree*t) { Stacks; StackInit(s); BinTNode*p=t; while(p! =NULL||! StackEmpty(s)) { while(p! =NULL) { visite(p->date); push(s,p); p=p->lchild; } if(! StackEmpty(s)) { p=pop(s); p=p->rchild; } } } 图8.1创建流程图 8.2二叉树 问题: 二叉树用二叉链表存储,写一个算法将二叉树中的叶子结点按从右至左的顺序建立一个单链表。 两个问题来对本学期所学数据结构的算法巩固和加深。 8.2.1主函数代码及流程图 图8.2主函数功能模块图 voidmain() { BinTreet; printf("输入完全二叉树的先序序列: \n"); //输入完全二叉树的先序序列用0代表虚结点 CreatB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告