1、1数据结构课程设计课程设计时间:17 周一、课程设计的目的数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的: 了解并掌握数据结构与算法的设计方法,掌握数组、链表、队列、堆栈、树
2、等基本数据结构,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。二、课程设计的基本要求1、独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。2、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。3、按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成,其中包括
3、:a)需求分析:对题目进行分析,将问题转换成计算机语言描述,选择合适的数据结构,明确每个模块的功能要求。b)概要设计在此说明每个部分的算法设计思想(可以是描述算法的流程图) ,每个程序中使用的存储结构设计说明(如果指定存储结构,请写出该存储结构的定义) 。c)详细设计各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。d)调试分析2测试数据,测试输出的结果,时间和空间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?) ,算
4、法的改进设想等。e)课程设计总结总结一般应包括:需求分析说明、功能模块和算法设计思想说明和程序调试报告。对所做课程设计程序算法优劣度的分析、是否可以改进算法,在哪些方面改进?课程设计过程的收获、在课程设计过程中对数据结构课程的认识等内容。4、课程设计提交内容:a) 课程设计结果要进行检查和演示,程序源代码和文档文件等在课程设计结束后上传服务器,作为考核内容的一部分。b) 课程设计报告。可以结合 3 中的每个步骤对各部分分别描述。所有内容打包成文件夹,文件夹内应包含:源代码、可执行文件、PPT、课程设计报告等。三、上交作业及成绩评定1、上交要求按照课程设计提交内容准备,其中课程设计报告、PPT
5、以电子版提交到服务器相应目录(ftp:/202.204.125.41/yangmeng/homework/数据结构/数媒 11-1(或 2)/课程设计)下。2、评分标准根据完成任务的情况,每人在第 17 周周五以 PPT 和源代码执行文件形式在机房进行系统演示,面向全体同学讲解。课程设计报告书的质量、演示情况和课程设计过程中的工作态度等按照 30%、50%、20%加权综合打分。上机程序检查未通过者、最终无设计报告者或严重抄袭他人设计者,成绩为不及格。备注: 评分时根据各题目难度确认难度系数,由得分和难度系数相乘得出最终分数。 每两人之间题目的内容不得雷同,否则成绩最高为及格。四、课程设计内容:
6、一、敢死队问题 (示例题,不可选)有 M 个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到 5 时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第 5 时,此战士接着去执行任务。以此类推,直到任务完成为止。假设排长为 1 号,请你设计一个程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。二、设计一个航空客运定票系统。基本要求如下: 1.031、每条航线所
7、涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几) 、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级 1,2 或 3)以及等候替补的客户名单(包括姓名、所需数量) 。2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号) ,为客户办理退票手续,然后
8、查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。3、实现提示:两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。由于预约人数无法预计,队列也应以链表作为存储结构。三、校园导游咨询(为来访的客人提供各种信息服务)1.01、基本要求:1)参考校园设计平面图,在校园景点选 10 个左右景点。以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。2)为来访客人提供图中任意景点相关信息的查询。3)
9、为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。2、实现提示:一般情况下,校园的道路是双向通行的,可设计校园平面图是一个无向网。顶点和边均含有相关信息。四 、 停 车 场 管 理 问 题 1.0设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端) ,若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大
10、门外,其它车辆再按原次序进入车场。每辆停放在车场的车在它不离开停车场时必须按它停留的时间长短交费。试为停车场编制按上述要求进行管理的模拟程序。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离开”信息,汽车牌照号码以及到达或离去的时刻。与每一组输入数据信息相对应的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费) 。栈以顺序结构实现,队列以链表结构实现。 (提示:需另设一个栈,临时停放为给要离去的汽车让路从停车场退
11、出来的汽车,也用顺序存储结构实现。 )测试数据设 n,输入数据为:( ,) , ( ,) , ( ,) , ( ,) , ( ,) , ( ,) , ( ,) , ( ,) 。其中:表示到达, 表示离去, 表示输入结束。4其中:( ,)表示 1 号牌照车在 5 这个时刻到达,而( ,)表示 1 号牌照车在 15 这个时刻离去。五、全国交通咨询模拟 1.1【问题描述】处于对不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。【
12、基本要求】 (1)提供对城市信息进行编辑(如:添加或删除)的功能。(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。(4)旅途中耗费的总时间应该包括中转站的等候时间。(5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。【测试数据】【实现提示】 (1)对全国城市交通图和班车时刻表及飞机航班表的编辑,应该提供文件形式输入和键盘输
13、入两种方式。飞机航班表的信息应包括:起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如:对于从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至各段的出发时间、到达时间和票价信息。(2)以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。六、编制一个求解迷宫通路的图形界面演示程序。 1.0用矩阵 MN 表示一个迷宫,0 和 1 分别表示通路和墙壁。试求出从入口点到达出口点的一条通路。呼和浩特北京大连西宁武汉南昌842137674825672徐州397乌鲁木齐 哈尔滨长
14、春沈阳天津郑州西安兰州成都上海昆明 贵阳 株州 福州柳州 广州深圳南宁189221611456681100 967639 907349676 511242305704651622367409255607 6751405345七、按实现提示内容创建线索二叉树,完成后使用中序遍历将二叉树的内容输出。 1.1【实现提示】创建二叉树结点数据的策略有三个,如下:将第一个要创建的元素插入成为根节点。将元素值与结点值比较,如果元素值大于结点值,将此元素送往结点的右儿子结点,如果右儿子结点不是空的,需要重复比较,否则创建结点将元素值插入。如果元素值小于结点值,将此元素送往结点的左儿子结点,如果左儿子结点不是空
15、的,需要重复比较,否则创建结点将此元素值插入。例如:二叉树结点值输入的数据顺序是 5,6,4,8,2,3,7,1,9。按照上述策略创建的二叉树,如下图所示:八、商店存货管理系统 1.0建立一个商店存货管理系统,要求每次出货时取进货时间最早且最接近保质期中止时间的货物。分步实施:1 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2 完成最低要求:建立一个文件,包括 5 个种类的货物情况,能对商品信息进行扩充(追加) ,修改和删除以及简单的排序;3 进一步要求:扩充商品数量,以及完成系统查询功能。 1.1九、订票系统 1.1问题描述:通过此系统可以实现如下功能:1)录入:可以录入航
16、班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。5)修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;6十、个人帐簿管理系统设计 1.0个人
17、帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。十 一 、 编 写 一 个 五 子 棋 的 游 戏 程 序 。 1.2实现人与机对下的功能。要求:1、要有图形棋盘;2、设计输、赢判断规则函数;3、给出下棋过程(电脑能智能判断,中级难度以上) 。十 二 、 简 单 的 职 工 管 理 系 统 1.01.问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。2.要求职工对象包括工号、姓名、性别、出生年月、工作年月、学历
18、、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式存入职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。3.实现提示(1)职工对象数不必很多,由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的“工号“按顺序进行排序。(3)对排序后的职工对象进行查询、增加、删除、修改等操作。十 三 、 教 学 计 划 编 制 问 题 1.2大学的每个专业都要制定教学计划。假设任何专业都
19、有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。基本要求(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占 3 位的字母数字串)、学分和直接先修课的课程号。(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。
20、计划的表格格式自行设计。测试数据学期总数:6;学分上限:10;该专业共开设 12 门课,课程号从 C01 到 C12,学分顺7序为 2,3,4,3,2,3,4,4,7,5,2,3。先修关系如下:课程编号 课程名称 先决条件C1 程序设计基础 无C2 离散数学 C1C3 数据结构 C1,C2C4 汇编语言 C1C5 语言的设计和分析 C3,C4C6 计算机原理 C11C7 编译原理 C5,C3C8 操作系统 C3,C6C9 高等数学 无C10 线性代数 C9C11 普通物理 C9C12 数值分析 C9,C10,C1实现提示可设学期总数不超过 12,课程总数不超过 100。如果输入的先修课程号不在
21、该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关系。十四、建通讯录 1.2【问题描述】设计散列表实现通讯录查找系统。【基本要求】(1) 设每个记录有下列数据项:电话号码、用户名、地址;(2) 从键盘输入各记录,分别以电话号码为关键字建立散列表;(3) 采用二次探测再散列法解决冲突;(4) 查找并显示给定电话号码的记录;(5) 通讯录信息文件保存;(6) 要求人机界面友好,使用图形化界面;【选做内容】(1) 系统功能的完善;(2) 设计不同的散列函数,比较冲突率;(3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。(4) 使用汉字
22、显示。【实现提示】主函数:根据选单的选项调用各函数,并完成相应的功能。Menu()的功能:显示英文提示选单。Quit()的功能:退出选单。Create()的功能:创建新的通讯录。Append()的功能:在通讯录的末尾写入新的信息,并返回选单。Find():查询某人的信息,如果找到了,则显示该人的信息,如果没有则提示通讯录中没有此人的信息,并返回选单。Alter()的功能:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。8Delete()的功能:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。List()的功能:显示通讯录中的所有记
23、录。Save()的功能:保存通讯录中的所有记录到指定文件中。Load()的功能:从指定文件中读取通讯录中的记录。十五、银行业务模拟: 1.1银行业务模拟问题描述:客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应的有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立即排入第二队等候,直至满足时才离开银行,否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列的客户,对能满足的申请者予以满足,不能满足者重
24、新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。 十六、图书管理基本业务模拟 1.11) 书的登记内容包括书号、书名、著作者、现存量和库存量;2) 建立索引表(线性表)以提高查找效率;3)主要功能如下:输出形式:能按书号、书名、著作者查找库存
25、的书籍信息能按学生的借书证号显示学生信息和借阅信息书籍入库借书功能实现还书功能实现十七、学生成绩管理系统 1.15现有学生成绩信息文件 1(1.txt) ,内容如下姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47. a) 采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;b) 借阅:如果一种书的现存量大于 0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;c) 归还:注销对借阅者的登记,改变该书的现存量。9学生成绩信息文件
26、 2(2.txt),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77. (文件内容可根据测试要求,自行制定)试编写一个管理系统,要求如下:1、 实现对两个文件数据进行合并,生成新文件 3.txt2、 抽取出三科成绩中有补考的学生并保存在一个新文件 4.txt3、 对合并后的文件 3.txt 中的数据按总分降序排序4、 输入一个学生学号后,能查找到此学生的其它信息并输出结果。采用多种算法实现者,可加分。十八、哈希表设计 1.1问题描述 针对自己的班集体中的“
27、人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。基本要求 假设人名为中国姓名的汉语拼音形式。待填入哈希表的人名共有 30 个,取平均查找长度的上限为 2。构造哈希函数,用链表法处理冲突。测试数据读取熟悉的 30 个人的姓名作测试。十九、文章编辑系统 1.3实现一个文章编辑系统,可以统计一页文字中文字、数字及空格的个数,以提高对串的应用能力基本功能:1. 静态存储一页文章保存在文件中,每行最多不超过 80 个字符,共 N 行2. 分别统计出其中英文字母数和空格数及整篇文章总字数3. 统计某一字符串在文章中出现的次数,并输出该次数4. 用指定的字符串替换某一子串基本要求:1. 存储结构使用线性表,分别用几个子函数实现相应的功能2. 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号3. 输出形式:分行输出用户输入的各行字符;分 4 行输出“全部字母数“、“ 数字个数“、 “空格个数“、“ 文章总字数“;输出删除某一字符串后的文章;输出替换某一字符串后的文章4. 界面要友好,输入有提示,体现人性化5. 源程序代码清晰、有层次6. 用户输入非法数据时,系统要及时给出警告信息。