数据结构课程设计1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
课程设计报告要求 附录:实现源代码
– 程序风格清晰易理解 – 有充分的注释,有意义的注释少于代码 的30%将不得分。
• 课程设计必须独立完成,课程设计报 告有雷同的将不得分。 • 必须在指定的时间内上交课程设计报 告。
11
课程设计题目
12
1、计算器 、
输入:
不含变量的数学表达式的中缀形式,可以接受的 操作符包括+、-、*、/、%和(、)。
27
寻找路径算法
bool FindPath() {// 寻找从位置( 1 , 1 )到出口( m , m )的路径 增加一圈障碍物; // 对跟踪当前位置的变量进行初始化 Position here; here.row = 1; here.col = 1; maze [1] [1] = 1; // 阻止返回入口
• 2.撰写课程设计报告
5
课程设计提交
设计报告 可运行源代码 邮件标题:数据结构课程设计-课程设计题 目-10-班-学号-姓名 设计报告命名格式:数据结构课程设计-课 程设计题目-10-班-学号-姓名.doc 源代码打包命名格式:课程设计题目-10班-学号-姓名.rar
6
课程设计报告要求
课程设计题目 姓名、学号、班级 日期 1. 设计要求 – 问题描述(介绍题目内容) – 输入要求
2
数据结构内容Байду номын сангаас顾
• 线性结构 • 树形结构(层次结构) • 图(网)结构
结构:
1. 逻辑结构 2. 存储结构 3. 算法
3
开发语言和环境
C++ Java Eclipse 或 VC++ Eclipse
4
设计要求
• 1.完成软件设计开发,运行得到正确的 结果
– 界面设计:可输入、输出,操作简单清 晰 – 功能设计:尽可能满足实际运行要求。 有健壮性
输出:
如果表达式正确,则输出表达式的结果,如果表 达式非法,则输出错误信息。
注:
输入/输出形式可采取终端设备输入/输出,也可 采用文件输入/输出,一个文件中可包含多个表达 式
知识点:堆栈、队列
13
2、文本文件压缩 、
输入:文本文件(压缩文件) 输出:压缩文件(文本文件) (压缩率)
知识点:堆、霍夫曼树、二叉树遍历
28
/ /寻找通往出口的路径 while (here不是出口) do { 选择here的一个可行的相邻位置; if (存在这样一个相邻位置neighbor) { 把当前位置here 放入堆栈path ; // 移动到相邻位置,并在当前位置放上障碍物 here = neighbor; maze[here.row] [here.col] = 1;} else { // 不能继续移动,需回溯 if (堆栈path为空) return false; 回溯到path栈顶中的位置here; } } return true; }
16
栈的应用例: 栈的应用例:迷宫老鼠
• 迷宫老鼠(rat in a maze)问题要求寻找一条从 入口到出口的路径。
17
问题描述
• 输入:迷宫 • 输出:从入口到出口的路径 – 路径是由一组位置构成的,每个位置上都没 有障碍,且每个位置(第一个除外)都是前一 个位置的东、南、西或北的邻居。
18
33
搜索迷宫路径的代码
//在迷宫周围增加一圈障碍物 for (int i=0; i<=m+l; i++) { maze[0][i]= maze[m+l][i]=1; //底和顶 maze[i][0]= maze[i][m+l]=1; //左和右 } Position here; here.row = 1; here.col = 1; maze[i][i]= 1; // 阻止返回入口 int option = 0; //下一个移动方向编号 int LastOption = 3;
• 假定maze、m (迷宫的大小)和path都是按如 下方式定义的全局变量: • int **maze, m; • Stack<Position> *path;
32
搜索迷宫路径的代码
bool FindPath() {// 寻找从位置(1,1)到出口(m,m)的路径 //如果成功则返回true ,否则返回false // 如果内存不足则引发异常NoMem path = new Stack<Position>(m * m - 1); //对偏移量进行初始化 Position offset[4]; offset[0].row = 0; offset[0].col = 1; //向右 offset[l].row = 1; offset[l].col = 0; // 向下 offset[2].row = 0; offset[2].col = -1; //向左 offset[3].row = -1; offset[3].col = 0; //向上
34
搜索迷宫路径的代码
//寻找一条路径 while (here.row!=m||here.col!=m){// 不是出口 { //寻找并移动到一个相邻位置 int r, c; while (option <= LastOption) { r = here.row + offset[option].row; c = here.col + offset[option].col; if (maze[r][c]== 0) break; //可行的相邻位置 option++; //下一个选择 }
数据结构课程设计
王晓琳
xlwang@sdu.edu.cn xlwangsdu@163.com(提交设计报 ( 告和源程序邮箱) 告和源程序邮箱)
1
课程设计目标
1. 巩固和加深对数据结构基本知识的理解, 提高综合运用课程知识的能力。 2. 掌握解决复杂问题的程序设计方法和技术 ——学会数据的组织方法和现实世界问题 在计算机内部的表示方法,并针对问题的 应用背景分析,选择最佳的数据结构与算 法。 3. 提高自学参考书籍,查阅手册和文献资料 的能力。 4. 培养文档组织、书写能力。
30
下一个移动方向的计算
• 从here回退到前一个位置(next)后下一个移动 方向的计算 if (next.row==here.row) //here为next邻居 option=2+next.col-here.col; else option =3+next.row-here.row;
31
迷宫算法实现
23
寻找路径实现思路
首先把迷宫的入口作为当前位置。 如果当前位置是迷宫出口,那么已经找到了一条路径,搜 索工作结束。 • 如果当前位置不是迷宫出口,则在当前位置上放置障碍物 ,以便阻止搜索过程又绕回到这个位置。 • 然后检查相邻的位置中是否有空闲的(即没有障碍物),如 果有,就移动到这个新的相邻位置上,然后从这个位置开 始搜索通往出口的路径。如果不成功,选择另一个相邻的 空闲位置,并从它开始搜索通往出口的路径。为了方便移 动,在进入新的相邻位置之前,把当前位置保存在一个堆 当前位置保存在一个堆 栈中。 • 如果所有相邻的空闲位置都已经被探索过,并且未能找到 路径,则表明在迷宫中不存在从入口到出口的路径。
备注:文本文件为一篇英文文章(汉字文 件)
14
3. 校园导游
• 用无向网表示校园景点平面图,图中顶点表示主要景 点,存放景点的编号、名称、简介等信息,图中的边 表示景点间的道路,存放路径长度等信息。要求能够 回答有关景点介绍、游览路径等问题。 • 要求 – (1) 查询任意景点的相关信息; – (2) 查询图中任意两个景点间的最短路径。 – (3) 查询图中任意两个景点间的所有路径。 – (4) 增加、删除、更新有关景点和道路的信息。 – (5)* 求多个景点的最佳(最短)游览路径。 • 知识点:单源点最短路径、任意顶点间的最短路径、 知识点: 图的搜索
35
搜索迷宫路径的代码
// 找到一个相邻位置了吗? if (option<=LastOption){//移动到maze[r][c] path->Add(here) ; here.row = r; here.col = c; //设置障碍物以阻止再次访问 maze[r][c]= 1; option = 0;
• • 输入形式 输入数据例子
– 输出要求
• • 输出形式 输出数据例子
7
课程设计报告要求
2.数据结构与算法描述
– 解决问题的整体思路 – 描述解决该问题所需要的数据结构与算法
• 处理问题用到的关键数据结构和算法都要描 述,不要只描述主函数 • 数据结构和算法可用伪码和图示描述,不要 只写源代码和注释 • 类的定义和类之间的关系,可用类图等形式 来描述。
}
36
搜索迷宫路径的代码
else {//没有可用的相邻位置,回溯 if (path->IsEmpty()) return false; Position next; path->Delete(next) ; if (next.row == here.row) //here为next邻居 option = 2 + next.col - here.col; else option = 3 + next.row - here.row; here = next; } } return true;//到达迷宫出口 }
24
• •
简化算法的处理
• 对于迷宫内部的位置(非边界位置),有四种 可能的移动方向:右、下、左和上。 • 对于迷宫的边界位置,只有两种或三种可能 的移动。 • 为了避免在处理内部位置和边界位置时存在 差别,可以在迷宫的周围增加一圈障碍物。
25
迷宫的描述
• 增加一圈障碍物
26
位置表示
• 可以用行号和列号来指定每个迷宫位置,行号和 列号被分别称之为迷宫位置的行坐标和列坐标。 • 可以定义一个相应的类Position来表示迷宫位置 ,它有两个私有成员row和col。 • 为保存从入口到当前位置的路径,可以采用以下 基于公式化描述的堆栈: • Stack<Position> path(MaxPathLength); • 其中MaxPathLength是指最大可能的路径长度( 从入口到迷宫中任一位置)。
37
思考
• 迷宫自动生成? • 寻找从入口到出口的最短路径?
• 程序主要功能模块 – 输入迷宫、寻找路径和路径输出 – 开始显示欢迎界面
21
设计方案
• 输入迷宫:确定输入方式及输入界面
– 用户按逐行方式输入矩阵 – 在输入矩阵数据之前,用户必须首先给出矩阵的 行数(它同时也是矩阵的列数)
22
设计方案
• 用户输入提示
•
考虑:颜色的使用、声音的使用、信息的询问、输入数 据的验证等等
15
4、检查网络 、
• 给定一个计算机网络以及机器间的双向连线列表, 每一条连线与允许两端的计算机进行直接的文件传输 ,其他计算机间若存在一条连通路径,也可以进行间 接的文件传输。 • 要求: – 任意指定两台计算机,判断它们之间是否可以进 行文件传输? – 判断整个网络中是否任意两台机器间都可以文件 传输?若不可以,请给出当前网络中连通分量的 个数 – 增加两台计算机之间的连线。 • 知识点:Union-find问题
29
下一个移动位置的选择
• 按一种固定的方式来选择可行的相邻位置,将可以使问题 得到简化。 • 例如,可以首先尝试向右移动,然后是向下,向左,最后 是向上,对应的移动编号依次为0,1,2,3。 • 从当前位置here沿移动方向i(编号)移动到下一个相邻位置 时 , 则 row 和 col 坐 标 的 增 量 是 offset[i].row, offset[i].col.
迷宫的描述
• 假定用n×m 的矩阵来描述迷宫 n 的矩阵 迷宫,位置(1,1) 迷宫 表示入口,(n,m)表示出口,n和m分别代表 迷宫的行数和列数。 • 迷宫中的每个位置都可用其行号和列号来指 定。在矩阵中,当且仅当在位置(i,j)处有 一个障碍时其值为1,否则其值为0。
19
迷宫的描述
20
设计方案
8
课程设计报告要求
3.测试结果
– 测试输入 – 测试输出 – 测试中的问题及解决 – 注:
• • 测试输入及对应的测试输出可放入一张表格中 有充分的测试数据,必须包括容错测试数据
9
课程设计报告要求
4.分析与探讨
– 测试结果分析 – 算法复杂性分析 – 探讨更多解决问题的途径,或者提出自 己的见解,改进算法以得到更好结果的 建议。