数据结构课程设计题目及报告范例

上传人:lis****210 文档编号:111325929 上传时间:2022-06-20 格式:DOCX 页数:40 大小:76.21KB
收藏 版权申诉 举报 下载
数据结构课程设计题目及报告范例_第1页
第1页 / 共40页
数据结构课程设计题目及报告范例_第2页
第2页 / 共40页
数据结构课程设计题目及报告范例_第3页
第3页 / 共40页
资源描述:

《数据结构课程设计题目及报告范例》由会员分享,可在线阅读,更多相关《数据结构课程设计题目及报告范例(40页珍藏版)》请在装配图网上搜索。

1、1. 运动会分数统计【问题描述】参加运动会的n个学校编号为1n。比赛分成m个男子项目和w个女子项目,项目编号分别为1m和m+1m+wo由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。【基本要求】1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。4) 数据存入文件并能随时查询规定:输入数据形式和范围:可以输入学校的名称,运动项目

2、的名称输出形式:有中文提示,各学校分数为整型。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。测试数据:【测试数据】要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。例如,对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据【实现提示】可以假设nw20,me30,w20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校

3、名(和成绩)。【选作内容】允许用户指定某项目采取其他名次取法。2. 集合的并、交和差运算【问题描述】编制一个能演示执行集合的并、交和差运算的程序。【基本要求】(1) 集合的元素限定为小写字母字符a.z。(2) 演示程序以用户和计算机的对话方式执行。【测试数据】Set1=magazine,Set2=paper,SetluSet2=aegimnprz,SetlnSet2=ae,Set1-Set2=gimnz。Set1=012oper4a6tion89,Set2=errordata,Set1uSet2=adeinoprt,SetlnSet2=aeort,Set1-Set2=inp。【实现提示】以有序

