数据结构与算法课程设计题目

2024-11-05

数据结构与算法课程设计题目(精选8篇)

数据结构与算法课程设计题目 篇1

数据结构与算法课程设计题目

1.成绩管理

问题描述:给出n个学生的考试成绩表,成绩表包括学生的学号、姓名、考试成绩(高等数

学、英语、物理),设计一个简单的成绩管理程序。

基本要求:

(1)建立成绩表,能够插入、删除、修改学生的成绩记录;(2)按任一单科成绩排序;(3)计算每名学生的平均成绩;

(4)统计任一单科成绩不及格的学生人数, 输出不及格人数及不及格的学生名单(5)根据平均成绩将成绩表按由高到低的次序排列,统计每名学生在考试中获得的名次,分数相同的为同一名次,按名次输出成绩表。

(6)成绩表保存在文件中, 可以从文件读取数据。

测试数据:学生可以根据自己班级的考试成绩单,任意截取一部分做为测试数据 2.一元多项式简单计算

问题描述:设计一个简单一元多项式计算器。基本要求:(1)输入并建立多项式;(2)输出多项式;

(3)两个多项式相加,输出结果多项式;(4)两个多项式相减,输出结果多项式。

提高要求:可以根据输入变量的值,计算出多项式的结果,且算法的效率高。测试数据:可任意选取两个一元多项式,可以是一般的多项式,也可以是稀疏多项式。3.舞伴问题

问题描述:一班有m个女生、n个男生(m不等于n), 举办一场舞会.男女生分别编号坐在舞池两边的椅子上,每曲开始时, 依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴,设计一个程序模拟舞伴配对过程。

基本要求:输入男、女学生的姓名、性别,由程序自动为男女生编号,可以顺序编号,也可以随机编号,输出每曲配对情况(包括男、女生的姓名、性别和编号)。原始数据和结果数据要保存到文件中。

测试数据:分别选择男生多于女生、女生多于男生、男女生相等的三组测试数据 提高要求:计算出任意一位男生(编号为X)和任意一位女生(编号为Y), 在第K曲配对跳舞的情况。

4.文学研究助手(*)

问题描述:文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为“文学研究助手”。基本要求:英文小说存于一个文本文件中,待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计, 结果保存到文件中。

提高要求:模式匹配选取KMP算法

测试数据:以你的C/C++/JAVA源程序模拟英文小说,相应语言的保留字集作为待统计的词汇集。

5.哈希表的设计与实现(*)

问题描述:针对某个单位电话号码簿,设计一个哈希表,并完成相应的建表和查表程序。基本要求:设每个记录有下列数据项:电话号码、用户名、住址。从键盘输入各记录,以用户名为关键字建立哈希表,哈希函数用除留取余数法构造,采用线性探测法解决冲突。可以插入、查找、删除并显示给定用户名的记录,并计算查找长度, 哈希表保存到文件中。

测试数据:取某个单位电话号码簿中的30个记录。

提高要求:将电话号码薄以文件形式保存到盘上,能够按用户名和电话号码两种形式建立哈希表并实现插入、查找、删除表中元素的功能。

6.管道铺设施工的最佳方案(*)

问题描述:需要在某个城市的n个小区铺设管道,则在这n个小区之间铺设n-1条管道即可,假设任意两个居民区之间都可以架设管道,但由于地理环境的不同,所需经费不同,选择最优的施工方案使总投资尽可能的少。

基本要求:输入表示小区间关系的图及每条管道的权值,选择出n-1条管道, 使总投资最小。图的信息输入一次后, 保存到文件中, 选择的n-1条管道输出到显示器的同时, 也保存于文件中。

测试用例:任意选择一个图,模拟小区间可能铺设的管道及费用。提高要求:显示原始图及选择n-1条管道后的图。

7.安排教学计划(**)

问题描述:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两个学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排上必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课程恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。

基本要求:输入参数包括学期总数,一学期的学分上限,每门课程的课程号、学分和直接先修课的课程号;允许两种策略,一是使学生在各学期的学习负担尽量均匀,二是使课程尽量集中在前几个学期;若根据给定的条件问题无解,则报告适当的信息,否则将教学计划输出到用户指定的文件中。教学计划的表格格式自行设定, 可以从键盘读取数据也可以从文件读取数据, 结果保存到文件中。

测试数据:学期总数为6,学分上限为10,该专业共开设12门。以08级某专业必修课与选修课为例,选择12门课程及相应学分,制定一个表明各门课程先后约束关系的有向图。

提高要求:产生多种不同的方案,并使方案之间的差异尽可能地大。8.停车场管理程序(**)问题描述:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

基本要求:每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,单位时间的停车费用由用户从键盘输入)。

