
具体课程设计报告要求如下:
一 需求分析:
在该部分中根据设计题目的要求,充分地分析和理解问题,叙述系统的功能要求,明确问题要求做什么?以及条件是什么?
1.1问题描述
1.2基本要求
(1) 输入的形式和输入值的范围;
(2) 输出的形式;
(3) 程序所能达到的功能;
二 概要设计
说明本程序中用到的所有抽象数据类型的定义。主程序的流程以及各程序模块之间的层次(调用)关系。
1、 数据结构
2、 程序模块
3、各模块之间的调用关系以及算法设计
三 详细设计
实现概要设计中定义的所有数据类型,对每个操作写出c语言算法;对主程序和其他模块也都需要写出c语言算法;写出出函数和过程的调用关系.
四 测试与分析
测试数据,输出测试的结果,这里的测试数据应该完整和严格。并对结果进行分析。
五 总结
总结可以包括 : 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。
六附录:源程序清单。
参考题目(可以选其他题目):
一、括号匹配的检验
【问题描述】 假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即(()[ ])或[([ ][ ])]等为正确表达式,[ ( ] )或( ( ( ]均为不正确的格式。检验括号是否匹配的方法可用“期待的紧迫程度”这个概念来描述。例如:考虑下列的括号序列:
[ ( [ ] [ ] ) ]
1 2 3 4 5 6 7 8
当计算机接受了第一个括号以后,他期待着与其匹配的第8个括号的出现,然而等来的却是第二个括号,此时第一个括号” [“ 只能暂时靠边,而迫切等待与第二个括号相匹配的第7个括号的出现,类似的,因只等来了第三个括号“[“,此时,其期待的紧迫程度较第二个括号更紧迫,则第二个括号只能靠边,让位于第三个括号,显然第三个括号的期待紧迫程度高于第2个,而第二个括号的期待紧迫程度高于第一个括号; 在接受了第4个括号之后,第三个括号的群殴带得到了满足,消解之后,第二个括号的期待匹配就成了最紧迫的任务了,…….,依次类推。 可见这个处理过程正好和栈的特点相吻合。
【基本要求】 读入圆括号和方括号的任意序列,输出“匹配” 或 “此串括号匹配不合法”。 【测试数据】 输入( [ ] ( ) ),结果“匹配”
输入 [ ( ) ],结果“此串括号匹配不合法”
【测试提示】 设置一个栈,每读入一个括号,若是左括号,则作为一个新的更紧迫的期待压入栈中; 若是右括号,并且与当前栈顶的左括号相匹配,则将当前栈顶的左括号退出,继续读下一个括号,如果读入的右括号与当前栈顶的左括号不匹配,则属于不合法的情况; 在初始和结束时,栈应该是空的。
二、表达式合法性检查
【问题描述】 假设表达式中允许初显的运算符有+ 、-、*、 /、%共五种,不允许省略运算符, 且都是双目运算符,要求设计算法检查输入的表达式是否符合书写规范。
【基本要求】 如果通过合法检查,则进入下一个环节——求值; 如果不合法,则应像编译器一样,根据不同的错误种类给出相应的提示。
三、停车场管理
【问题描述】 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
【测试数据】 设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3, 20), (‘A’,4,25) ,(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0).每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去;‘E’表示输入结束。
【基本要求】 以栈模拟停车场,以队列模拟车场外的便道。按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应缴纳的费(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。
【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包括两个数据项:汽车的牌照号码和进入停车场的时刻。
四、实现一个简单的行编辑程序。
[问题描述] 文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作和统计字符个数、统计单词个数等静态操作。这些操作以行为单位进行的编辑程序称为行编辑程序。可以在全屏幕上进行这些操作的编辑程序叫做全屏幕编辑工具。 被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法既不经济,也不总能实现。一种解决方法是逐段地编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按照这种方法实现一个简单的行编辑程序。设文件每行不超过320个字符,很少超过80字符。
[基本要求]
方向一、以单文档界面为基础,设计实现一个全屏幕编辑程序(类似记事本,但和记事本功能有所不同),并在该程序中实现主要的文本编辑的基本命令,命令可以放在菜单项中。
方向二、以命令形式的界面为基础,设计实现一个行编辑工具,主要实现以下四条基本行编辑命令: (1) 行插入。格式:i<行号><回车><文本><回车> 将<文本>插入活区中第<行号>行之后
(2) 行删除。格式:d<行号>1[□<行号2>]<回车> 删除活区中第<行号1>行(到第<行号2>行)。两种格式的例子是:“d10↙”和“d10□14↙”
(3)活区切换。格式:n<回车> 将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。
(4)活区显示。格式:P<回车> 逐页的(每页20行)显示活区内容,没显示一页后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置以行号和一个空格符,行号固定占4位,增量为1. 各条命令中的行号均须在活区中各行行号范围之内,只有茶如命令的行号可以等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。
[测试数据] 由学生依据软件工程的测试技术自己确定。注意测试边界数据,如首行、尾行。 [实现提示]
(1) 设活区的大小用行数activemaxlen(可设为100)来描述。考虑到文本文件行长通常为正态分布,且峰值在60到70之间,用320*activemaxlen大小的字符数组实现存储将造成大量浪费。可以以标准行块为单位为各行分配存储,每个标准行块含81个字符。这些行块可以组成一个数组,也可以利用动态链表连接起来。一行文字可能占多个块。行尾可用一个特殊的ASCII字符标识。此外,还应该记住活区起始行号。行插入将引起随后各行行号的顺序下推。
(2) 初始化过程包括:请用户提供输入文件名(空格表示无文件输入)和输出文件名,两者不能相同。然后尽可能多的从输入文件中读入各行,但不超过activemaxlen-x。x 的值可用自定。
(3) 在执行插入命令的过程中,每接收到一行时倒要检查活区大大小是否已达activemaxlen。如果是,则为了在插入这一行之后仍保持活区大小不超过activemaxlen,应将插入点之前的活区部分中第一行输出到输出文件中,若插入点为第一行之前,则只得将新插入的这一行输出。
(4) 若输入文件尚未读完,活区切换命令可将原活区中最后几行留在活区顶部,以保持阅读连续性;否则,它意味着结束编辑或开始编辑另一个文件。
(5) 可令前三条命令执行后自动调用活区显示。
五、迷宫求解
【问题描述】可以输入一个人任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。
【基本要求】在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法或者递归和非递归的转换方法等。
六、八皇后问题【问题描述】八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8*8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出了92种结果。
【基本要求】对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、生动。要求编写程序试图求出八皇后的所有解(全部的92组解)。
七、哈希表设计
[问题描述] 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。
[基本要求] 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。
[测试数据] 取读者周围较熟悉的30个人名。