4、链表表示集合。【选作内容】(1) 集合的元素判定和子集判定运算。(2) 求集合的补集。(3) 集合的混合运算表达式求值。(4) 集合的元素类型推广到其他类型,甚至任意类型。一元稀疏多项式计算器【问题描述】设计一个一元稀疏多项式简单计算器。【基本要求】一元稀疏多项式简单计算器的基本功能是:(1) 输入并建立多项式;(2) 输出多项式,输出形式为整数序列:n,ci,ei,C2,氏,Cn,en,其中n是多项式的项数,Ci和8,分别是第i项的系数和指数,序列按指数降序排列;(3) 多项式a和b相加,建立多项式a+b;(4) 多项式a和b相减,建立多项式a-b。【测试数据】8899(1) (2x+5x8

5、+(75x8+11x9)=(+11x9+2x+7)(6x-3x+(-6x-3+x2+23453425=+x+x+x+x+x)+(-xx)=(1+x+x+x)33(x+x3)+(-xx3)=0100100200100200(x+x100)+(x100+x200)=(x+2x100+x200)2323(6)(x+x+x)+0=x+x+x(7)互换上述测试数据中的前后两个多项式【实现提示】用带表头结点的单链表存储多项式。【选作内容】(1) 计算多项式在x处的值。(2) 求多项式a的导函数a。(3) 多项式a和b相乘,建立乘积多项式ab。(4) 多项式的输出形式为类数学表达式。例如,多项式-3x8+6

6、x318的输出形式为3x86x318,x15+(8)x714的输出形式为x158x714。注意,数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为X8,项一1x3的输出形式为x3。(5) 计算器的仿真界。池塘夜降彩色雨【问题描述】设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。【基本要求】(1) 雨点的空中出现位置、降范过程的可见程度、入水位置、颜色、最大水圈等,都是随机确定的;(2) 多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。【测试数据】适当调整控制雨点密度、最大水圈和状态变化的时间间隔等参数。【实现提示】(

7、1) 每个雨点的存在周期可分为三个阶段:从天而降、入水有声和圈圈微澜,曲:*需要一个记录存储其相关参数、当前状态和下一状态的更新时刻。在图形状态编程。雨点下降的可见程度应是断断续续、依稀可见;圈圈水波应是由里至外逐渐扩大和消失。(2) 每个雨点发生时,生成其记录,并预置下一个雨点的发生时间。(3) 用一个适当的结构管理当前存在的雨点,使系统能利用它按时更新每个雨点的状态,一旦有雨点的水圈全部消失,就从结构中删去【选作内容】(1)增加“电闪雷鸣”景象。(2)增加风的效果,展现“风雨飘摇”的情景。(3) 增加雨点密度的变化:时而“和风细雨”,时而“暴风骤雨”。(4) 将“池塘”改为“荷塘”,雨点滴

8、在荷叶上的效果是溅起四散的水珠,响声也不同。3. 银行业务模拟【问题描述】客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队

9、列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。【基本要求】利用动态存储结构实现模拟。【测试数据】一天营业开始时银行拥有的款额为10000(元),营业时间为600(分钟)。其他模拟参量自定,注意测定两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户

10、的交易时间很短。【实现提示】事件有两类:到达银行和离开银行。初始时银行现存资金总额为total。开始营业后的第一今事件是客户到达,营业时间从0到closetime。到达事件发生时随机地设置此客户的交易时间和距下一到达事件之间的时间间隔。每个客户要办理的款额也是随机确定的,用负值和正值分别表示第一类和第二类业务。变量total,closetime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。两个队列和一个事件表均要用动态存储结构实现。注意弄清应该在什么条件下设置离开事件,以及第二个队列用怎样的存储结构实现时可以获得较高的效率。注意:事件表是按时间顺序有序的。【选作内容】自己实现动态

11、数据类型。例如对于客户结点,定义pool为CustNodepoolfMAX;马踏棋盘【问题描述】设计一个国际象棋的马踏遍棋盘的演示程序。【基本要求】7. 将马随机放在国际象棋的8X8棋盘Board88的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,,64依次填入一个8X8的方阵,输出之魔王语言解释【问题描述】有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:(2)(12

12、n)nn11在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。【基本要求】用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。魔王语言可含人的词汇。(1) BtAdA(2) Asae【测试数据】B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。tdsaezgxnh天地上一只鹅追赶下蛋恨【实现提示】将魔王的

13、语言自右至左进栈,总是处理栈顶字符。若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈其他情形较简单,请读者思考应如何处理。应首先实现栈和队列的基本操作。【选作内容】(1)由于问题的特殊性,可以实现栈和队列的顺序存储空间共享。(2)代换变量的数目不限,则在程序开始运行时首先读入一组第一种形式的规则,而不是把规则固定在程序中(第二种形式的规则只能固定在程序中)。8. 航空客运订票系统【问题描述】航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。【基本要求】(1)每条航线所涉及的信息有

14、:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);(2)系统能实现的操作和功能如下: 录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中; 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; 承办退票业务:根据客户提供的

15、情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。【测试数据】由读者自行指定。【实现提示】两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候

16、替补的客户名单域为分别指向队头和队尾的指针。【选作内容】当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其他航线情况。读者还可充分发挥自己的想象力,增加你的系统的功能和其他服务项目。药店的药品销售统计系统【问题描述】设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。【基本要求】在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药

17、品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。文学研究助手【问题描述】文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为文学研究助手。【基本要求】英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。【测试数据】以你的C源程序模拟英文小说,C语言的保留字集作为待

18、统计的词汇集。【实现提示】约定小说中的词汇一律不跨行。这样,每读入一行,就统计每个词在这行中的出现次数。出现位置所在行的行号可以用链表存储。若某行中出现了不止一次,不必存多个相同的行号。如果读者希望达到选做部分(1)和(2)所提出的要求,则首先应把KM算法改写成如下的等价形式,再将它推广到多个模式的情形。i=1;j=1;while(i!=+1&j!=十1)while(j!=0&i!=j)j=nextj;文本格式化【问题描述】输入文件中含有待格式化或称为待排版的文本,它由多行的文字组成,例如一篇英文文章。每一行由一系列被一个或多个空格符所隔开的字组成,任何完整的字都没有被分割在两行(每行最后一个

19、字与下一行的第一个字之间在逻辑上应该由空格分开),每行字符数不超过80。除了上述文本类字符之外,还存在着起控制作用的字符:符号指示它后面的正文在格式化时应另起一段排放,即空一行,并在段首缩入8个字符位置。自成一个字。一个文本格式化程序可以处理上述输入文件,按照用户指定的版面规格重排版面z实现页内调整、分段、分页等文本处理功能,排版结果存入输出文本文件中。试写一个这样的程序。【基本要求】(1) 输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。(2) 在输出文件中,任何完整的字仍不能分割在两行,行尾不齐没关系,但行首要对齐(即左对齐)。(3) 如果所要求的每页页底所空行数不少于3,则将

20、页号印在页底空行中第2行的中间位置上,否则不印。(4) 版面要求的参数要包含:页长(PageLength)一每页内文字(不计页号)的行数。页宽(PageWedth)一一每行内文字所占最大字符数。左空白(LeftMargin)-一一每行文字前的固定空格数。头长(HeadingLength)一一每页页顶所空行数。脚长(FootingLength)一每页页底所空行数(含页号行)。起始页号(StartingPageNumber)一一首页的页号。【测试数据】略。注意在标点之后加上空格符。【实现提示】可以设:左空白数x2+页宽=160,即行印机最大行宽,从而只要设置这样大的一个行缓冲区就足够了,每加工完一

21、行,就输出一行。如果输入文件和输出文件不是由程序规定死,而是可由用户指定,则有两种做法:一是像其他参量一样,将文件名交互地读入字符串变量中;更好的方式是让用户通过命令行指定,具体做法依机器的操作系统而定应该首先实现GetAWord(w)这一操作,把诸如行尾处理、文件尾处理、多余空格符压缩等一系列低级事务留给它处理,使系统的核心部分集中对付排版要求。每个参数都可以实现缺省值设置。上述排版参数的缺省值可以分别取56,60,10,5,5和1。【选作内容】(1) 输入文件名和输出文件名要由用户指定。(2) 允许用户指定是否右对齐,即增加一个参量右对齐否(RightJustifying),缺省值可设为y

22、(yes)。右对齐指每行最后一个字的字尾要对齐,多余的空格要均匀分布在本行中各字之间。(3) 实现字符填充(characterstuffing)技术。作为分段控制符之后,限制了原文中不能有这样的字。现在去掉这一限制:如果原文中有这样的字,改用两个并列起来表示一个字。当然,如果原文中此符号夹在字中,就不必特殊处理了。(4) 允许用户自动按多栏印出一页。简单行编辑程序【问题描述】文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不

23、总能实现。一种解决方法是逐段地编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按照这种方法实现一个简单的行编辑程序。设文件每行不超过320个字符,很少超过80个字符。【基本要求】实现以下4条基本编辑命令:(1) 行插入。格式:i行号回车文本.回车将文本插入活区中第行号行之后。行删除。格式:d行号1空格亍号2回车删除活区中第行号1行(到第行号2行)。例如:d10和d1014。活区切换。格式*回车将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。(2) 活区显示。格式:p回车逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。印出的每一行要

24、前置行号和一个空格符,行号固定占4位,增量为1。各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号可以等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。【测试数据】自行设定,注意测试将活区删空等特殊情况。【实现提示】设活区的大小用行数ActiveMULen(可设为100)来描述。考虑到文本文件行长通常为正态分布,且峰值在60到70之间,用320xActiveMULen大小的字符数组实现存储将造成大量浪费。可以以标准行块为单位为各行分配存储,每个标准行块可含81个字符。这些行块可以组成一个数组,也可以利用动态链表连接起来。一行文字可能占多个行块。行尾可用一个特

25、殊的ASCII字符(如(012)8)标识。此外,还应记住活区起始行号。行插入将引起随后各行行号的顺序下推。(1) 初始化函数包括:请用户提供输入文件名(空串表示无输入文件)和输出文件名,两者不能相同。然后尽可能多地从输入文件中读入各行,但不超过ActiveMULen-LX的值可以自定,例如20。在执行行插入命令的过程中,每接收到一行时都要检查活区大小是否已达ActiveMaxLen。如果是,则为了在插入这一行之后仍保持活区大小不超过ActiveMaxLen应将插入点之前的活区部分中第一行输出到输出文件中;若插入点为第一行之前,则只得将新插入的这一行输出。(2) 若输入文件尚未读完,活区切换命令

26、可将原活区中最后几行留在活区顶部,以保持阅读连续性;否则,它意味着结束编辑或开始编辑另一个文件。(3) 可令前三条命令执行后自动调用活区显示。【选作内容】(1) 对于命令格式非法等一切错误作严格检查和适当处理。加入更复杂的编辑操作,如对某行进行串替换;在活区内进行模式匹配等,格式可以为S行号串1串2回车和m$x回车。串基本操作的演示【问题描述】如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试实现串类型,并写一个串的基本操作的演示系统。【基本要求】在教科书节用堆分配存储表示实现HString串类型的最小操作子集的基础上,实现

27、串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数)。参数合法性检查必须严格。利用上述基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下:(1) 赋值。格式:A串标识回车用串标识所表示的串的值建立新串,并显示新串的内部名和串值。例:AHi!(2) 判相等。格式:E串标识1串标识2回车若两串相等,则显示EQUAL,否则显示UNEQUAL。(3) 联接。格式:C串标识1串标识2回车将两串拼接产生结果串,它的内部名和串值都显示出来。求长度。格式:L串标识回车显示串的长度。(3) 求子串。格式:S串标识+数1+数2回车如果参