测试数据:设输入数据为:(‘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’表示输入结束。

提高要求:设停车场有南、北两个门,每个门都可以进、出车辆。9.计算表达式的值(**)问题描述:对于给定的一个表达式,表达式中可以包括常数、算术运行符(“+”、“-”、“*”、“/”)和括号,编写程序计算表达式的值。

基本要求:从键盘输入一个正确的中缀表达式,将中缀表达式转换为对应的后缀表达式,计算后缀表达式的值。

测试数据:任意选取一个符合题目要求的表达式。提高要求:(1)对于表达式中的简单错误,能够给出提示;

(2)表达式中可以包括单个字母表示的变量。

10.设计Huffman 编码器与解码器(***)

问题描述:利用哈夫曼编码进行信息通讯可以大大提高信道的利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据预先编码;在接受端将传来的数据进行译码。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个哈夫曼码的编/译码系统。

基本要求:根据某字符文件统计字符出现频度,构造Huffman 树,编制Huffman编码,并将给定字符文件编码,生成编码文件;再将给定编码文件解码,生成字符文件。(要求按二进制位表示编码)测试数据:英文文件。

提高要求:用二进制表示编码,生成二进制的编码文件。11.银行业务模拟(***)

问题描述:设银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候, 当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。

基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。

测试数据:营业时间为8小时,其他模拟量自行设定。12.程序源代码的相似性(***)

问题描述:对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。

基本要求:建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。

例如: 关键字 Void Int For Char if else while do break class 程序1关键字频度 4 3 0 4 3 0 7 0 0 2 程序2关键字频度 4 2 0 5 4 0 5 2 0 1 X1=[4,3,0,4,3,0,7,0,0,2] X2=[4,2,0,5,4,0,5,2,0,1] 设s是向量X1和X2的相对距离,s=sqrt(∑(xi1-xi2)2),当X1=X2时,s=0, 反映出可能是同一个程序;s值越大,则两个程序的差别可能也越大。

测试数据: 选择若干组编译和运行都无误的C++程序,程序之间有相近的和差别大的,用上述方法求s, 对比两个程序的相似性。

提高要求:建立源代码用户标识符表,比较两个源代码用户标识符出现的频度,综合关键字频度和用户标识符频度判断两个程序的相似性。

13.小型文本编辑器

问题描述:设计一个行编辑程序,使其具有通常行编辑器(如Vi、Edlin)应具备的基本功能。

基本要求:编辑器应具备对文本文件的查找、插人、删除、修改、字符串替换、统计字数,统计行数等功能,对于超过一屏的长文件,应能够分页显示,查找功能用字符串匹配算法实现。设计用户接口命令,实现对文本的编辑。具体的编辑命令,可参考数据结构算法网络教学平台上提供的edlin、Vi的命令集。

测试数据:任一文本文件。

提高要求:1.可以支持“* ”、“? ”等通配符;

2.支持复制、粘贴等功能

3.支持多文档同时编辑;

提示:可以考虑用双向链表实现,每一结点表示一行字符,注意每行字符不能超过255。14.小型英汉词典

问题描述:设计一个英汉词典,支持Member(查找)、Insert(插入)、Delete(删除)操作。

基本要求:实现字典的常用方法有:有序线性表(Memeber用二分检索实现)、AVL树(二叉搜索树)、Patricia Trie、散列表等,任选一种方法实现字典的操作,查找单词、插入单词(插入时,先查找,找不到插入,找到提示用户)、删除单词(删除时,先查找,找到删除,找不到提示用户)。

测试数据:任一英文单词。提高要求:选用两种以上的方法实现字典的操作,并比较不同实现算法的时间复杂度和空间复杂度。

提示:字典可以自己建立,但必须按字母a~z建立26个文件,建议从网上下载,文件类型为txt。

备注:

1.每道题目后面的*号,表示题目的难度系数;对应的评定成绩等级为及格(无*号)、中等(*号)、良好(**号)、优秀(***号),学生完成题目的基本要求,即可得到程序设计部分的相应等级成绩,完成题目提高要求,成绩可以向上浮动,如果没有完成基本要求,成绩向下浮动,直至不及格。

2.所有题目均需用C++完成,不能用C或MFC。3.实验班的学生原则上应选择“*”号多的题目。4.每道题的选题人数不能超过3人

数据结构与算法课程设计题目 篇2

关键词:算法与数据结构,教学研究,教学改革

近年来, 信息技术已经改变人类社会生活的模式, 计算机技术的教育与应用得到了极大发展。数据结构作为计算机专业的七大核心课程之一, 被列为计算机科学与技术、软件工程、网络工程等信息类专业的全国统考研究生考试课程之一, 也是编译原理、操作系统、数据库原理、计算机网络等专业课程的先导课程, 在计算机专业课程体系中发挥着承上启下的核心作用。

一、数据结构与算法教学现状的分析

(一) 学生的课程学习现状

在传授学生学习算法和数据结构时, 学生的计算机编程的理论基础和应用经验往往是不同的, 因此很容易引起学生理解和掌握能力的偏差。

在实际授课中, 教学时间是有限的, 而且有的学生经常在听课的过程中聊天或玩游戏, 不按照训练复习。还有一些学生是为了应付期末考试和学习, 学习的方法和策略都没有用, 而且很难获得对知识的全面理解, 学习质量不高。

(二) 教学环节缺乏创新

以往的教学模式单一, 都是以教师为中心进行教学, 注重教学过程, 忽视学生的学习过程。学生只是被动接受学习, 根本无法提高学生的学习兴趣。

教师对计算机知识型内容的教学方法是比较熟悉的, 能够强调重点知识、讲解难点知识, 使学生能够有重点、有目标地进行学习, 但针对操作型内容教学则显得经验不足, 教学方法不当。

(三) 考核环节的缺陷

传统的考核模式是“以教师评价为主”, 强调最终评价结果, 当面临应用性评测时, 则暴露了它的缺点。学生本来就很难对一些知识进行运用, 而为了通过测试, 就抄袭、拷贝其他同学的程序, 所以经常出现全班的程序都是一个模版的情况。这样的考试不能考核出学生的真实水平。

二、教学研究中需要探索的内容

(一) 教学大纲的更新

教学大纲在教学中起着指导性的作用, 因此教学研究中务必跟踪新技术发展与数据结构的新算法, 不断更新教学内容, 完善教学大纲的编制。以算法与程序设计能力培养为主线, 提升学生应用基本结构分析问题、算法设计与编程的能力。结合《数据结构课程设计》等实践环节, 夯实学生的应用技能。

在教材方面, 可以选用张乃孝等人编著的高等教育出版社出版的最新版《算法与数据结构———C语言描述》作为主教材, 同时选用唐策善等人编著的高等教育出版社出版的《数据结构———用C语言描述》作为参考教材, 实现教材内容的高低配合, 理论算法与算法的相互补充。

(二) 教学模式的变革

在数据结构的教学改革中, 应摒弃传统的陈旧的教学模式。由浅入深、由线性到非线性、横向与纵向比对教学模式, 找出每种数据结构教学的优缺点。

(三) 强化实验和考核

数据结构实践教学要突出“理论与实践”的原则, 通过对问题的抽象, 选择合适的数据结构来解决实际问题, 提高应用能力。

考核评价设计紧密结合数据结构与算法课程, 注重过程考核、算法设计评价考核、实际解决问题能力的考核。加大实践环节考核的比例, 以阶段性课外作业的形式加强阶段性考核, 体现考核形式的多样化、考核标准的合理化以及考核的不间断性。

三、基于CDIO的多元教育模式教学改革

通过对当前数据结构教学的研究和分析, 笔者尝试将一种全能的工程理念———CDIO工程教育模式应用在指导数据结构教学的过程中。CDIO, 即构思 (conceive) 、设计 (design) 、实现 (implement) 和运作 (operate) , 它以产品研发到产品运行的生命周期为载体, 让学生以主动、实践、课程之间有机联系的方式学习工程。CDIO模式作为先进的多元教育模式可以很好地培养新型的优秀的工程人才。

(一) 教学指导思想的定位

CDIO模式突出了工程基础知识、个人能力、人际团队协调能力和工程系统能力。在完善数据结构课程教学指导思想时应当充分考虑以下几个方面。

1. 制定一体化教学计划。

新计划要大幅减少基础理论的权重, 可将涉及工程的一系列课程进行整合, 增加知识的综合运用能力。比如, 数据结构课程可以和C语言进行整合安排。

2. 以CDIO模式为基本环境。

应当以“基于项目的教育学习”为宗旨, 着力培养四种能力, 并围绕上述目标进行详细规划, 制定目标和标准。

3. 职业训练计划。

纳入CDIO模式后, 必须将学科学习与职业训练相结合, 要在大学期间融入优秀工程师的职业训练, 实际上也是四种能力培养的又一次强化。

(二) 精选实际问题用于设计性实验, 提高学生实际算法设计能力

由于数据结构课程与实际工程问题的融合, 在设计实验时, 要摒弃传统验证性的实验, 通过设计性实验来引导学生运用数据结构基础知识, 指导学生如何分析选择合适的数据结构, 传授正确的算法设计理念。通过设计一些实际的小型应用课题, 让学生自主探索实际运用算法的能力, 使学生有更多的创造空间。

(三) 以工程任务为牵引, 提高学生的算法设计创新能力

探索以实际的工程任务为牵引, 引导学生主动学习的新教学模式。改变传统教学中的先给学生布置作业, 然后再进行课堂教学的缺乏主动创新动力的模式。选取的工程任务力求既结合实际, 又能涵盖课程教学的要求。教师重点关注学生自学、开发和研究的进度。以工程任务为牵引的教学模式, 打破了算法设计类课程一贯采用的“填鸭式”教学模式, 变“要我学”为“我要学”。以任务为主线展开, 重在分析实际任务所涉及的数据结构、算法思路, 培养学生算法设计的创新能力。

(四) 考核评定的新标准

制定考核评定的标准应基于两个方面的考虑:一方面, 通过考核使教师和学生自觉以CDIO模式为前提开展数据结构课程的教与学, 避免推行CDIO模式流于形式化。另一方面, 考核标准要纳入CDIO模式原则和相关标准, 要实现从基础理论考核为主转变为“实践中学习”, 自主学习的实际动手能力考核。新标准要确立两个主体、三个客体:两个主体就是学生和教师。不仅考核学生的基础知识、自主学习能力、团队合作能力和工程软件项目能力, 而且要考核教师的CDIO模式运用能力、教师专业素质能力和调动学生兴趣的能力。三个客体是指考核的测评方:一是学校教学部门。主要考核教师的CDIO教学能力和学生最终的学习实践能力, 通过考核促进CDIO模式的推广和学生全方位适应用人单位的要求。二是合作项目单位。合作项目单位通过项目完成情况, 对学校、教师、学生的实际能力给予评价。三是授课教师。授课教师通过全过程的授课情况、学生完成项目情况、在项目合作中的表现和全课程中的自我学习情况, 结合基础知识考核给出学生综合分。

四、结语

CDIO模式是解决当前软件人才培养中学用脱节、不适应职业特征要素的有效举措。本文结合数据结构课程的教学改革与实践经验, 重点培养学生对基本数据结构的理解能力和应用能力, 提高算法设计和解决实际问题的综合能力, 为后续课程的学习与学生综合素质的提高打下坚实基础。

参考文献

[1]胡文龙.基于CDIO的工科探究式教学改革研究[J].高等工程教育研究, 2014 (1) .

[2]张伟, 王丽云.CDIO教学改革中的教学质量评估系统[J].辽宁大学学报, 2013 (3) .

[3]张国斌, 张树军, 刘春城, 等.基于CDIO模式的学生实践能力的培养[J].实验室科学, 2014 (1) .

[4]范会联, 仲元昌.基于CDIO理念的软件人才培养模式探索[J].实验室研究与探索, 2012 (1) .

[5]张婧, 韩雁, 梁志星.基于CDIO项目式教学的教师能力培养[J].重庆理工大学学报, 2013 (11) .

数据结构与算法课程设计题目 篇3

关键词:数据结构与算法;综合性实验;设计性实验

一、引言

在计算机科学与技术、软件工程等专业中,《数据结构与算法》课程具有较强的实践性,因此实验教学是该课程教学过程中的一个非常重要的环节。在以往的实验教学中,学生都是按照已经设计好的实验要求和步骤进行着验证性的实验,学生一般是被动地接受或机械式地编程,以完成实验讲义中的验证或孤立的单元实验。这种实验教学模式使得学生缺乏主动性和独立思考问题的能力,不利于他们综合素质的提高和自主创新能力的培养。为了克服这些不足,使学生真正能把理论知识灵活运用到实践当中,我们开设了《数据结构与算法》课程综合性、设计性实验项目并立项进行实践研究,通过两三年的实践,取得了一些经验和成果,学生的实践能力也有了较大提高。

二、综合性、设计性实验项目的实践环节

1.实验项目的选择。

通过《数据结构与算法》课程的学习和前期验证性实践环节,学生已初步具备了进行综合性、设计性实验的能力。为进一步提高学生的设计能力和编程能力,我们设计了4个综合性、设计性实验项目供学生选择:

①校园导游系统的设计(设计性);

②书管理系统的设计(综合性);

③哈夫曼编码/译码器(综合性);

④散列表的设计与实现(设计性)。

2.实验项目的内容。

校园导游系统的设计

问题描述:

设计一个校园导游程序,为来访的客人提供信息查询服务。

基本要求:

①设计你所在的学校的校园平面图,所含景点不少于15个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息;

②为来访客人提供图中任意景点相关信息查询;

③为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短路径(静态或动态表示出来)。

图书管理系统的设计

问题描述:

设计一个图书管理系统完成图书管理基本业务。

基本要求:

①每种书的登记内容包括书号、书名、著作者和库存量;

②对书号建立索引表(线性表或树表)以提高查找效率;

③系统主要功能如下:

采编入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;

借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;

归还:注销对借阅者的登记,改变该书的现存量。

用户管理。

数据存储(要求用文件实现数据存储)。

哈夫曼编码/译码器

问题描述:

设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(压缩文件,后缀名.cod);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。

基本要求:

①随机抽取20个文本文件作为统计样本,统计这些文本文件中各字符的平均出现次数,作为权值,建立哈夫曼树及各个字符的哈夫曼编码;

②将用户输入或选择的待压缩文本文件利用①建立的编码表进行编码,生成压缩文件(后缀名.cod);

③输入一个待解压的压缩文件名称,并利用相应的编码表进行译码;

④显示指定的压缩文件和文本文件;

⑤(选作) 把哈夫曼编码用二进制位紧缩到一个变量中,利用位运算实现真正的数据压缩,并求压缩比。

散列表的设计与实现

问题描述:

设计散列表实现电话号码查找系统。

基本要求:

①随机生成1万个记录,每个记录有下列数据项:电话号码、用户名、地址,每个数据项的内容都是随机生成的;

②分别以电话号码和用户名为关键字建立散列表(自行选择或构造合适的散列函数);

③采用双散列法解决冲突;

④查找并显示给定电话号码的记录;

⑤查找并显示给定用户名的记录。

3.预期目标。

进一步巩固和加深对《数据结构与算法》课程中基本知识的理解,熟悉各种逻辑结构及存储结构;

了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

培养学生从事软件开发的编程及创新能力;

提高学生综合运用所学的理论知识解决问题的能力;

训练用系统的观点和软件进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

4.实验项目的组织与实施。

针对综合性设计性实验项目,安排学生自选项目并进行项目设计和开发,每个项目20学时,按照下面的项目开发设计步骤,最后完成课题的总体设计与实现。

项目分析

根据实验项目内容的要求,充分地分析和理解问题,明确问题要求做什么、解决什么问题、实现什么功能。

概要设计

对项目内容描述中涉及的操作对象,设计相应的数据结构,并按照以数据结构为中心的原则对模块进行划分,定义主程序模块和逻辑结构。逻辑设计的结果是每种数据结构的定义(包括数据结构的描述和每个基本操作的功能说明)。

详细设计

为各个数据结构设计相应的存储结构并写出各模块的算法。设计是编程中重要的一环,在“详细设计”过程中,引导学生结合总体设计制订合理的程序结构和算法,理顺各个模块之间的相互关系,将详细设计的结果用结构图及流程图清晰地描述出来,在本过程中,教师要尽可能帮助学生养成自己解决问题的习惯。

编程

将详细设计的结果进一步求精为程序设计语言程序。在该环节中,教师应指导学生按照规范的程序编写方法去编程,并指导学生按照大型软件中常用的调试方法对程序进行跟踪及改进。

结果分析

在编程过程中及结束后,形成学生、课题小组组长、指导教师三位一体的项目质量监控体系,做到对各个阶段的结果都能进行实时的检测,如有不足之处,小组内成员和学生自行研讨出合理的整改方案并对课题实施进行改进,直至达到功能要求。

5.项目总结。

主要包括学生实验项目总结心得、实验报告撰写,学生成绩的评定。

实验项目总结心得

在实验临将近结束时让学生共同讨论实验结果的正确性,讨论实验设计步骤的合理性,总结经验,进一步改善项目实施的方案及步骤。笔者认为,实验后的总结非常重要,是从理论到实践,再由实践到理论认识的进一步升华,也是使学生提高实验兴趣、锻炼并增解决实际问题的重要过程和手段。

实验报告撰写

学生实验报告一般应包含的内容是:实验题目、实验环境、实验目的、实验任务、数据结构描述、算法流程图表示、实验总结。

学生成绩的评定

教师根据学生的实验设计报告、学生的实际操作能力(程序检查)及学生的创新能力等几个方面综合评定,给出综合成绩。

三、实践的成果

1.对学生的影响。

经过近两年的实验教学实践,有超过70%的学生认为此次实验收获很大,大约80%的学生对这类实验取得的成果表示满意。从总体效果来看,学生通过综合性、设计性实验,提高了设计及编程能力。大部分学生认为《数据结构与算法》综合性、设计性实验项目的开展改变了以往传统的实践教学模式,内容新颖,提高了他们的编程兴趣和热情,对他们帮助很大。

2.对教师的促进。

《数据结构与算法》综合性、设计性实验的指导教师由计算机科学技术学院《数据结构与算法》课程的主讲教师和专业实验室的教师共同承担,我们认为,开展综合性设计性实验项目整合了多个知识环节,既能够帮助学生掌握知识的系统性和衔接性,理清程序设计的思路,促进知识的融会贯通;同时也给主讲教师带来新的挑战,能使教师总结在理论教学中的不足,进一步加强教学方法和内容的改革。

参考文献:

[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2006.

[2]唐册善.数据结构—C语言描述[M].北京:高等教育出版社,2003.

数据结构课程设计题目 篇4

一、教学目的和要求

课程设计是加强学生实践能力的一个强有力手段。综合课设1主要针对数据结构和c/c++语言开展的实践性课程。要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法。课程设计要求学生在完成程序设计的同时能够写出比较规范的课程设计报告。培养学生综合运用所学理论知识解决复杂实际问题的实践能力、研究性学习能力和团队合作能力。

二、课程设计要求

1、选好题目:每题一人,每班每个题目只允许一人选做,学习委员将选题情况在课设第一天统计上交。

2、课设报告独立思考,独立完成:课设报告出现雷同超过60%,不论什么原因,一律不及格。班和班之间,相同题目的同学,可以组成小组,相互讨论,共同完成课程设计中各任务的设计和调试要求。小组成员间,算法思路可以相同,程序可以类似,但不能完全一样。课设报告不能雷同超过60%。

3、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。

4、设计要点:

⑴需求分析:

在该部分中叙述总共几个模块,每个模块的功能要求。

⑵系统设计

总体设计:定义某个数据结构的抽象数据类型及其他算法的功能说明。

详细设计:在此定义存储结构,每个部分的算法设计说明(建议描述算法采用流程图)。⑶编码实现

各个算法实现的源程序,对每个题目要有相应的源程序(每个功能模块采用不同的函数实现)。源程序要按照程序的规则来编写,要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能,尽量避免出现操作失误时出现死循环。⑷调试分析

给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。时间复杂度分析,每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。

⑸课设总结:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》课程的认识等内容。

5、实现的结果必须进行检查和演示;程序源代码和程序的说明文件必须上交,作为考核内容的一部分;(上交时文件夹的取名规则为:“课设题目(***设计完成)”,如“资源管理系统的设计与实现(张三设计完成)”。该文件夹下包括三个目录:“源代码”、“可执行文件”、“张三_课程设计报告”。由学习委员按规定时间统一上交)。

6、报告提交

形式: 纸介质(要求B5纸张打印,加封皮)和电子文档。

三、考核方法和内容

根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。

评分标准:

优秀:答辩所有问题都能答出+报告良好

良好:答辩所有问题都能答出+报告一般

中等:答辩大部分问题能答出+报告良好 及格:答辩大部分问题能答出+报告一般

不及格:答辩几乎答不出问题

或者

报告几乎都是代码

或者

雷同部分达到60%

课设报告的装订顺序如下:

任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----

1、设计任务(题目要求)-----

2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----

3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----

4、编码实现(重要函数的实现代码)-----

5、调试分析(选择多组测试数据、运行截图、结果分析)-----

6、课设总结(心得体会)-----

7、谢辞-----

8、参考文献;

课设报告打印要求:

B5纸张打印,报告总页数控制在10—15页内,报告中不能全是代码,报告中代码总量控制在150行内。版式:无页眉,有页码,页码居中

字号:小四,单倍行距

字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图”

四、课程设计的题目

1、运动会分数统计

2、集合的并、交和差运算的程序

3、长整数的加法运算

4、一元多项式计算器

5、车厢调度问题

6、文章编辑

7、识别广义表的头或尾的演示

8、哈夫曼树及其编码

9、校园导游咨询

10、地图着色问题

11、内部排序算法比较

12、哈希表的设计与实现——线性探测再散列

13、哈希表的设计与实现——二次探测再散列

14、哈希表的设计与实现——链地址法

15、火车售票系统

16、图书管理系统

17、客户消费积分管理系统

18、产品进销存管理系统

19、学生成绩管理系统的设计与实现

20、通讯录管理系统的设计与实现——线性表

21、通讯录管理系统的设计与实现——哈希表

22、简单目录管理系统的设计与实现

23、最短旅程的求解

24、迷宫求解

25、家谱管理系统的设计与实现

26、宿舍管理查询软件

27、语言中平衡符号的问题

28、算术表达式求解

29、表达式求值,可供小学生作业,并能给出分数 30、数制转换问题

31、病人就医管理

32、九宫格问题

33、银行业务模拟

34、停车场管理

35、关键路径问题

36、地铁站建设问题

37、服装销售系统

38、歌星大奖赛

39、机房机位预约模拟系统 40、歌曲信息管理系统

41、简单的试题库管理系统

42、学生点名系统

43、猜数游戏

五、数据结构课程设计的具体内容

要求:全部采用数据结构课程中的内容实现,采用C或C++实现,逻辑结构只能选线性结构、树型结构、图型结构、集合结构中的一种,不能用数据库。

1、运动会分数统计 问题描述:

参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为11,7,4,2,1;还有些项目只取前三名,得分顺序为5,3,2。哪些项目取前五名或前三名由学生自己设定。写一个统计程序产生各种成绩单和得分报表。基本要求:

(1)各项目结束时,输入前三名或前五名的项目编号、运动员姓名、校名和名次(成绩);(2)产生各学校的成绩单,内容包括每个学校所取得的每项成绩的项目号、名次(成绩)、姓名和得分,并统计各学校总分;

(3)可以按学校编号、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;(5)可以按项目编号查询取得前三或前五名的学校;(6)演示程序以用户和计算机的对话方式执行。

2、集合的并、交和差运算的程序 问题描述:

编制一个能演示执行集合的并、交和差运算的程序。基本要求:

⑴集合的元素限定为大小写字母符[′a′….′z ′′A′….′Z ′],集合的大小n<53。

⑵集合输入的形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去。

⑶输出的运算结果字符串中将不含重复字符或非法字符。⑷演示程序以用户和计算机的对话方式执行。

3、长整数的加法运算

问题描述:

设计一个实现任意长的整数进行加法、减法运算的演示程序。

基本要求:

⑴利用链表实现长整数的存储,每个结点含一个整型变量。提醒:任何整型变量int的范围是-(2^15-1)~(2^15-1)。

⑵输入和输出形式按照中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。如:-2345,6789,3211;

⑶演示程序以用户和计算机的对话方式执行。

4、一元多项式计算器 问题描述:

设有一元多项式Am(x)和Bn(x).Am(x)= A0+A1x1+A2x2+A3x3+… +Amxm

Bn(x)= B0+B1x1+B2x2+B3x3+… +Bnxn

试求M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和M(x)= Am(x)×Bn(x)。基本要求:

⑴首先判定多项式是否稀疏; ⑵分别采用顺序和链式结构实现;

⑶结果M(x)中无重复阶项和无零系数项; ⑷要求输出结果的升幂和降幂两种排列情况。⑸演示程序以用户和计算机的对话方式执行。

5、车厢调度问题 问题描述:

假设停在铁路调度站(如教科书中图3.1(b)所示)入口处的车厢系列的编号依次为1,2,3,…n。设计一个程序,求出所有可能由此输出的长度为n 的车厢系列。基本要求:

⑴设计一个程序,求出由一个编号依次为1,2,、、、,n的车厢序列可能产生的所有出栈系列。⑵利用双向栈存储结构实现调度站和输出序列这两个栈的空间共享。

⑶对于每个输出序列演示出所有操作序列的变化过程。

6、文章编辑 问题描述:

输入一页文字,可以统计出文字、数字、空格的个数。基本要求:

⑴静态存储一页文章,每行最多不超过80个字符,共N行。⑵分别统计出其中英文字母和空格数及整篇文章总字数。⑶统计某一字符串在文章中出现的次数,并输出该次数。

⑶删除某一子串,并将后面的字符前移。

⑷存储结构使用线性表,分别用几个子函数实现相应的功能。

7、广义表的应用

要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度等。

本设计用一个主控菜单程序控制,共分为6个子系统。(1)建立广义表(2)输出广义表(3)结点的查找(4)求广义表表头(5)求广义表表尾(6)求广义表的深度 演示程序以用户和计算机的对话方式执行。

8、哈夫曼树及其编码 问题描述:

设计一个利用哈夫曼算法的编码系统,重复地显示并处理以下项目,直到选择退出为止。基本要求:

⑴初始化:键盘输入或文件输入字符集大小n、n个字符和n个权值,建立哈夫曼树; ⑵编码:利用建好的哈夫曼树生成哈夫曼编码; ⑶输出树形的哈夫曼树及哈夫曼编码; ⑷设字符集及频度如下表:

字符

空格 A B C D E

F G H I J K L M 频度

197 64 13 22 32 103 21 15 47 57 5 1 20 32 字符

N O P Q R S T U V W X Y Z 频度

1 15 48 16 80 23 8 18 1 51 1

9、校园导游咨询 问题描述:

设计一个校园导游程序,为来访的客人提供各种信息查询服务。基本要求:

⑴设计华东交通大学南区的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。⑵为来访客人提供图中任意景点相关信息的查询。

⑶为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

10、地图着色问题 问题描述:

设计地图着色软件,对江西地图中11个地级市进行着色,要求相邻地级市所使用的颜色不同,并保证使用的颜色最少。基本要求:

⑴地图采用图型数据结构,每个地级市为一个节点,边表示对应的两个地级市相邻。⑵设计着色算法,保证邻接点不是同一种颜色。⑶演示程序以用户和计算机的对话方式进行。

11、内部排序算法比较 问题描述:

试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。基本要求:

⑴至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。

⑵待排序表的表长不小于100,其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。⑶最后对结果作出简单分析,包括对各组数据得出结果波动大小的解释。

12、哈希表的设计与实现——线性探测再散列 问题描述:

设计哈希表实现电话号码查找系统。基本要求:

⑵ 设每个记录有下列数据项:电话号码、用户名、地址;

⑶ 从键盘输入各记录,分别以电话号码和用户名为关键字建立不同的哈希表; ⑷ 采用线性探测再散列的方法解决冲突; ⑸ 查找并显示给定电话号码的记录; ⑹ 查找并显示给定用户名的记录。

13、哈希表的设计与实现——二次探测再散列 问题描述:

设计哈希表实现电话号码查找系统。基本要求:

(1)设每个记录有下列数据项:电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立不同的哈希表;(3)采用二次探测再散列的方法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户名的记录。

14、哈希表的设计与实现——链地址法 问题描述:

设计哈希表实现电话号码查找系统。基本要求:

(1)设每个记录有下列数据项:电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立不同的哈希表;(3)采用链地址法解决冲突;

(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户名的记录。

15、火车售票系统 问题描述:

通过此系统可以实现售票、退票、车票剩余情况查询等功能。每张车票包含车次、车厢、座位信息。基本要求:

⑴在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、车厢、座位情况。⑵为简单起见,在此假设所有出售的车票均为同一车次的车票。⑶购票时,可以显示余票信息,并可以选择买哪张票。

⑷退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票,而且退票可以再次销售。⑸演示程序以用户和计算机的对话方式进行。

16、图书管理系统 问题描述:

设计一个计算机管理系统完成图书管理基本业务。基本要求:

⑴每种书的登记内容包括书号、书名、著作者、现存量、库存量和借阅信息; ⑵对书号建立索引顺序表以提高查找效率; ⑶系统主要功能如下:

①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; ②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; ③归还:注销对借阅者的登记,改变该书的现存量。⑷演示程序以用户和计算机的对话方式进行。

17、客户消费积分管理系统 问题描述:

针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。基本要求:

⑴采用一定的存储结构进行客户信息的存储; ⑵对客户的信息可以进行修改、删除、添加; ⑶能够根据消费情况进行客户积分的累加; ⑷根据积分情况,对客户实行不同程度的打折优惠; ⑸演示程序以用户和计算机的对话方式进行。

18、产品进销存管理系统 问题描述:

针对某一种行业的库房的产品进销存情况进行管理。基本要求:

⑴采用一定的存储结构对库房的货品及其数量进行分类管理;

⑵可以实现进库房时,产品类的添加、产品的添加、产品数量的添加; ⑶能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; ⑷可以实现产品出库房时,产品数量修改以及达到临界值提醒的功能; ⑸演示程序以用户和计算机的对话方式进行。

19、学生成绩管理系统的设计与实现 问题描述:

能够实现对学生成绩的常用管理功能。基本要求:

⑴采用一定的存储结构对学生成绩进行管理;

⑵可以进行成绩的录入、查询、修改、删除等操作;

⑶可以查询某门课程的平均分,学生的排名,不同分数段的学生人数及学生信息等; ⑷可以查询某学生的各课程分数,总分及学生的班级排名等; ⑸可以按学号排序输出全部学生的成绩信息、总分及班级排名等。⑹演示程序以用户和计算机的对话方式进行。20、通讯录管理系统的设计与实现——线性表 任务:利用线性表完成通讯录的一般性管理工作:(1)添加信息;

(2)显示信息:可以按照手机或联系人的姓名拼音排序显示;(3)查找:用名字和手机号分别作为查找的依据,进行查找;(4)编辑信息;(5)删除信息;(6)保存到文件; 要求:

(1)每条记录至少包括姓名、手机、QQ、电子邮箱、城市、邮编等信息。(2)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

21、通讯录管理系统的设计与实现——哈希表 任务:利用哈希表完成通讯录的一般性管理工作:(1)添加信息;

(2)显示信息:可以按照手机或联系人的姓名拼音排序显示;(3)查找:用名字和手机号分别作为查找的依据,进行查找;(4)编辑信息;(5)删除信息;(6)保存到文件; 要求:

(1)每条记录至少包括姓名、手机、QQ、电子邮箱、城市、邮编等信息。(2)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

22、简单目录管理系统的设计与实现

任务:利用树型结构设计并实现一个简单的目录管理系统,该系统可以对所有目录进行管理,如目录的新建、删除、查询、目录名称修改、按某种顺序输出所有目录(树的遍历操作)、以树型结构输出所有目录等功能。

23、最短旅程的求解

任务:有n个城市(编号从1到n),它们之间通过双向的道路相连。那里只有n-1条道路,但是,它们的连接方式使得从任意城市都可以走到其他的任何城市。一天,某个游客到了编号为k的城市。他计划从城市k开始,游遍所有的城市m1,m2,m3……,mi,…(不一定要按这个顺序旅游)。每个城市mi都是不同的,并且,也与k不同。他想要以最短的路程旅行完所有的城市(从城市k开始)。请你帮助计算一下,旅游完上述的城市最短需要多少路程。

24、迷宫求解

任务:以一个m*n的长方阵表示迷宫,设置两个门,一个入口,另一个是出口。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

要求:

⑴首先实现一个栈类型,然后编写一个求解迷宫的非递归程序。

⑵求得的通路以三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。

⑶输出迷宫图,以#号表示障碍物,„ ‟空格表示非障碍物,*表示通路。

25、家谱管理系统的设计与实现

任务:设计并实现一个简单的家谱管理系统。基本要求:

(1)建立家族关系并能存储到文件中。(2)实现家族成员的添加、删除功能。

(3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。(4)按某种顺序输出家谱信息(树的遍历操作)、以树型结构输出家谱资料等功能。(5)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

26、宿舍管理查询软件

任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式;

(2)可以增加、删除、修改信息;

(3)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序;(4)查询: a.按姓名查询 ;b.按学号查询 ;c按房号查询(5)输出任一查询结果(可以连续操作)。

27、语言中平衡符号的问题

要求:设C语言程序代码中包含如下符号/* */,(),[],{},编写程序检测一段C代码中上述符号是否正确。

28、算术表达式求解

问题描述:给定一个算术表达式,通过程序求出最后的结果。基本要求:

(1)从键盘输入要求解的算术表达式;

(2)采用栈结构进行算术表达式的求解过程;(3)能够判断算术表达式正确与否;(4)对于错误表达式给出提示;

(5)对于正确的表达式给出最后的结果,并可以显示运算的整个过程。(6)演示程序以用户和计算机的对话方式进行。

29、表达式求值,并能给出分数,可供小学生作业练习的小程序 要求:

⑴建立试题库文件,从文件中,随机抽取n个题目; ⑵题目涉及加减乘除,带括号的混合运算; ⑶随时可以退出程序;

⑷保留历史分数,能回顾历史,给出与历史分数比较后的评价;

⑸界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

30、数制转换问题

任意给定一个M进制的数x,实现如下要求:(1)求出此数x的10进制值;

(2)实现对X向任意的一个非M进制的数的转换;

(3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决);(4)提供交互界面,以便人机交互。

31、病人就医管理

编写一个程序实现就医管理。在病人就医过程中,主要发生三件事:

⑴预检,分科室,挂号。不同科室都是从1号开始挂号。如,内科1号,外科1号,五官科1号等; ⑵病人到达诊室,将病历本交给护士,排到等待队列中候诊。⑶护士从等待队列中取出一位病人的病历,该病人进入诊室就诊。要求程序采用菜单方式,其选项及功能说明如下: ⑴挂号------预检,分科室,生成就诊号。

⑵排队------输入病人的就诊号,加入到病人排队队列中。

⑶就诊-------病人排队队列中最前面的病人就诊,并将其从队列中删除。⑷查看排队------从队首到队尾列出所有的排队病人的病历号。⑸下班---------退出运行。

32、九宫格问题 在一个3×3的九宫格中有1—8这8个数字,混乱排序,一个空格随机地摆放在一个格子里。现要求将该九宫格调整为正常按逆序的格式。调整的规则是:每次只能将与空格(上、下或左、右)相邻的一个数字平移到空格中。编程实现这一问题的求解,并输出求解过程。

33、银行业务模拟

问题描述:设银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,优先级不同。客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候。当任一服务窗口空闲时,处理等候客户中优先级最高,排在最前面的客户的业务。写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。

34、停车场管理

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端);若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上依次等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

35、关键路径问题 问题描述:

设计一个程序,求出完成整项工程至少需要多少时间,以及整项工程中的关键活动。基本要求:

⑴对一个描述工程的AOE网,应判断其是否能够顺利进行。⑵若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及每一个关键活动所依附的两个顶点、最早发生时间、最迟发生时间。

36、地铁站建设问题 问题描述:

以南昌为例,假设要在南昌各辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要设计一个程序,合理安排地铁的建设路线,使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。基本要求:

⑴从包含各辖区的外部地图文件中读入辖区名称和各辖区间的直接距离。⑵根据读入的各辖区的距离信息,计算出应该建设哪些辖区间的地铁路线。⑶输出应该建设的地铁路线及所需要建设的总里程信息。37.服装销售系统

要求:包含三类用户:管理员、店长、销售员;

(1)管理员功能:自身密码修改;其他用户的添加、删除;用户信息的修改、统计;商品信息的添加、修改、删除、查找、统计。

(2)店长功能:登录、注销、自身密码修改、自身信息修改;商品信息的修改、统计;查看日报表、月报表、商品销售量报表、营业员业绩报表;查找、浏览、修改商品储备信息。

(3)销售员功能:商品浏览、查找、出售商品,以及查看自己本日报表、本月报表。38.歌星大奖赛 要求:

(1)在歌星大奖赛中,每位歌手演唱完,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。歌手的人数在大奖赛开始时确定。(2)同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接近平均分)和最不公平(即与平均分的差距最大)的评委。

(3)建立数据文件,保存各位歌星比赛时的所有评委分数,包括最高分,最低分和最后得分,并对比赛结果进行排序输出;

(4)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

39.机房机位预约模拟系统

20台机器,从早8点到晚8点,每两个小时一个时间段。需要实现如下功能:(1)查询,根据输入时间,输出机位信息;

(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近时间段的空机时间段。另外,如果用户要求在非空时间上机,则将用户信息插入该时间段的等待列表。(3)退出预定,根据输入的时间撤销该时间的预定。

(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息。40.歌曲信息管理系统

制作一个歌曲信息管理系统,要求提供以下功能:

(1)歌曲信息包括歌曲名、作者、演唱者、发行年月等。(2)可以对歌曲信息进行输入、删除、浏览。

(3)可以根据歌曲名、作者、演唱者查询歌曲信息。(4)提供按作者分组显示功能。(5)用文件存储信息。41.简单的试题库管理系统

试题库管理系统要求对试题进行集中、有序、有效的管理,更新方便、查询快捷、组卷灵活,降低劳动强度。

实现新试题库的建立,界面友好、操作方便。按试题的难易程度、题型、章节等分类录入、修改、删除试题,通过文本文件导入试题,并可以实现对相关试题的查询。按照要求自动组卷、生成文本格式试卷并输出,便于用户存档和编辑。同时,该系统还具备一定的安全性,通过用户名和密码登录。42.学生点名系统 要求:

(1)读入外部文件存储的学生信息,显示学生历史点名记录;(2)可选择学生班级,对不同班级的学生进行点名。

(3)对学生按学号显示名字,进行点名,并接收键盘输入的信息,分别代表缺课、请假、正常;(4)将点名结果连带日期一起回存到外部文件。(5)提供交互界面,以便人机交互。43.猜数游戏

由计算机“想”一个数,并给出数值范围,请人猜,如果人猜对了,则一局游戏结束。否则,计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。计算机记录游戏者每次猜的次数,以此反映出猜数者“猜”的水平。

要求:

(1)把猜数记录最好的前五名的数据保存在外部文件中,包括游戏者的名字,成绩和排名,并排序输出。

数据结构与算法课程设计题目 篇5

心得体会

通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。

对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include 头文件中的输入函数。因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。

数据结构与算法课程设计题目 篇6

经过这次课程设计,不但巩固了C语言、C++以及数据结构的知识,更加很好的将这三门专业课的知识融会贯通。

刚开始抽到这个题目的时候,看了好半天,不懂题目的意思,也找不到与书上哪种存储结构挂上钩,看到是游戏设计,心就有点慌了。看了几遍,在任务书的后面看了提示,慢慢的弄懂了是什么意思,一开始我想到了用矩阵这种存储结构,因为我想空间的点可以用矩阵这种存储结构来存储,矩阵的三元组法中可以定义行数和列数及非零元素的个数。我想先给矩阵赋初始值为0,当某个点有玩具时就可以将该点赋为1,表示有玩具。若矩阵中某两点横纵坐标都相等的话则半径为零,否则先求行与行间的最小距离,在求与下一行的最小距离,依次循环。后来想想玩具任意放的而矩阵只能存储整形这种数据类型,不能计算对于浮点型这种结构,后来想到想到用带有分量X和Y的结构体数组这种存储结构可以解决这种问题,而且利用分而治之的递归算法,使算法更简单一点。对于一个问题,需要多想,多方面考虑,不能仅仅只看到了它的一方面或两面,而要多方面观察。只有将所有的问题都考虑到了,这个程序才算完整的,没有缺陷的。就像操作系统,由原来的单处理机系统逐步变为多处理机系统,到现在的windows xp.。这些都是问题更加完善的过程。编写程序的过程和思想一样重要,对于刚开始编写的以及过后修改之后的,都要相互比对,将过去好的得到保留,不好的继续修改,最后得到比较完善的结果。

由于要设计完成这样一个比较复杂的程序,需要的不仅仅是课堂上书本上那些简单的知识,更需要我们去多方面的查阅资料,学会利用各种可能的资源,让自己自主的去学习。本程序中我经过查阅资料学会了系统的一些库函数的一些用法,像qsort(n1,n2,n3,n4),第一个参数为数组名即数组的首地址,第二个参数为数组的大小,第三个参数为数组元素的字节大小,第四个函数调用比较函数。用这种排序算法快儿准,节省了不少的时间。学会查阅资料也是一种需要培养的能力,无论基础知识学得有多牢固,也需要我们多看其他相关的书籍,查阅资料,找到更好的解决方法。让自己解决问题的能力更上一层楼。

在课程设计过程中有过因不知如何解决而忧愁,有过因同一个意思显示不同的结果而埋怨,有过因差一点点就成功了而不甘心,有过因解决问题而喜悦而自豪。经过这次的课程设计,真得是让我深深爱上了编写程序,调试程序。因为它给了我五彩的世界,充实的生活,有成就感的心情。当然,这次设计,过程中遇到了很多问题,有得已经通过各种方法得到了解决,但有的还需要继续查阅相关书籍。

现将课程设计中的收获简单的写在下面。

1.程序的设计思想的精巧的重要性,是不管怎么说都不为过的,好的设计可以让大家很快的明白你的思想,而且很方便的来实现它。

2.数据结构的课程设计不仅仅是编写完成一个程序那么简单,它要的是运用数据结构的思想设计一个即简单又方便的程序来完成课程设计任务书上要求的功能。

3.良好的编程习惯,它可以使你的程序很方便的被别人阅读,也很方便的被更改,所以可以的话,尽可能多的写出注释,没有人会闲你写的太多。

基于数据加密算法的研究与设计 篇7

关键词:数据加密,公开密钥,网络安全,替换表

0 引言

在数据处理过程中,为了保密起见,可设法将数据进行适当的变换,使之成为密码信息,这个过程通常称为加密,是数据加密的主要手段。与之相应地就有一个如何将加密后的信息还原成原来数据的过程,这个过程称为解密。如果一个加密后的信息很容易被别人找到解密的方法,那么它就是一个价值不大的加密系统。 因此,研究加密系统使得加密后的信息很难被别人找到解密方法,即密码学。

目前比较常用的数据加密技术有DES、RSA、PGP技术等,而软件加密早期有针刺穿孔、激光加密、电磁加密、掩膜加密等硬标记加密技术;现代软件加密技术多采用软件加密方法,主要在磁盘上做软标记,如磁道软加密、扇区间隙软指纹加密、异常ID加密、超级扇段加密、无序排列加密等,所有这些方法都可以用软件很容易的实现,但是只知道密文的时候,是不容易破译这些加密算法的,最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,经常的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。

1 PROLOCK加密程序

PROLOCK是流行最早的加密程序,加密钥匙附有一个PROLOCK.EXE执行文件,该文件自身也是用PROLOCK加密的,是一个保密文件。因此,即便是同一版本的密钥,也不能相互拷贝,输出文件名的扩展名必须是EXE,并且列出5个参数项:

/DELAY=n 延时 (I1=1-999分)

/FPDRIVE=n 钥匙盘所在驱动器号

/NOWAIT 有此参数,不能进行确认性提问

/TIMER 从INT08H中断获取时钟信息

/USER=n 用户要求检查解密键的中断向量(n为十进制中断向量号)

用PROLOCK加密后的密文将增加12KB,增加的数据放在文件前部,使用单一算法加密,原理是仿照激光加密的定位和指纹识别程序。从密钥读出的指纹,只用作判断该钥匙是不是密钥,而不用作程序解密,即指明具有这一特征的带密钥程序,可以在没有密钥的条件下解密使用。

PROLOCK的防拷贝技术是使用激光孔,LOCK的防拷贝技术也使用大扇区格式,大扇区在O面20道前后,扇区的大小值为6,即按照8K的方式读入扇区。采用大扇区格式的优点是能做到防拷贝,但缺点是在个别驱动器上不能正常读取密钥。

LOCK的代码解密过程是逐步进行的,其6K代码总共分为7个几乎相互独立的部分,除第一部分外,其余代码都经过加密。由于程序中采用了关闭所有系统中断,特别是键盘中断,而且多次出现关键盘中断的命令,因此反跟踪技术较好。在运行过程中,它将破坏所有中断向量地址表和系统数据区。许多外壳程序工作时,都有要破坏中断向量地址,如INT 3(破坏DEBUG的G命令的返回地址),INT 10H(破坏某个时间数据的正常显示)。这种部分个性中断向量地址的反跟踪方式,容易被另设的其它中断来完成相应的功能,而导致失败。LOCK89则不同,它破坏从0∶0-∶47F的全部数据,即所有的中断向量地址表和部分系统数据区(如键盘队列缓冲区等),导致DEBUG工作时,不能使用任何中断,也就无法进行跟踪。LOCK89采用防止程序代码被修改的反跟踪方式,当某段程序在执行时,它总是从头到尾计算本程序代码的累计和,并用该值与指定的某个值进行比较,或作为解密下一段代码的解密键,这期间若有一条指令被修改了,其累计和就会改变,程序也就不能按正常路径向下执行。若把DEBUG的断点地址设置在计算区内,也将导致累计和发生变化,从而加大解密难度。LOCK89还采用特殊的寄存器(如堆栈段寄存器SS及栈顶寄存器SP),将它们作为一般寄存器来使用,若DEBUG使用进栈或退栈指令,SP值会变化,且SS∶SP指针地址中的值也会变化。

2 置换表的加密算法

在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用,对这种“置换表”方式的一个改进就是使用更多的“置换表”,这些表都是基于数据流中字节的位置,或者基于数据流本身。这时,破译更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按随机的方式使用每个表,这种改进的加密方法已经变的很难破译。例如,对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient可以变为listen,所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。

还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难,而且更进一步,如果再使用xor操作,按位做异或操作,就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,可以使用Fibonacci数列。对数列所产生的运算,得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能。但是,使用Fibonacci数列这种伪随机的方式所产生的密码对解密程序来讲是非常容易的,在一些情况下,想知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查。这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。

3 公钥的加密算法

加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。分为两种方式:对称密钥算法和非对称密钥算法。对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的PGP公钥加密以及RSA加密方法都是非对称加密算法。加密密钥即公钥,与解密密钥即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么可以基于‘b’,做一个相对应的操作,导出输入‘a’,在一些情况下,对于每一种操作,可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。

RSA加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,使用RSA算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于RSA加密算法。PGP算法(以及大多数基于RSA算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,得到这个密钥的唯一方法就是使用私钥来解密。例如,假定现在要加密一些数据使用密钥‘12345’。利用RSA公钥,使用RSA算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用RSA私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。

4 DES加密算法

DES(Data Encryption Standard)是发明最早的,最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中,Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

DES算法工作流程如下:若Mode为加密模式,则利用Key 对数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密模式,则利用Key对密码形式的数据Data进行解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,再现了明码形式的核心数据。这样,保证了核心数据在公共通信网中传输的安全性和可靠性。

也可以通过定期在通信网络的源端、目的端同时改用新的Key,便能更进一步提高数据的保密性。 QQread.com 推出各大专业服务器评测 Linux服务器的安全性能,DES和3DES的主要缺点是实现速度较慢。由于最初的DES没有提供高效率的软件代码,因而加密速度很慢,相比之下,重复三遍DES加密操作的3DES速度更慢。DES和3DES的另一个缺点是安全性较差。加密的效率和安全性与分组长度密切相关,更高等级的安全性和效率通常需要更长的分组长度,DES和3DES采用64位的分组长度,显然不满足安全和效率的要求,密钥经过10层处理后,扩展为10组不同的密钥。一层典型的加密和脱密处理都是由四个阶段组成:ByteSub(字节代替)、RowShift(行移位)、MixColumns(列混合)和AddRoundKey(加层密钥)。ByteSub阶段使用一张表(即所谓的S盒)来执行对分组的字节进行代替。也就是说,每一个输入字节被映射到唯一的一个输出字节。在RowShift阶段中,状态阵列的第一行保持不动,算法对第二行执行1字节循环左移,对第三行执行2字节循环左移,对第四行执行3字节循环左移。在MixColumns阶段中,代替算法作为作用于一列中所有字节的函数,改变列中的每个字节。在AddRoundKey阶段中,使用扩展密钥中的一块4× 4字节部分。扩展密钥的每一个字节利用“异或”(XOR)函数与状态阵列的对应字节结合。

5 使用随机数序列产生密码转表

使用一系列的数字(比如128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,把256个随机数放在一个矩阵中,然后对他们进行排序,使用最初的位置来产生一个随意排序的表,表中的数字在0到255之间。现在,产生了一个具体的256字节的表。让这个随机数产生器接着产生这个表中的其余的数,以至于每个表是不同的。下一步,使“shotgun technique”技术来产生解码表。如果a映射到b,那么b一定可以映射到a,所以b[a[n]]=n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表,它对应于上一步产生的256字节的加密表。

使用这个方法,表的顺序是随机的,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码,已经有了两张转换表,基本的加密解密是如下工作的。前一个字节密文是这个256字节的表的索引。或者为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。设定这个表是256×256的数组,crypto1=a[crypto0][value]变量‘crypto1’是加密后的数据,‘crypto0’是前一个加密数据(或者是前面几个加密数据的一个函数值)。因此,第一个数据需要记住,如果使用256×256的表,将会增加密文的长度。或者,可以使用产生出随机数序列所用的密码,也可能是它的crc校验和。使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的值。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节,一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。

加密时所产生的随机序列是任意的,没有关于这个随机序列的详细的信息,解密密文是不现实的。例如,一些ascii码的序列,如“cccccccc”可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效长度。

如果确实不理解如何来产生一个随机数序列,就考虑Fibonacci数列,使用2个双字(64位)的数作为产生随机数的值,再加上第三个双字来做xor操作。这个算法产生了一系列的随机数。算法如下:

unsigned long dw1, dw2, dw3, dwmask;

int i1;

unsigned long arandom[256];

dw1={seed #1};

dw2={seed #2};

dwmask = {seed #3};

// this gives you 3 32-bit “seeds”, or 96 bits total

for(i1=0;i1<256;i1++)

{dw3=(dw1+dw2)^dwmask;

arandom[i1]=dw3;

dw1=dw2;

dw2=dw3;}

如果想产生一系列的随机数字,可以使用下面的方法:

int__cdecl mysortproc(void*p1, void*p2)

{unsigned long**pp1=(unsigned long**)p1;

unsigned long**pp2=(unsigned long**)p2;

if(**pp1<**pp2)

return(-1);

else if(**pp1>*pp2)

return(1);

return(0);}

...

int i1;

unsigned long *aprandom[256];

unsigned long arandom[256]; // same array as before,in this case

int aresult[256]; // results go here

for(i1=0; i1<256; i1++)

{

aprandom[i1]=arandom+i1;

}// now sort it

qsort(aprandom, 256, sizeof(*aprandom), mysortproc);

// final step - offsets for pointers are placed into output array

for(i1=0; i1 < 256; i1++)

{aresult[i1]=(int)(aprandom[i1]-arandom);}

...

变量‘aresult’中的值应该是一个排过序的唯一的一系列整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如,对一个字节对字节的转换表,就可以很容易并且非常可靠的产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如,产生一个随机的字符,计算机游戏中一个物体的随机的位置等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。

6 结束语

开发了一个应用程序测试上面所描述的加密算法。程序经过了几次的优化和修改,提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。由于在现实生活中,要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改、截取,这就需要很多的安全系统大量的应用。数据加密是肯定可以被破解的,但想要的是一个特定时期的安全,在短时间内现实破解是不可能的,密文的破解应该是足够的困难的。

参考文献

[1]张仕斌.网络安全技术[M].清华大学出版社,1998.

[2]李明之.网络安全与数据完整性指南[M].机械工业出版社,2001.

[3]张世永.网络安全原理与应用[M].科学出版社,2001.

[4]朱鲁华,陈荣良.数据库加密系统的设计与实现[J].计算机工程,2002,28(8):100-3428.

[5][美]斯克内尔(Bruce Schneier).网络信息安全的真相[M].北京:机械工业出版社,2001.

算法结构与设计教学中的若干思考 篇8

算法是高中新教材新增的内容,很多教师在处理教材过程中都遇到了困难.课程标准中指出算法思想是这一部分内容的核心,而算法结构与设计是对算法思想的实现,所以也是相当重要的一个部分.在此我想谈谈自己对于这部分内容的浅见.

1 从算法思想自然地过渡到算法结构

在算法思想这一节中,教材中介绍了各种各样生活中的例子以及解决他们的各不相同的算法.这种现象虽然非常生动有趣,但却难以揭示问题的本质.数学的主要特点之一就是研究事物的结构从而揭示问题的本质.所以我们对各种算法进行总结归纳,抽象出了三种基本结构,即顺序结构、选择结构和循环结构.任何一个算法都可以由这几种结构组合而成.这样,为了研究各式各样的算法,只需研究清楚这三种结构就可以了.数学上的分类思想在这里得到了充分的体现.

2 从整体上把握三种结构

教材中三种结构是顺着写下的,但我认为在实际教学过程中首先应该让学生对他们有一个整体的感觉,再逐个做详细的解说.比如为了激发学生的兴趣,可以从他们感兴趣的电脑游戏说起.电脑游戏都是程序编出来的,自然逃不开以上三种结构.游戏的一关一关的顺序进行就是一个顺序结构;在有的游戏中需要面临抉择,要选择走哪条路,这就是选择结构;当游戏中某关没有闯过,又会跳到这一关的开头,重复之前走过的路,如果很多次都闯不过去,电脑上就可能会弹出GAME OVER的字样,这其实就是循环条件不满足,跳出循环的表现.通过这样生动的例子不仅可以激发学生的兴趣,而且可以让他们对算法的三种结构有一个感性的认识,在进一步理性认识时就不会感到太抽象和吃力.

3 深刻把握三种结构的层次

在对三种结构做仔细分析时,要注意他们之间的自然过渡.例如对于顺序结构的教学可以通过以下例题做分析归纳,从而转入对选择结构的讨论.

分析 对于可以用公式解决的问题,只需把相关的变量设为一些字母并把每个数值赋给相应的字母,再输入公式,就可以得到答案.这个过程其实就类似使用计算器.然而,并不是所有的问题都有现成的公式,这时就要用到稍复杂的结构了,计算机相对计算器的优势也就显现了出来.

例2 判断某年份是否为闰年,要看此年份能否被4整除.如果不能被4整除,则是平年;若能被4整除,但不能被100整除,则该年为闰年;若能被4整除,又能被100整除,还要看能否被400整除,若能则为闰年,否则也为平年.写出判断是否为闰年的算法.

分析 这是一类比较常见的问题,如车票费,物管费,税收,成绩等级,解一元二次方程(对Δ的讨论),解不等式(对系数正负的讨论)等.虽然没有一个固定的公式,对于每种情况往往有一个相应的结果.通常用选择结构来处理.重点在于分清各种情况,用选择语句进行嵌套时一定要分清层次,注意条件和结果的一一对应.本质就是数学上的分类讨论思想.但是我们发现,以上这些问题只需要人和一个计算器就能完成,我们何必要费尽心思写算法让计算机来算呢?

例3 求1-1/2+1/3-1/4+…+1/99-1/100的算法

分析 对于这个问题,仅靠人工加计算器在短时间内难以解决,而这也是一类比较常见的问题,如有一定规律的数列的和,积.我们可以首先给出一个初始值,运用循环结构,告诉计算机你要进行的运算满足的条件,即循环条件,然后就可以把一切都交给计算机去做了.该结构中的循环变量有两类作用:1.控制所加到数的大小(如本题中的1/100)或运算结果大小(如要求数列运算结果大于某个值);2.从1开始控制循环次数(如给定了数列的项数).此类题目往往是利用计算机运算速度快的特点去解决人脑在短时间内无法解决的问题.通常这类问题没有明确的公式,只能“死算”.至此,计算机的优势才得以充分体现.

4 体现数学对于算法的重要性

虽然课程标准不要求学生自己会在计算机上编程运行,但教师还是有必要掌握这一点.这样可以真实地运行一些程序让学生感受数学对于算法的重要性.

例4 求两个数的最大公约数

分析 一个自然的想法是从两数中较小的那个数开始试,如果他能够被两数整除则为最大公约数,如不能则把他减1,再试,依次类推,直到找到一个同时整除这两数的数.这种算法乍看起来挺好的,他发挥了计算机的穷举优势.但是如果两个数字都很大,计算机的运算量就会相当大.用穷举法尝试运行一下,再用辗转相除法写程序运行一下,两者对比就会发现后者速度快得多.通过数学改进的算法效率大大提高.

例5 求方程f(x)=x3+x2-1=0在[0,1]上的近似解,精确度为0.01

分析 对于这个问题,直接穷举显然是不可能的.因为[0,1]是一个无限集,无法让计算机跑遍所有的数一个一个去尝试.所以要用二分法来解,而他的理论基础是连续函数的介值性.这更进一步说明了算法离不开数学.我们知道,程序的灵魂是算法,这里我想说,算法的灵魂是数学!

此外,北师版教材主要要求学生掌握基本的算法,对好的算法没有很高的要求,这是受课时数限制决定的,但是教师可以向学生做一个简略的介绍,因为只有在分析算法的效率时才能充分体现数学对于算法的重要性,也为学生日后的进一步学习打下基础.

上一篇:简易版委托运输合同下一篇:我的政法大学法硕考研奋斗故事