在日常的学习、工作、生活中,肯定对各类范文都很熟悉吧。那么我们该如何写一篇较为完美的范文呢?以下是小编为大家收集的优秀范文,欢迎大家分享阅读。
数据结构与算法分析课程设计篇一
《数据结构与算法课程设计》任务书
一、课程设计目的
数据结构与算法课程设计是《数据结构与算法》课程教学必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。
2二、课程设计题目
2.1 棋盘覆盖
【间题描述】
在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的l型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个l型骨牌不得重叠覆盖。
【基本要求】
(1)输入k以及特殊方格所在的行号dr和特殊方格的列号dc。
1(2)要求输出每一步用什么形态l型骨牌覆盖,覆盖后得到的棋盘图形。(3)如果输出的结果只是用矩阵表示则为良好,用图形表示则为优。【测试数据】 【实现提示】
使用分治策略,把棋盘划分成4个小棋盘,然后用一个l型骨牌覆盖将这4个小棋盘变为都具有特殊方格的棋盘。
2.2 hanoi塔问题(*)
【问题描述】
设a,b,c是三个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠放在一起,各圆盘从小到大编号为1,2,„,n,要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:
规则(1)每次只能移动一个圆盘;
规则(2)任何时刻都部允许将较大的圆盘压在较小的圆盘之上;
规则(3)在满足移动规则(1)和(2)的前提下,可将圆盘移至a,b,c中任一塔座上。
【基本要求】
(1)设计出hannoi塔游戏,供用户玩;(2)提供正确的搬运方法。【实现说明】
正确的搬运方法使用递归方法实现。【测试数据】
2.3 矩阵连乘问题
【问题描述】
给定n个矩阵{a1,a2,...,an},其中ai和ai1是可乘的,i=1,2,„,n-1。考察这n个矩阵的连乘积a1a2,...,an,通过加括号方式,找出矩阵乘积所需的最少计算量的方法。
【基本要求】
输入每个矩阵的行和列,要求输出最少计算量的矩阵乘积方法,如(a1(a2(a3a4)))。【实现说明】 使用动态规划方法。
2.4 多边形游戏(*)
【问题描述】
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。
游戏第1步,将一条边删除。随后n-1步按以下方式操作:
选择一条边e及由e连接着的2个顶点v1和v2;
用一个新的顶点取代边e及用e连接着的2个顶点v1和v2,将由顶点v1和v2的整数值通过边e上的运算得到的结果赋予新顶点。
最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。【基本要求】
设计该游戏供用户玩;
对于给定的多边形,给出最高得分计算。【实现说明】 使用动态规划方法。
2.5 0-1背包问题
【问题描述】
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为c。问应如何选择装入背包种的物品,使得装入背包种物品的总价值最大。
【基本要求】
使用动态规划、回溯法以及分支界限三种方法实现。【测试数据】 【实现提示】
2.6 排序方法
【问题描述】
给定n个元素,要求对这n个元素进行排序。【基本要求】
使用多种排序方法,越多越好;
比较每种排序方法的时间复杂度和空间复杂度。【测试数据】 【实现提示】
2.7 哈夫曼编码译码器
【问题描述】
设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件
(压缩文件,);反过来,可将一个压缩文件译码还原为一个文本文件(.txt)。
【基本要求】
(1)输入一个待压缩的英文文本文件,统计文本文件中各字符的个数作为权值,生成哈夫曼树;
(2)将文本文件利用哈夫曼树进行编码,生成压缩文件(后缀名cod)(3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码。【实现说明】
(1)在构造哈夫曼树时,可以利用不同的线性表存放二叉树:用顺序表、单链表、5 循环单链表、双向链表、循环双链表;
(2)在构造哈夫曼树时,可以利用优先队列存放二叉树:顺序队列、链队列(可以是单链表、双链表等,还可以用静态结构去实现),可以分别在入队列或出队列时实现优先级;
(3)二叉树本身也可以用静态数组模拟;(4)使用贪心算法
2.8 迷宫问题(*)
【问题描述】
设计一个迷宫并给出正确走法。如: *** *** *** *** *** *** *** 其中0表示可以走,1表示不能走,每一步只能向上下左右移动。【基本要求】
(1)给出迷宫的正确走法,包括没有解的情况;(2)要求界面友好。【测试数据】
【实现提示】 使用回溯的方法。
2.9 继续邮资问题
【问题描述】
假设某国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,在1张信封上贴出从邮资1开始,增量为1的最大连续邮资区间。
【基本要求】
输入任意的m和n都能设计出最佳的方案,并给出连续邮资区间。【实现说明】 【测试数据】
2.10 图的m着色问题
【问题描述】
给定一个地图,要求给出该地图的最少着色方案 【基本要求】
(1)把地图以及最少着色的方案显示出来则为良好。(2)有友好的界面则为优 【实现说明】
2.11 猜数字游戏(*)
【问题描述】
孩子想1个由4种颜色组成的序列(4种颜色不一定完全不同)。每种颜色只能是6种颜色之一。方便起见,我们用数字1到6表示6种颜色。
计算机必须根据孩子的回答找出孩子所想的颜色序列。计算机在屏幕上显示一个序列,孩子用键盘回答以下两个问题:
猜对的颜色中位置不对的有几个? 猜对的颜色中位置对的有几个? 【基本要求】
编程使至多6次问答后猜出序列,如果办不到,至多10次问答后猜出序列。【实现说明】 【测试数据】
如孩子想的是4655 计算机猜想 颜色对位置错的数目 颜色和位置都对的数目 1234 1 0 5156 2 1 6165 1 1 5625 1 2 5653 1 2 8 4655 0 4 2.12 大整数计算器
【问题描述】
设计一个计算器实现两个任意长得整数的加、减、乘、除。【基本要求】
设计一个实现任意长的整数进行四则运算的演示程序,要求输入任意长的整数进行四则运算,都能得到精确的结果。
【实现说明】
2.13 查找搜索技术
【问题描述】
给定任意的数组,对于给定的数,查找是否在数组中,如果在,则返回给定数在数组的位置,不在则返回不在信息。
【基本要求】
(1)使用多种搜索方法,越多越好,其中二分搜索技术、线性时间选择是必须的;(2)比较每种排序方法的时间复杂度和空间复杂度。【实现说明】
2.14 tom,jerry和奶酪(*)
【问题描述】
猫tom和鼠jerry同住在一矩阵地窖中。猫要吃鼠,鼠要吃奶酪。地窖中有2种地砖:有洞砖与无洞砖。一个洞足以让鼠钻入,但猫不能。
以菜单形式完成以下任务:
随机地生成一个地窖,并给猫、鼠和奶酪安排一个位置。如: fffffffffffffff fppppppppppppcf fhfffffffffffpf fpppjhppppppppf fpffffffpffffff fpppppppppptppf fffffffffffffff 其中c表示猫,j表示鼠,h表示洞,f表示不能通行(2)鼠先行,猫后行。两者皆满足以下规定: 1)必须上、下、左或右移动 2)鼠必须走1步(穿过p或h)3)猫必须走1或2步(穿过p)
(3)当鼠吃到奶酪或猫抓到鼠时,游戏结束。【基本要求】 【实现说明】
2.15 布线问题
【问题描述】
印刷电路板将布线区域划分成n×m个方格阵列,精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。在布线时,电路只能沿着直线或直角布线。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不允许穿过被封锁的方格。
【基本要求】(1)解决题目的问题(2)提供友好的界面 【实现说明】 使用分支限界法。
2.16 魔方工具包(*)
【问题描述】
一个魔方是一个由3×3×3个小立方体组成的立方体。最初立方体的6个面分别涂上不同颜色,我们称之为“最初魔方”。魔方的每一面上的3×3个小立方体组成它的一层。
魔方所能见到的每一层(6个面)都能旋转90,180,220或360度。所有层的旋转轴都垂直于面且通过其中心。旋转的结果是另一个魔方,它的所有面的颜色都改变了。
现在我们用字符来代替颜色:u=上,d=下,f=前,b=后,l=左,r=右。任何一个序列的旋转都能表示成{u,r,f,b,l,d}中一些字符组成的字符串,其中每个字符表示它所 11 指定的面顺时针旋转90度。
【基本要求】
(1)编程完成以下3个任务(菜单形式),你可以假设任何输入的字串长度都<=35。你的算法能处理非法输入的情况,如: 输入 输出 l l ll ll lll lll llll “”(空串 lllll l llrrrffffrlb lllb hello “error”
(2)判断输入的2个字串的旋转结果是否相同。如 输入一 输入二 输出 ru ur no rrffrrffrrffrrff ffrrffrr yes rrffrrffrrffrrff rrffrrff no(3)求出输入字符串至少须使用几次才能将魔方转回到“最初魔方”(一定大于0)输入 输出 l 4 12 dd 2 bulb 36 ruf 80 bluff 180 【实现说明】
2.17 图的建立与输出
【问题描述】
建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
【基本要求】
给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果 【实现说明】
无
2.18 图的建立与输出
【问题描述】
建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出 13 图的邻接矩阵。
【基本要求】
给出图的深度优先和广度优先遍历算法,并给出遍历过程的动态演示效果。【实现说明】
无
2.19 以队列实现的仿真技术预测理发馆的经营状况(*)
【问题描述】
理发馆一天的工作过程如下:
1)理发馆有n把理发椅,可同时为n位顾客进行理发。
2)理发师分三个等级(一级、二级、三级),对应不同的服务收费。3)当顾客进门时,需选择某级别理发师,只要该级别的理发师有空椅,则可立即坐下理发,否则需排队等候。
4)一旦该级别的理发师有顾客理发完离去,排在队头的顾客便可开始理发。5)若理发馆每天连续营业t分钟,求
(1)一天内顾客在理发馆内的平均逗留时间;(2)顾客排队等候理发的队列长度平均值;
(3)营业时间到点后仍需完成服务的收尾工作时间;(4)统计每天的营业额;
(5)统计每天不同级别理发师的创收。
【基本要求】
1)模拟理发馆一天的工作过程:必须采用事件驱动的离散模型(参考教科书3.5节离散事件模拟p65);
2)每个顾客到达和下一顾客到达时间的间隔应是随机的; 3)理发师编号、理发师级别和每天的营业时间由用户输入;
4)某顾客挑选某一个级别的理发师而不得时,选第一个队列排队等待 ;
5)每个顾客进门时将生成三个随机数:(1)durtime:进门顾客理发所需服务时间(简称:理发时间);(2)intertime:下一顾客将到达的时间间隔(简称:间隔时间);(3)select:服务选项。
6)服务收费:应包含服务时间和理发师级别两个因素。
7)除了输出统计的数据外,还需要显示理发馆的状态,可以采用文本方式(横向显示每张椅编号、理发师级别。纵向表示等待该理发师理发的排队长度)。【实现说明】
用户输入每位理发师编号、级别号和营业的时间,结合随机数进行测试。
2.20 防抄袭管理系统(*)
【问题描述】
对于给定的文档,如word文档,txt文档等,找出文档的相似度。【基本要求】
(1)要求找出给定的两个文档的相似度以及标出相似的地方(1:1);(2)要求找出给定的一个文档与给定的文件夹的所有文档的相似度,以及标出相似的地方(1:n)(3)要求找出给定的文件夹下面所有文档的相似度(n:n)。【实现说明】
给定相似文档进行测试。
2.21.设计一个停车场管理系统,模拟停车场的运作
设计要求:通过此程序具备以下功能:
1、要求以栈模拟停车场,以队列模拟车场 15 外的便道,按照从终端读入的输入数据序列进行模拟管理;
2、要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻;
3、该系统完成以下功能:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费);
4、要求栈以顺序结构实现,队列以链表实现。
2.22. 赫夫曼编码
设计要求:自己找一篇不少于200个单词的英文文章,分析该文章中每一个字符的出现概率(包括标点符号,区分大小写),根据分析结果对文章中每一个字符进行赫夫曼编码,并将编码原则储于一个独立的文本文件中。最后,根据这个编码原则,将英文文章转换为01 串存储于一个文本文件中,再编写一个解码程序,将编码解码为原文件。如:英文文章为 aaabbc 则编码规则为 a-----0 b-----10 c-----11 英文文章将被转化为 000101011 2.23.并查集:检查网络
题目要求:给定一个计算机网络以及机器间的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。请写出程序判断:任意指定两台计算机,它们之间是否可以进行文件传输? 输入要求:输入若干测试数据组成。对于每一组测试,第1行包含一个整数n(≤10000),即网络中计算机的总台数,因而每台计算机可用1到n之间的一个正整数表示。接下来的几行输入格式为i c1 c2或者 c或者c c1c2或者s,其中c1和c2是两台计算机的 16 序号,i表示在c1和c2间输入一条连线,c表示检查c1和c2间是否可以传输文件,s表示该组测试结束。
当n为0时,表示全部测试结束,不要对该数据做任何处理。
输出要求:对每一组c开头的测试,检查c1和c2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。
当读到s时,检查整个网络。若网络中任意两机器间都可以传输文件,则在一行中输出“the network is connected.”,否则输出“there are k components.”,其中k是网络中连通集的个数。
两组测试数据之间请输出一空行分隔。
2.24.教学计划编制问题(图的应用)
[问题描述] 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。[实现提示]
1、输入参数应包括:学期总数,一学期的学分上限,每门课的课程号(可以是固定占3位的字母数字串)、学分和直接先修课的课程号。
2、应允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
3、若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式可以自己设计。
4、可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。
============================= 17 2.25.药品销售统计系统(排序应用)
【问题描述】
设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。【实现提示】
在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:a125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。
药品信息的元素类型定义: typedef struct node { char num[4];/*药品编号*/ char name[10];/*药品名称*/ float price;/*药品单价*/ int count;/*销售数量*/ float sale;/*本药品销售额*/ }datatype;存储药品信息的顺序表的定义: typedef struct { datatype r[maxsize];int length;}sequenlist;
2.26梯运行仿真程序
[问题描述] 办公大楼有若干层(例如,十层),每层有电梯,同时有步行楼梯;
全楼有若干部(例如,不多于10部)电梯同时供使用,电梯容量为24人,速度每上下一层需5秒,在某一层停下至少15秒。其运行状态可分:向上、向下、停止,当前乘客数,当前所在层数。它设有一个“按钮数组”,例如第五层的按钮按下,意味着有乘客在第5层到达目标层,等等。在楼的每一层,有电梯数,有按钮表示有人等待向上或向下,由若干人在等待,有若干电梯在本层停下,等等。
在大楼中(包括进出)的总人数不超过500 人,每个人站在电梯前有个目标层,他有一个最大的忍受等待时间,因为他可以选择电梯或是步行走楼梯,等等。
还有下面若干假设:在每个时间段要进大楼的人数在0~199 之间随机取值;
用电梯的每个人的目标层在1~10 之间取值;一个人在进电梯或改走楼梯之前的等待时间在180~360 秒范围内随机发生;一个人到达目标层后第二次再乘电梯中间的工作时间在400~6600 秒间随机取值。[基本要求] 编写一个程序,模拟办公大楼中全部电梯的工作过程。这个仿真程序可以用来监测系统运行情况,改善大楼管理,它也可以看成是一种游戏程序。
2.27国交通咨询模拟
[问题描述]
处于不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅 途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供最优决策的交通咨询。
[基本要求]
(1)提供对城市信息进行编辑(如:添加或删除)的功能;
(2)城市之间有两种交通工具:火车或飞机,提供对全国城市交通图和列车时刻表及飞机航班表进行编辑的功能。(信息的输入方式可以是文件输入和键盘输入两种方式)
(3)提供两种最优决策:最快到达和最省钱到达。(选作:旅途中转次数最少的最优决策)
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
a)由用户输入起始站、终点站、最优决策原则和交通工具;
b)输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详 细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
三、课程设计的基本要求
1.问题分析和任务定义。根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?
2.逻辑设计。对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图。
3.详细设计。定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,20 写出数据存储结构的类型定义,写出函数形式的算法框架。
4.程序编码。把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚。
5.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果。
6.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析。
7.编写课程设计报告并提交相关内容
设计最终需提交的内容包括:
a)课程设计报告(1份,a4纸打印,同时包括一份电子版)报告要求版面清晰,格式规范,否则重新编写。报告内容要求包括:
(1)问题的概述、分析及研究意义;(2)数据结构的逻辑设计和物理存储设计;(3)重要算法的设计、流程描述或伪代码描述;
(4)数据结构的时空复杂性分析以及重要算法的复杂性分析;
(5)程序最终实现结果(包括重点结果界面的抓取,能过说明问题的重要实验结果数据的打印或其可视化结果等)。
(6)参考文献(如果需要)。
(7)附录部分附上关键数据结构的定义及关键算法的源代码。
b)完整的程序系统(电子方式提交)
能够对输入产生相应的输出,同时尽量的完成可视化演示。
该部分包括源代码和可执行文件两个部分(提交的时候需清楚的注明个人姓名,班级)。
c)源程序文档(电子方式提交)
源程序代码要求结构清晰、可读性好。应对源程序中的类说明(如果采用面向对象方法设计),函数说明,接口说明,关键变量说明等进行注释;源程序要进行适当的缩进编排。
d)答辩报告(编写power point答辩报告,电子方式提交)要求突出重点,思路清晰。同时就此报告准备答辩。
e)所有以电子方式提交的文件全部存在一个目录中,并对其进行压缩(用winrar或winzip均 21 可),压缩后的文件按规定格式进行命名,命名格式为:学号+()。8.每位同学只能选择一个题目并完成
四、评分标准
1、基本功能:
50分。
通过功能的实现情况、界面的完成情况、软件的实现情况进行评分。
2、设计报告及使用说明书: 20分 按照报告的要求进行评分。
3、回答问题:
4、平时考勤:
5、核分标准:
15分 15分 100分
(90~100为优、80~89为良、70~79为中、60~69为及格、,60以下为不及格)
五、参考书目
严蔚敏.《数据结构》(c语言版).清华大学出版社 刘玉龙.《数据结构与算法》.电子工业出版社.严蔚敏等《数据结构题集》(c语言版).清华大学出版社
徐孝凯.数据结构实用教程(c/c++描述).北京:清华大学出版社.陈慧南.数据结构(使用c++语言描述).南京:东南大学出版社.殷人昆, 陶永雷, 谢若阳等.数据结构(用面向对象方法与c++描述).北京:清华大学出版社.22
数据结构与算法分析课程设计篇二
《数据结构与算法》课程设计教学大纲(data structures & algorithms)
一、基本信息
课程编号:e1132107 课程类别:学科基础课必修课 适用层次:本科
适用专业:计算机科学与技术、网络工程、软件工程等 开课学期:3 学 分:2学分 学 时:2周 考核方式:考查
二、教学目的
数据结构与算法课程设计不仅是数据结构与算法课程的实践教学环节,而且是一门综合性实验项目。通过这个实验,培养学生综合运用数据结构基本知识和程序设计基本知识,解决实际问题,提高程序设计的能力和团队协作精神。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
1.学生通过实践掌握线性表、树、图等数据结构的存储结构及算法实现; 2.培养学生利用数据结构知识解决实际问题的能力;3.使学生初步具备查阅资料、分析设计、上机实现和书写科技 报告的能力。
三、基本要求
1.指导教师要在选题、设计、上机实现等诸环节上投入精力,加强指导、讨论和答疑的力度。尤其在选题上,要充分考虑学生目前所具有的知识水平、掌握的开发工具、以及综合设计能力的现状,使题目取材合理、大小适中、难易适度,使学生在完成设计工作后,能有所收获。2.参加课程设计的学生要珍惜机会、勤奋工作、勇于创新、勇于探索、勇于实践,虚心向指导教师请教,向同学学习,独立完成设计任务。
3.学生需保质、保量、保时间进度地提交规范的课程设计报告,审查由指导教师负责。
四、教学内容
1.主要内容:应用所掌握的线性表、树、图等数据结构知识解决实际问题。2.软件开发工具:c/c++、java。
3.课程设计题目:指导教师拟定(参考题目见附录1)
4.具体步骤:指导教师拟定设计题目,学生研究具体问题、进行需求分析、选择合适的数据结构、设计算法、编写并调试代码、书写文档材料、提交设计报告,最后,由指导教师验收并评定成绩。
5.设计内容及时间安排:第1-3天,选定题目,明确题目要求、确定数据结构、设计算法,并分析算法复杂度;第4-8天,编写程序、调试程序、测试程序;第9-10天,撰写设计报告,准备答辩(上机演示,回答教师提问)。6.设计报告书写要求:按照软件开发规范的要求书写设计报告(参见附录三报告书写格式);要求报告层次结构清晰、图表完整、语言通顺、字迹工整。7.验收要求:1)运行所设计的程序;2)回答有关问题;3)提交课程设计报告(打印或手写在实习报告册上);4)提交软盘(源程序)。(鼓励学生创新。对内容有创新者,成绩评定将适当提高)。
五、考核方法
学习成绩的评定方式:考查。
课程设计成绩评定 =平时出勤(20%)+设计报告(40%)+答辩(40%)通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。成绩分为优、良、中、及格和不及格五等。
六、教材与参考资料 1.建议教材:
[1] 数据结构(c++)版,王红梅、胡明、王涛编著,清华大学出版社,2005.7 [2] 自编教材
2.建议参考书目:
[1] 许卓群,杨冬青,唐世渭,张铭.数据结构与算法.高等教育出版社,2004.7 [2] 严蔚敏, 陈文博.数据结构及应用算法教程.清华大学出版社, 2001.2 [3] 朱晋蜀.数据结构(第一版).成都: 电子科技大学出版社, 2000.1 [4] clifford r著.张铭,刘晓丹译.数据结构与算法分析.电子工业出版社,1998.8 [5] 殷人昆等.数据结构(用面向对象方法与c++描述).清华大学出版社,1999.7 [6] ford w., topp structures with c++.清华大学出版社(影印版),1997.3
附录一
参考题目(可分若干组,每个学生选择其中一个题目)
1.商厦家电库存管理 2.排序算法的时间比较
3.使用哈希表技术判断两个源程序的相似性 4.以队列实现的仿真技术预测理发馆的经营状况 5.某公园导游图
6.用树型结构的搜索算法模拟因特网域名的查询 7.管道铺设施工的最佳方案选择 8.表达式分析与求值程序 9.安排教学计划
10.设计huffman 编码器与解码器 11.在国际象棋盘上马遍历问题 12.八皇后问题 13.民航售票系统 14.模拟旅馆管理系统中的床位分配和加收 15.银行业务活动的模拟
16.文字统计系统—文字研究助手 17.修道士野人问题 18.考试问题
19.计算机辅助考核系统 20.学籍管理系统
注:学生可以自选题目或选择指导老师拟定的题目。
附录二
开发步骤
1.分析题目的要求、目的; 2.选择适当的数据结构;
3.抽象数据类型的设计; 4.抽象数据类型的实现; 5.编写代码、上机调试; 6.总结验收、评价。
附录三 报告书写格式
1.问题描述
题目内容、基本要求 2.需求分析
软件的基本功能、输入/输出形式、测试数据要求 3.概要设计
所需的adt及作用、主程序流程及模块调用关系 4.详细设计
实现概要设计的数据类型、每个操作的伪码算法、主程序和其它模块的伪码算法、函数调用关系图 5.编码与调试分析
编码与调试过程中遇到的问题及解决的办法,还存在哪些没有解决的问题? 6.使用说明
简要说明程序运行操作步骤 7.测试结果
8.课程设计心得体会
数据结构与算法分析课程设计篇三
《数据结构》教学大纲
一、课程基本信息
课程名称:数据结构
总学时:64(理论课内学时48,上机课内学时16)课程设计:24 课程类型:必修课
考试形式:半开卷考试 讲课对象:计算机本科
建议教材:《数据结构》(c语言版)陈明 编著 清华大学出版社
课程简介:数据结构课程介绍如何组织各种数据在计算机中的存储、传递和转换。内容包括:数组、链接表、栈和队列、串、树与森林、图、排序、查找、索引与散列结构等。课程以结构化程序设计语言c语言作为算法的描述工具,强化数据结构基本知识和结构化程序设计基本能力的双基训练。为后续计算机专业课程的学习打下坚实的基础。
二、课程的教学目标
“数据结构”是计算机相关专业的一门重要专业基础课,是计算机学科的公认主干课。课程内容由数据结构和算法分析初步两部分组成。
数据结构是针对处理大量非数值性程序问题而形成的一门学科,内涵丰富、应用范围广。它既有完整的学科体系和学科深度,又有较强的实践性。通过课程的学习,应使学生理解和掌握各种数据结构(物理结构和逻辑结构)的概念及其有关的算法;熟悉并了解目前常用数据结构在计算机诸多领域中的基本应用。
算法分析强调最基本的算法设计技术和分析方法。要求学生从算法和数据结构的相互依存关系中把握应用算法设计的艺术和技能。
经过上机实习和课程设计的训练,使学生能够编制、调试具有一定难度的中型程序;以培养良好的软件工程习惯和面向对象的软件思维方法。
“数据结构”的前序课是《离散数学》、《c语言程序设计与算法初步》。
三、理论教学内容的基本要求及学时分配
1、序论(2学时)学习目标:熟悉各类文件的特点,构造方法以及如何实现检索,插入和删除等操作。
重点与难点:本章无。
知识点:数据、数据元素、数据结构、数据类型、抽象数据类型、算法及其设计原则、时间复杂度、空间复杂度。
2、线性表(4学时)
学习目标:
(1)了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。用前者表示的线性表简称为顺序表,用后者表示的线性表简称为链表;
(2)熟练掌握这两类存储结构的描述方法以及线性表的基本操作在这两种存储结构上的实现;
(3)能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合;
(4)结合线性表类型的定义增强对抽象数据类型的理解。
重点与难点:链表是本章的重点和难点。扎实的指针操作和内存动态分配的编程技术是学好本章的基本要求,分清链表中指针 p 和结点 *p 之间的对应关系,区分链表中的头结点、头指针和首元结点的不同所指以及循环链表、双向链表的特点等。
知识点:线性表、顺序表、链表、有序表。
3、栈和队列(4学时)
学习目标:
(1)掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们;
(2)熟练掌握栈类型的两种实现方法;
(3)熟练掌握循环队列和链队列的基本操作实现算法;(4)理解递归算法执行过程中栈的状态变化过程。
重点与难点:栈和队列是在程序设计中被广泛使用的两种线性数据结构,因此本章的学习重点在于掌握这两种结构的特点,以便能在应用问题中正确使用。
知识点:顺序栈、链栈、循环队列、链队列。
4、串(2学时)
学习目标:(1)理解串类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作;
(2)理解串类型的各种存储表示方法;(3)理解串匹配的各种算法。
重点和难点:相对于其它各个知识点而言,本章非整个课程的重点,鉴于串已是多数高级语言中已经实现的数据类型,因此本章重点仅在于了解串类型定义中各基本操作的定义以及串的实现方法,并学会利用这些基本操作来实现串的其它操作。本章的难点是理解实现串匹配的kmp算法的思想。
知识点:串的类型定义、串的存储表示、串匹配、kmp算法。
5、数组和广义表(4学时)
学习目标:
(1)理解数组类型的特点及其在高级编程语言中的存储表示和实现方法,并掌握数组在“以行为主”的存储表示中的地址计算方法;
(2)掌握特殊矩阵的存储压缩表示方法;
(3)理解稀疏矩阵的两类存储压缩方法的特点及其适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算所采用的处理方法。
重点和难点:本章重点是学习数组类型的定义及其存储表示。
知识点:数组的类型定义、数组的存储表示、特殊矩阵的压缩存储表示方法、随机稀疏矩阵的压缩存储表示方法。
6、树和二叉树(8学时)
学习目标:
(1)领会树和二叉树的类型定义,理解树和二叉树的结构差别;(2)熟记二叉树的主要特性,并掌握它们的证明方法;
(3)熟练掌握二叉树的各种遍历算法,并能灵活运用遍历算法实现二叉树的其它操作;
(4)理解二叉树的线索化过程以及在中序线索化树上找给定结点的前驱和后继的方法;
(5)熟练掌握二叉树和树的各种存储结构及其建立的算法;(6)学会编写实现树的各种操作的算法;
(7)了解最优树的特性,掌握建立最优树和赫夫曼编码的方法。
重点和难点:二叉树和树的遍历及其应用是本章的学习重点,而编写实现二叉树和树的各种操作的递归算法也恰是本章的难点所在。
知识点:树的类型定义、二叉树的类型定义、二叉树的存储表示、二叉树的遍历以及其它操作的实现、线索二叉树、树和森林的存储表示、树和森林的遍历以及其它操作的实现、最优树和赫夫曼编码。
7、图(8学时)
学习目标:
(1)领会图的类型定义;
(2)熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则;
(3)熟练掌握图的两种遍历算法;(4)理解各种图的应用问题的算法。
重点和难点:图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。
知识点:图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径。
8、查找(6学时)
学习目标:
(1)理解“查找表”的结构特点以及各种表示方法的适用性;(2)熟练掌握以顺序表或有序表表示静态查找表时的查找方法;
(3)熟悉静态查找树的构造方法和查找算法,理解静态查找树和折半查找的关系;
(4)熟练掌握二叉查找树的构造和查找方法;(5)理解二叉平衡树的构造过程;
(6)熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别;
(7)掌握描述查找过程的判定树的构造方法,以及按定义计算各种查找方法在等概率情况下查找成功时的平均查找长度。
重点和难点:本章重点在于理解查找表的结构特点及其各种表示方法的特点和适用场合。
知识点:顺序表、有序表、索引顺序表、静态查找树、二叉查找树、二叉平衡树、哈希表。
9、内部排序(6学时)
学习目标:
(1)理解排序的定义和各种排序方法的特点,并能加以灵活应用。排序方法有不同的分类方法,基于“关键字间的比较”进行排序的方法可以按排序过程所依据的不同原则分为插入排序、交换排序、选择排序、归并排序和计数排序等五类;
(2)掌握各种排序方法的时间复杂度的分析方法。能从“关键字间的比较次数”分析排序算法的平均情况和最坏情况的时间性能。按平均时间复杂度划分,内部排序可分为三类:o(n2)的简单排序方法,o(n*logn)的高效排序方法和o(d*n)的基数排序方法;
(3)理解排序方法“稳定”或“不稳定”的含义,弄清楚在什么情况下要求应用的排序方法必须是稳定的。
重点和难点:希尔排序、快速排序、堆排序和归并排序等高效方法是本章的学习重点和难点。
知识点:排序、直接插入排序、折半插入排序、表插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、2-路归并排序、基数排序、排序方法的综合比较。
10、文件(4学时)
学习目标:熟悉各类文件的特点,构造方法以及如何实现检索,插入和删除等操作。
重点和难点:本章重点在于了解各种文件的结构特点及其适用场合。知识点:顺序文件、索引文件、b-树、b+树、索引顺序文件、vsam文件、散列文件、多关键字文件。
四、实验教学内容的基本要求及学时分配
1、线性表(1学时)实验一 顺序表的应用 实验二 链表的应用
要求:理解线性表的定义及其运算;理解顺序表和链表的定义,组织形式,结构特征和类型说明;掌握在这两种表上实现的插入,删除和按值查找的算法;了解循环链表,双(循环)链表的结构特点和在其上施加的插入,删除等操作。
2、栈(0.5学时)实验三 栈的应用
要求:理解栈的定义,特征及在其上所定义的基本运算;掌握在两种存储结构上对栈所施加的基本运算的实现。
3、队列(0.5学时)实验四 队列的应用
要求:理解队列的定义,特征及在其上所定义的基本运算;掌握在两种存储结构上对队列所施加的基本运算的实现。
4、串(0.5学时)实验五 串的应用
要求:了解串的定义;理解和领会串的存储方式;掌握常用的串运算。
5、数组和广义表(0.5学时)实验六 稀疏矩阵的应用
要求:理解多维数组的结构特点和在内存中的两种顺序存储方式;理解并掌握矩阵和特殊矩阵元素在存储区中地址的计算;领会稀疏矩阵的压缩方式和简单运算;了解广义表的定义和基本运算。
6、树与二叉树(4学时)实验七 树与二叉树的应用
要求:理解树的定义,术语;领会并掌握树的各种存储结构;熟练掌握森林与二叉树间的相互转换;领会树和森林的遍历;了解树的简单应用。深刻理解二叉树的定义,性质及其存储方法;熟练掌握二叉树的二叉链表存储方式,结点结构和类型定义;理解并掌握二叉树的三种遍历算法;掌握二叉树的线索化方法;灵活运用二叉树的遍历方法解决相关的应用问题。
7、图(3学时)实验八 图的应用
要求:理解图的基本概念及术语;掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法;熟练掌握图的两种遍历(深度优先搜索遍历和广度优先搜索遍历)的算法思想,步骤,并能列出在两种存储结构上按上述两种遍历算法得到的序列;理解最小生成树的概念,能按prim算法构造最小生成树;领会并掌握拓扑排序,关键路径,最短路径的算法思想。
8、查找(3学时)实验九 顺序查找 实验十 折半查找 实验十一 哈希表的应用 实验十二 二叉排序树的综合练习要求:了解查找的基本思想及查找成功和不成功的概念;掌握在顺序表,有序表,索引表,散列表等上的查找方法和算法,并能求出相应的平均查找长度;理解并掌握二叉排序树,平衡二叉树b-树的各种算法。
9、排序(3学时)实验十三 插入排序 实验十四 选择排序 实验十五 排序综合练习
要求:领会排序的基本思想和基本概念;理解并掌握插入排序,冒泡排序,快速排序,直接选择排序,堆排序,归并排序和基数排序的基本思想,步骤,算法及时空效率分析;了解外排序的定义和基本方法。
五、大纲说明
1、课堂讲述的论题只是核心或有特色的知识内容,还有相当数量的篇章内容留给学生自学,所确定的自学部分内容亦属考查范围。
2、“数据结构”课注重上机训练,所有作业都必须配有规范的文档。上机训练由平时的上机训练和小学期的实训课程设计两部分组成。
3、课内学时安排说明:前8周每周4学时全为理论课,从第9周开始理论和上机为1:1,也即2学时理论,2学时上机训练。
4、本课强调能力的培养,期末采用半开卷考试(允许同学携带一页a4纸的总结资料)。本课成绩由平时作业、上机成绩(30%)和期末考试(70%)合成得到,有独到见解的作业予以适当加分。
5、主要参考书:
[1]《数据结构与算法教程》邹永林 周蓓 唐晓阳 杨剑勇 编著 机械工业出版社
[2]《数据结构(c语言版)》(含cd)严蔚敏 吴为民 编著 清华大学出版社
[3]《数据结构习题集(c语言版)》严蔚敏 编著 清华大学出版社
[4]《数据结构习题解析与实训》张世和 编著 清华大学出版社
数据结构与算法分析课程设计篇四
教学大纲
数据结构与算法(data structures)
计算机技术已成为现代化发展的重要支柱和标志,并逐步渗透到人类生活的各个领域。随着计算机硬件的发展,对计算机软件的发展也提出了越来越高的要求。由于软件的核心是算法,而算法实际上是对加工数据过程的描述,所以研究数据结构对提高编程能力和设计高性能的算法是至关重要的。
非数值计算问题的数学模型不再是传统的数学方程问题,而是诸如表、树、图之类的数据结构。因此,简单地说,数据结构是一门研究非数值计算的程序设计问题的学科,主要研究数据的逻辑结构、存储结构和算法。
一、教学目的与要求---了解数据的逻辑结构和物理结构;
教学要求在每章教学内容给出,大体上为三个层次:了解、掌握和熟练掌握。他们的含义大致为:了解是正确理解概念,掌握是学会所学知识,熟练掌握就是运用所学知识解决实际问题。
教学目的为:了解算法对于程序设计的重要性 ; 学习掌握基本数据结构的描述与实现方法,熟练掌握典型数据结构及其应用算法的设计。了解算法分析方法。
二、教学重点与难点--数据结构中基本概念和术语,算法描述和分析方法。
1、链表插入、删除运算的算法。算法时间复杂度
2、后缀表达式的算法,数制的换算
利用本章的基本知识设计相关的应用问题
3、循环队列的特点及判断溢出的条件
利用队列的特点设计相关的应用问题
4、串的模式匹配运算算法
5、二叉树遍历算法的设计
利用二叉树遍历算法,解决简单应用问题 哈夫曼树的算法
6、图的遍历
最小生成树
最短路径
7、二叉排序树查找
平衡树二叉树
8、堆排序
快速排序 归并排序
三、教学方法与手段-充分利用多媒体教学工具,配合黑板上的教学内容较难部分的算法实现过程演义
四、教学内容、目标与学时分配
教学内容 教学目标 课时分配
1、绪论
数据结构的内容
逻辑结构与存储结构
算法和算法分析
2、线性表
线性表的定义与运算
线性表的顺序存储
线性表的链式存储
3、栈
栈的定义与运算
栈存储和实现
栈的应用举例
4、队列
队列的定义与基本运算
队列的存储与实现
队列的应用举例
5、串
串的定义与基本运算
串的表示与实现
串的基本运算
6、树和二叉树
树的定义和术语
二叉树树的基本概念和术语 遍历二叉数和线索二叉树
二叉树的转换
二叉树的应用
哈夫曼树及其应用
7、图
图的定义和术语
图的存储结构
图的遍历算法
图的连通性
8、查找
查找的基本概念与静态查找 动态查找
哈希表
了解
了解
掌握
熟练掌握顺序表存储地址的计算
掌握单链表的结构特点和基本运算
掌握双链表的结构特点和基本运算
掌握栈的定义与运算
掌握栈的存储与实现
熟练掌握栈的各种实际应用
掌握队列的定义与基本运算
熟练掌握队列的存储与实现
掌握循环队列的特征和基本运算
了解串的逻辑结构
掌握串的存储结构
熟练掌握串的基本运算
了解
了解二叉树
熟练掌握二叉树定义和存储结构
了解二叉树的遍历算法
掌握
掌握哈夫曼的建立及编码
了解
了解
熟练掌握
熟练掌握
了解
熟练掌握
了解哈希表与哈希方法
4学时
1学时
1学时
2学时
8学时
2学时
2学时
4学时
8学时
2学时
2学时
4学时
6学时
2学时
2学时
2学时
6学时
2学时
2学时
2学时
12学时
2学时
2学时
2学时
2学时
2学时
2学时
8学时
2学时
2学时
2学时
2学时
8学时
4学时
2学时
2学时
9、排序
12学时 插入排序
熟练掌握基本思想
3学时 快速排序
了解各种内部排序方法和特点
3学时 选择排序
掌握
2学时 各种排序方法比较
掌握
2学时
实验内容 实验目标 课时分配 算法编程实验:
1、用指针方式编写程序 复习c(c++)语言指针、结构体等的用法
2、对单链表进行遍历
链表的描述与操作实现
3、栈及其操作
描述方法及操作
4、编写串子系统1 串的特点及顺序定长存储、操作、查找
5、编写串子系统 2 串的特点及顺序定长存储、操作、查找
6、编写树子系统1 二叉树的特点及存储方式、创建、显示、遍历等
7、编写树子系统2 二叉树的特点及存储方式、创建、显示、遍历等
8、图子系统
图的邻接矩阵的存储、遍历、广度/深度优先搜索
9、查找子系统
理解查找基本算法、平均查找长度、静态、动态查找等
五、考试范围与题型
1、考试范围与分数比例
1)绪论
12% 2)线性表
17% 3)栈
7% 4)队列
6% 5)串
4% 6)树和二叉树
14% 7)图
15% 8)查找
4% 9)排序
21%
2、考试题型与分数比例
1)名词解释
18% 2)判断对错
16% 3)填空
16% 4)单项选择
18% 5)应用
32%
六、教材与参考资料
1、教材: 实用数据结构基础(谭浩强)中国铁道出版社
2、参考资料: 数据结构(严蔚敏)清华大学出版社
数据结构实用教程(徐孝凯)清华大学出版社
(撰写人:
,审核人: 2学时 2学时 2学时 2学时 2学时 2学时 2学时 2学时 2学时)
数据结构与算法分析课程设计篇五
数据结构与算法课程设计题目
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人