28、数合法,则显示子串的内部名和串值。数不带正负号。(4) 子串定位。格式:I串标识1串标识2回车显示第二个串在第一个串中首次出现时的起始位置。串替换。格式:R串标识1串标识2串标识3回车将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。(5) 显示。格式:P回车显示所有在系统中被保持的串的内部名和串值的对照表。(6) 删除。格式:D内部名回车删除该内部名对应的串,即赋值的逆操作。(7) 退出。格式:Q回车结束程序的运行。在上述命令中,如果一个自变量是串,则应首先建立它。基本操作函数的结果(即函数值)如果是一个串,则应在尚未分配的区域内新辟空间存放。【测试数据】自定

29、。但要包括以下几组:(1) E回车,应显示EQUAL。(2) Eabcabed回车,应显示UNEQUAL(3)CCCC回车,应显示。(4)Ia回车,应报告:参数非法。(5)Raaaaab,应显示ba(6)Raaabcaaab,应显示aabaabaabbc。(7)RFaaaaaaaaaaaaab,应显示abab。实现提示】【选作内容】(1) 串头表改用单链表实现。(2) 对命令的格式(即语法)作严格检查,使系统既能处理正确的命令,也能处理错误的命令。注意,语义检查(如某内部名对应的串已被删除而无定义等)和基本操作参数合法性检查仍应留给基本操作去做。(3) 支持串名。将串名(可设不超过6个字符)存

