1、1数据结构项目设计一、项目设计的性质、教学目的和要求数据结构是计算机软件的一门基础课程,计算机科学各领域及有关的应用软件都要用到各种类型的数据结构。学好数据结构对掌握实际编程能力是很有帮助的。为了学好数据结构,必须编写一些在特定数据结构上的算法,通过上机调试,才能更好地掌握各种数据结构及其特点,同时提高解决计算机应用实际问题的能力。二、设计要点1设计和调试过程要规范化。 需求分析将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。给出实现功能
2、的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。对有些题目提出算法改进方案,比较不同算法的优缺点。如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法。 源程序(可以是一组源程序,即详细设计部分)源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环。2课程设计实习报告的书写格式 设计题目(任选其一)运行环境(软、硬件环境)算法设计的思想算法的流程图算法设计分析源代码运行结果分析收获及体会3实施方式2可设 3-4 人一题,安排在数据结构课程开课学期布置
3、题目,然后在期末两周时间内完成。三设计要求学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。课程设计按照教学要求需要两周时间完成,两周中每天至少要上 3-4 小时的机来调试 C 语言设计的程序,总共至少要上机调试程序 30 小时。为保证质量,需要每个学生将每天的上机调试程序的时间记录下来,作为评判成绩的标准之一。四设计题目1、 运动会分数统计 问题描述:参加运动会有 n 个学校,学校编号为 1n。比赛分成 m 个男子项目,和w 个女子项目。项目编号为男子 1m,女子 m+1m+w。不同的项目取前五名或前三名积分;取前五名的
4、积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20) 功能要求:1).可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号、学校总分、男女团体总分排序输出;4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20 以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但
5、是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在 c 语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用:1)全部合法数据;2)整体非法数据;3)局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;32、 一元多项式计算 问题描述:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入; 在上交资料中请写明:存储结构、多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;3、 订票系统 问题描
6、述:通过此系统可以实现如下功能:1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。5)修改航班信息:当航班信息改变可以修改航班数据文件 要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设
7、计程序完成功能;4、 迷宫求解 问题描述:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出; 要求:在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;5、 文章编辑 问题描述:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过 80 个字符,共 N 行。 要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。4 存储结构:使用线性表,分别用几个子函
8、数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式:(1)分行输出用户输入的各行字符;(2)分 4 行输出“全部字母数“、“数字个数“、“空格个数“、“文章总字数“(3)输出删除某一字符串后的文章;6、马踏棋盘 问题描述:将马随机放在国际象棋的 88 棋盘 Bord88的某个方格中,马按走棋规则进行移动。要求每个方格上只进入一次,走遍棋盘上全部 64 个方格。编制非递归程序,求出马的行走路线 ,并按求出的行走路线,将数字1,2,64 依次填入 1 个 88 的方阵,输出之。 测试数据:由读者指定,可自行指定一个马的初始位置。 实现提示:每次在
9、多个可走位置中选择一个进行试探,其余未曾试探过的可走位置必须用适当结构妥善管理,以备试探失败时的“回溯”(悔棋)使用。7、校园导游咨询 问题描述: (1)设计你的学校的校园平面图,所含景点不少于 10 个。以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。 (3)为来访客人提供图中任意景点相关信息的查询。 测试数据:由读者根据实际情况指定。 实现提示:一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。8、编制一个求解迷宫通路
10、的图形界面演示程序。 问题描述:51) 输入一个任意大小的迷宫,任设起点、终点、障碍,用栈求出一条走出迷宫的路径,并显示在屏幕上。2) 根据用户界面提示,用键盘输入。Home 键设置迷宫起点,End 键设终点,上下左右箭头键移动,Enter 键添加墙,Del 键删除墙,完成后按 F9 键演示,Esc 键退出。3)橙色的实心小圆圈表示起点,绿色实心圆圈表示终点,空心圆圈表示足迹,红色方块表示墙。4)本程序只求出一条成功的通路,但若对求解函数 MazePath 稍加更改即可求得全部路径。此外,因受图形界面限制,不能保存或载入测试文件(此功能可在 Maze_text 中实现)。5)当未输入起点时,消
11、息显示“Error: You must set Startplace.”;未输入终点时,显示“Error: You must set Endplace.” 找到路径时,屏幕显示足迹,并在消息框出现 Path found,否则消去足迹,显示 Path not found.9一元稀疏多项式计算器 问题描述:一元多项式简单计算器的基本功能是:(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列 n,c1,e1,c2,e2,cn,en,其中n 是多项式的项数,ci 和 ei 分别是第 I 项的系数和指数,序列指指数降序排列;(3)多项式 a 和 b 相加,建立多项式 a+b;(4)多项式 a
12、和 b 相减,建立多项式 a-b。 实现提示:用带头结点的单链表存储多项式,多项式的项数存在头结点。10算术表达式求值演示 问题描述:表达式求值是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。 基本要求以字符序列的形式从终端上输入语法正确的、不含变量的整数表达式。利用教材中给出的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教材例 3-1 演示在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。 实现提示:(1)设置运算栈和运算数栈辅助分析算符优先关系。(2)在输入表达式的字符序列的同时,完成运算符和运算数(整
13、数)的识别处理,以及相应的运算。(3)在识别出运算数的同时,要将其字符序列形式转换成整数形式。 选作内容:(1)扩充运算符集,如增加乘方、单目减、赋值等运算;6(2)运算量可以是变量;(3)运算量可以是实数类型;(4)计数器的功能和仿镇界面。11稀疏矩阵运算器 问题描述:稀疏矩阵是指那些多数元素为 0 的矩阵。利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本原酸的运算器。 基本要求:以“带行逻辑链接信息”的三元组顺序表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结构的矩阵则以通常的阵列形式列出。 实现提示:
14、(1)首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否匹配。可设矩阵的行数和列数均不超过 20。(2)程序可以对三元组的输入顺序加以限制,例如,按行优先。注意研究教科书中的算法,以便提高计算效率。(3)在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可以用二维数组存放。12图书管理 问题描述:图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。 基本要求:(1)每种书的登记内容至少包括书号、书名、作者、现存量和总库存量等。(2)作为演示系统,不必使用文件,全部数
15、据可以都在内存存放。但是由于上述四项基本业务活动都是通过书号(即关键字)进行的,所以要用 B 树对书号尽力索引,以获得高效率。(3)系统应实现的操作及功能定义如下:采编入库:新购入一种书,经分类和确定书号后登记到图书帐目中去。如果这种书在帐目中已有,则只将总库存量增加。 清除库存:某种书已无保留价值,将它从图书帐目中注销。 某种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。 归还:注销对借阅者的登记,改变该书的现存量。 显示:以凹入表的形式显示 B 树。这个操作是为了调试和维护的目的而设置的。下列 B 树的打印格式如下所示:713:通讯录的制作 问题描述:编写一个通讯录管理系统
16、,本系统应完成一下几方面的功能: 1 输入信息 enter(); 2 显示信息 display( ); 3 查找以姓名作为关键字 search( ); 4 删除信息 delete( ); 5 存盘 save ( ); 6 装入 load( ) ; 基本要求:用双向链表作数据结构。 1.每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP) 国家( STATE)几项 2.作为一个完整的系统,应具有友好的界面和较强的容错能力 五、参考书目数据结构 C 语言 严蔚敏 清华大学出版社c 语言程序设计 谭浩强 清华大学出版社数据结构 高教出版社 数据结构习题 李春保 清华大学出版社数据结构习题 严蔚敏 清华大学出版社c 语言与数据结构 王立柱 清华大学出版社数据结构(C 语言篇)习题与解析李春葆 清华大学出版社60302050,5270,7268711008