30、于串头表中。命令(1)(3)(5)要增加命令参数结果串名;命令(7)中的串标识1改为串名,并用此名作为结果串名,删除原被替串标识,用串名代替串标识定义和命令解释中的内部名。每个命令执行完毕时立即自动删除无名串。程序分析【问题描述】读入一个C程序,统计程序中代码、注释和空行的行数以及函数的个数和平均行数,并利用统计信息分析评价该程序的风格。【基本要求】(1) 把C程序文件按字符顺序读入源程序;(2) 边读入程序,边识别统计代码行、注释行和空行,同时还要识别函数的开始和结束,以便统计其个数和平均行数。程序的风格评价分为代码、注释和空行三个方面。每个方面分为A,B,C和D四个等级,等级的划分标准是A

31、级B级C级级代码(函数平均长度)1015行89或1620行57或2124行24行注释(占总行数比率)1525%1014或2630%59或3135%35%空行(占总行数比率)1525%1014或2630%59或3135%35%【测试数据】先对较小的程序进行分析。当你的程序能正确运行时,对你的程序本身进行分析。【实现提示】为了实现的方便,可作以下约定:(1)头两个字符是FFF的行称为注释行(该行不含语句)。除了空行和注释行外,其余均为代码行(包括类型定义、变量定义和函数头)。(2)每个函数代码行数(除去空行和注释行)称为该函数的长度。(3)每行最多只有一个、switch和struet(便于识别函数

32、的结束行)。【选作内容】(1)报告函数的平均长度。(2)找出最长函数及其在程序中的位置。(3)允许函数的嵌套定义,报告最大的函数嵌套深度。12. 稀疏矩阵运算器【问题描述】稀疏矩阵是指那些多数元素为零的矩阵。利用稀疏特点进行存储和计算可以大大节省存储空间,提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。【基本要求】以带行逻辑链接信息的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则以通常的阵列形式列出。【实现提示】首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。可设矩阵的行数和列数均

33、不超过20。1. 程序可以对三元组的输入顺序加以限制,例如,按行优先。注意研究教科书节中的算法,以便提高计算效率。2. 在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放。【选作内容】1.按教科书节中的描述方法,以十字链表表示稀疏矩阵。2.增添矩阵求逆的运算,包括不可求逆的情况。在求逆之前,先将稀疏矩阵的内部表示改为十字链表。多维数组【问题描述】设计并模拟实现整型多维数组类型。【基本要求】尽管C等程序设计语言已经提供了多维数组,但在某些情况下,定义用户所需的多维数组很有用的。通过设计并模拟实现多维数组类型,可以深刻理解和掌握多维数组。整型多维数组应具有以下基

34、本功能:(1) 定义整型多维数组类型,各维的下标是任意整数开始的连续整数;(2) 下标变量赋值,执行下标范围检查;(3同类型数组赋值;(3) 子数组赋值,例如,a1.n=a2.n+1;a2.43.5=b1.32.4;(4) 确定数组的大小。【测试数据】由读者指定。【实现提示】各基本功能可以分别用函数模拟实现,应仔细考虑函数参数的形式和设置。定义整型多维数组类型时,其类型信息可以存储在如下定义的类型的记录中:defineMaxDim5Typedefstructintdim,BoundPtrlower,Upper;ConstPtrconstants;)NArray,*NarrayPtr;整型多维数

35、组变量的存储结构类型可定义为:TypedefstructElemType*elem;Intnum;NArrayTypeTypeRecord;NArrayType;【选作内容】(1) 各维的下标是任意字符开始的连续字符。(2) 数组初始化。(3) 可修改数组的下标范围。简单LISP算术表达式计算器【问题描述】设计一个简单的LISP算术表达式计算器。简单LISP算术表达式(以下简称表达式)定义如下:(1) 定义一个自然数(2) (运算符表达式表达式)例如,6,(+45),(+(+25)8)都是表达式,其值分别为6,9和15。【基本要求】实现LISP加法表达式的求值。【测试数据】6,(+45),(+

36、(+25)8),(+2(+58),(+(+(+12)(+34)(+(+56)(+78)【实现提示】写一个递归函数:intEvaluate(FILE*CharFile)字符文件CharFile的每行是一个如上定义的表达式。每读入CharFile的一行,求出并返回表达式的值。可以设计以下辅助函数statusisNumber(charReadInChar);9转换为整数0.9【选做内容】(1) 标准整数类型的LISP加法表达式的求值。(2) 标准整数类型的LISP四则运算表达式的求值。(3) LISP算术表达式的语法检查。18.重言式判别【问题描述】一个逻辑表达式如果对于其变元的任一种取值都为真,则

37、称为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式;然而,更多的情况下,既非重言式,也非矛盾式。试写一个程序,通过真值表判别一个逻辑表达式属于上述哪一类。【基本要求】(1) 逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括|,&和,分别表示或、与和非,运算优先程度递增,但可由括号改变,即括号内的运算优先。逻辑变元为大写字母。表达式中任何地方都可以含有多个空格符。(2) 若是重言式或矛盾式,可以只显示Trueforever,或Falseforever,否则显示Satisfactible以及变量名序列,与用户交互。若用户对表达式中变元取定一组值,程序就求出并显示逻辑表达式的值。【

38、测试数据】(1) (A|A)&(B|B)(2) (A&A)&C(3) A|B|C|D|E|A(4) A&B&C&B(5) (A|B)&(A|B)(6) A&B|A&B;O,0;0,1;1,0;1,1。19. 哈夫曼编/译码器【问题描述】利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。【基本要求】一个完整的系统应具有以下功能:1:初始化(Initia

39、lization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。(1) E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读人),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(2) D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。(3) T:打印哈夫曼树(

40、Treeprinting)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。【测试数据】(1)利用教科书例6-2中的数据调试程序。(2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:THISPROGRAMISMYFAVORITE字符ABCDEFGHIJKLM频度1866413223210321154757153220字符NOPQRSTUVWXYZ频度5763151485180238181161【选作内容】(1)上述文件CodeFile中的每个0或1实际上占用了一个字节的空间,只起到示意或

41、模拟的作用。为最大限度地利用编码存储能力,试改写你的系统,将编码结果以二进制形式存放在文件CodeFile中。(2)修改你的系统,实现对你的系统的原程序的编码和译码(主要是将行尾符编/译码问题)。(3) 实现各个转换操作的源/目文件,均由用户在选择此操作时指定。20. 图遍历的演示【问题描述】很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示在连通的无向图上访问全部结点的操作。【基本要求】以邻接多重表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。【测试数据】任选国内城市,起点为合肥,暂时忽略里程

42、。【实现提示】设图的结点20-30个,每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,,n)。通过输入图的全部边(存于数据文件中,从文件读写)输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。【选作内容】(1) 借助于栈类型(自己定义和实现),用非递归算法实现深度优先遍历。(2) 以邻接表为存储结构,建立深度优先生成树和广度优先生成树,再按凹入表或树形打印生成树。21. 教学计划编制问题【问题描述】大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每

43、个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。【基本要求】(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。(3) 若根据给定的条件问题无解,则报告适当的信息,否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。【测试数据】学期总数:65;学分上限:103;

44、该专业共开设12门课,课程号从CO1到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。先修关系见教科书图。校园导游咨询【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。【基本要求】(1) 设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。(2) 为来访客人提供图中任意景点相关信息的查询。(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。【测试数据】以合肥学院南艳湖校区为例。【实现提示】一般情况下,校园的道路是双向通行的,可设

45、校园平面图是一个无向网。顶点和边均含有相关信息。【选作内容】(1)求校园图的关节点。(2)提供图中任意景点问路查询,即求任意两个景点之间的所有路径。(3) 提供校园图中多个景点的最佳访问路线查询,即求途经这多个景点的最佳(短)路径。(4) 校园导游图的景点和道路的修改扩充功能。(5) 扩充道路信息,如道路类别(车道、人行道等)、沿途景色等级,以至可按客人所需分别查询人行路径或车行路径或观景路径等。(6) 扩充每个景点的邻接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。(7) 实现校园导游图的仿真界面。22. 图书管理【问题描述】图书管理基本业务活动包括:对一本书的采编入库、清除库存、

46、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。【基本要求】1每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。2作为演示系统,不必使用文件,全部数据可以都在内存存放。但是由于上述四项基本业务活动都是通过书号(即关键字进行的,所以要用B树24树对书号建立索引,以获得高效率。3系统应实现的操作及其功能定义如下: 采编入库z新购入一种书,经分类和确定书号之后登记到图书账目中去。如果这种书在账中已有,则只将总库存量增加。 清除库存:某种书已无保留价值,将它从图书账目中注销。 借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。 归还

47、z注销对借阅者的登记,改变该书的现存量。 显示:以凹入表的形式显示B树。这个操作是为了调试和维护的目的而设置的。【测试数据】入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,毡,15,90,30,7然后清除:45,90,50,22,42其余数据自行设计。由空树开始,每插入删除一个关键字后就显示B树的状态。【实现提示】(1) 24树的查找算法是基础,入库和清除操作都要调用。难点在于删除关键字的算法,因而只要算法对2-3树适用就可以了,暂时不必追求高阶B树也适用的删除算法。(2) 每种书的记录可以用动(或静)态链式结构。借阅登记信息可以链接在相应的那种书的记录之

48、后。【选作内容】(1) 将一次会话过程(即程序一次运行)中的全部人机对话记入一个日志文件log中去。(2) 增加列出某著者全部著作名的操作。思考如何提高这一操作的效率,参阅教科书节(3增加列出某种书状态的操作。状态信息除了包括这种书记录的全部信息外还包括最早到期(包括已逾期)的借阅者证号,日期可用整数实现,以求简化(4) 增加预约借书功能。多关键字排序【问题描述】多关键字的排序有其一定的实用范围。例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的次序。【基本要求】(1)假设待排序的记录数不

49、超过10000,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出排序结果。约定按LSD法进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用稳定的内部排序法,其二是利用分配和收集的方法。并综合比较这两种策略。【测试数据】由随机数产生器生成。【实现提示】用5至8组数据比较不同排序策略所需时间。由于是按LSD方法进行排序,则对每个关键字均可进行整个序列的排序,但在利用通常的内部排序方法进行排序时,必须选用稳定的排序方法。借助分配和收集策略进行的排序,如同一趟基数排序,由于关键字的取值范围为0至100,则分配时将得到104个链表

50、。【选作内容】增添按MSD策略进行排序,并和上述两种排序策略进行综合比较。25 手机通讯录的制作设计目的:用数据结构中的双向链表作数据结构。编写一个手机通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:本系统应完成一下几方面的功能:(1).添加信息(2).显示信息:它可以按按固定电话排列、按手机、联系人名字的拼音顺序排列。(3).查找:可以不同的关键字作为查找的依据,进行查找;(4).编辑信息(5).删除信息(6).保存到文件:将以上信息保存到文件,以便下次运行程序时能载入此通信录设计要求:(1).每条信息至包含:姓名(NAME),手机号,固定电话号,电子邮箱,QQ号码,城

51、市(CITY)邮编(EIP)几项(2).作为一个完整的系统,应具有友好的界面和较强的容错能力26 (3).上机能正常运行,并写出课程设计报告奇数阶幻方求解要求必须在空间复杂度为0(N)的要求下实现N阶幻方的输出。Problemdescription幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。幻方的定义为:1到N*N的整数填入N*N的方格中,每行和每列以及对角线的数字之和必须是相等的。你作为八卦公司的顶级程序员,现在需要你解决一个问题,将任意奇数阶的幻方找出来。Input输入包括多个测试集,每行为一个正奇数N(1=N1000),0作为输入的结束且不需要处理。Output对于

52、输入的每一个N,输出一个它所对应的N阶幻方,如果存在多个,任意一个即可。每个幻方为N*N的矩阵,对于每个幻方,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。不同的幻方之间用一个空行分开。SampleInput130SampleOutput1算术表达式与二叉树【问题描述】一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现基于二叉树表示的算术表达式的操作。【任务要求】假设算术表达式Expression内可以含有变量(az)、常量(09)和二元运算符(+,-,*,/,A(乘幕)。实现以下操作:1) ReadExpre(E)以字符序列的形式输入语法正确的前缀表达式并构造表达

53、式E。2) WriteExpre(E)用带括弧的中缀表达式输出表达式E。3) Assign(V,c)实现对变量V的赋值(V=c),变量的初值为0。4)Value(E)对算术表达式E求值。5)CompoundExpr(P,E1,E2)-构造一个新的复合表达式(E1)P(E2)【测试数据】1)分别输入0;a;-91;+a*bc;+*5Ax2*8x;+*3Ax3*2Ax2x6并输出。2)每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。内部排序算法比较【问题描述】在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的关键字比较次

54、数和关键字移动次数,以取得直观感受。【任务要求】1)对以下7种常用的内部排序算法进行比较:冒泡排序、直接插入排序、简单选择排序、希尔排序、堆排序、归并排序、快速排序。2)待排序表的表长不小于100;其中的数据要用伪随机数程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。【测试数据】由随机数产生器生成动态查找表【问题描述】利用二叉排序树完成动态查找表的建立、指定关键字的查找、插入与删除指定关键字结点。任务要求】算法输入:指定一组数据。算法输出:显示二叉排序

55、树的中序遍历结果、查找成功与否的信息、插入和删除后的中序遍历结果(排序结果)。算法要点:二叉排序树建立方法、动态查找方法,对树进行中序遍历。【测试数据】自行设定,注意边界等特殊情况。joseph环【问题描述】编号是1,2,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。【任务要求】利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人

56、的编号。测试数据:m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?要求:输入数据:建立输入处理输入数据,输入m的初值,n,输入每个人的密码,建立单循环链表。输出形式:建立一个输出函数,将正确的输出序列【测试数据】自行设定,注意边界等特殊情况。30 哈希表应用问题描述】利用哈希表进行存储。【任务要求】任务要求:针对一组数据进行初始化哈希表,可以进行显示哈希表,查找元素,插入元素,删除元素,退出程序操作。设计思想:哈希函数用除留余数法构造,用线性探测再散列处理冲突。设计目的:实现哈希表的综合操作简体中文控制台界面:用户可以进行创建哈希表,显示哈

57、希表,查找元素,插入元素,删除显示元素:显示已经创建的哈希表。查找元素:查找哈希表中的元素,分为查找成功和查找不成功。插入元素:在哈希表中,插入一个元素,分为插入成功和失败。删除元素:在已有的数据中,删除一个元素。退出系统:退出程序。【测试数据】自行设定,注意边界等特殊情况。商品货架管理问题描述商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。货时,需要倒货架,以保证生产日期较近的商品在较下的位置。基本要求针对一种特定商品,实现上述管理过程。实现提示用栈模拟货架和周转空间。测试数据由学生依据软件工程的测试技术自己确定。注意测试边界数据,如空栈。停车场管理问题描述设停车场内

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

59、(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,A表示到达;D表示离去,E表示输入结束。基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现

60、,队列以链表实现。实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。稀疏矩阵的完全链表表示及其运算问题描述稀疏矩阵的每个结点包含down,right,row,col和value五个域。用单独一个结点表示一个非零项,并将所有结点连接在一起,形成两个循环链表。使得第一个表即行表,把所有结点按照行序(同一行内按列序)用right域链接起来。使得第二个表即列表,把所有结点按照列序(同一列内按行序)用down链接起来。这两个表共用一个头结点。另外,增加

61、一个包含矩阵维数的结点。稀疏矩阵的这种存储表示称为完全链表表式。实现一个完全链表系统进行稀疏矩阵运算,并分析下列操作函数的计算时间和额外存储空间的开销。(2)设计目的认识和掌握稀疏矩阵的完全链表表示;能够建立并运用这种存储结构(3)基本要求建立一个用户友好、菜单式系统进行下列操作,并使用合当的测试数据测试该系统。读取一个稀疏矩阵建立其完全链表表示输出一个稀疏矩阵的内容删除一个稀疏矩阵两个稀疏矩阵相加两个稀疏矩阵相减两个稀疏矩阵相乘稀疏矩阵的转置(4)实现提示链表上的操作。31 电视大赛观众投票及排名系统(排序应用)问题描述】在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能。【实现

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!