级数据结构课程设计任务书6班题目.docx
- 文档编号:29332262
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:42
- 大小:62.90KB
级数据结构课程设计任务书6班题目.docx
《级数据结构课程设计任务书6班题目.docx》由会员分享,可在线阅读,更多相关《级数据结构课程设计任务书6班题目.docx(42页珍藏版)》请在冰豆网上搜索。
级数据结构课程设计任务书6班题目
ch1线性表及其应用
本次实习的主要目的在于帮助学生熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用作为重点内容。
161.运动会分数统计
【问题描述】
参加运动会的n个学校编号为1~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
写一个统计程序产生各种成绩单和得分报表。
【基本要求】
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有中文提示,各学校分数为整型。
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
测试数据:
【测试数据】
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
例如,对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。
【实现提示】
可以假设n≤20,m≤30,w≤20,姓名长度不超过20个字符。
每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。
【选作内容】
允许用户指定某项目采取其他名次取法。
162.约瑟夫环
【问题描述】
约瑟夫(Joseph)问题的一种描述是:
编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
试设计一个程序求出出列顺序。
【基本要求】
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。
【测试数据】
m的初值为20;n=7,7个人的密码依次为:
3,1,7,2,4,8,4,首先m值为6(正确的出列顺序应为6,1,4,7,2,3,5)。
【实现提示】
程序运行后,首先要求用户指定初始报数上限值,然后读取各人的密码。
可设n≤30。
此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。
【选作内容】
向上述程序中添加在顺序结构上实现的部分。
164.长整数四则运算
【问题描述】
设计一个实现任意长的整数进行加法运算的演示程序。
【基本要求】
利用双向循环链表实现长整数的存储,每个结点含一个整型变量。
任何整型变量的范围是-(215-l)~(215-1)。
输入和输出形式:
按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
【测试数据】
(1)0;0;应输出"0"。
(2)-2345,6789;-7654,3211;应输出"-1,0000,0000"。
(3)-9999,9999;1,0000,0000,0000;应输出"9999,0000,0001"。
(4)1,0001,0001;-1,0001,0001;应输出"0"。
(5)1,0001,0001;-1,0001,0000;应输出"1"。
(6)-9999,9999,9999;-9999,9999,9999;应输出"-1,9999,9999,9998"。
(7)1,0000,9999,9999;1;应输出"1,0001,0000,0000"。
【实现提示】
(1)每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。
但若这样存放,即相当于按32768进制数存放,在十进制数与32768进制数之间的转换十分不方便。
故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。
(2)可以利用头结点数据域的符号代表长整数的符号。
相加过程中不要破坏两个操作数链表。
不能给长整数位数规定上限。
【选作内容】
(1)实现长整数的四则运算;
(2)实现长整数的乘方和阶乘运算;
(3)整型量范围是-(2n-1)~(2n-1),其中,n是由程序读人的参量。
输入数据的分
组方法可以另行规定。
165.一元稀疏多项式计算器
【问题描述】
设计一个一元稀疏多项式简单计算器。
【基本要求】
一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式;
(2)输出多项式,输出形式为整数序列:
n,cl,el,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei,分别是第i项的系数和指数,序列按指数降序排列;
(3)多项式a和b相加,建立多项式a+b;
(4)多项式a和b相减,建立多项式a-b。
【测试数据】
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.lx11+11x9+2x+7)
(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)
=(-7.8x15-1.2x9+12x-3-x)
(3)(1+x+x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)
(4)(x+x3)+(-x-x3)=0
(5)(x+x100)+(x100+x200)=(x+2x100+x200)
(6)(x+x2+x3)+0=x+x2+x3
(7)互换上述测试数据中的前后两个多项式
【实现提示】
用带表头结点的单链表存储多项式。
【选作内容】
(1)计算多项式在x处的值。
(2)求多项式a的导函数
。
(3)多项式a和b相乘,建立乘积多项式ab。
(4)多项式的输出形式为类数学表达式。
例如,多项式-3x8+6x3-18的输出形式为
,x15+(-8)x7-14的输出形式为
。
注意,数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为x8,项-1x3的输出形式为-x3。
(5)计算器的仿真界。
166.池塘夜降彩色雨
【问题描述】
设计一个程序,演示美丽的“池塘夜雨”景色:
色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。
【基本要求】
(1)雨点的空中出现位置、降范过程的可见程度、入水位置、颜色、最大水圈等,都是随机确定的;
(2)多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。
【测试数据】
适当调整控制雨点密度、最大水圈和状态变化的时间间隔等参数。
【实现提示】
(1)每个雨点的存在周期可分为三个阶段:
从天而降、入水有声和圈圈微澜,需要一
个记录存储其相关参数、当前状态和下一状态的更新时刻。
(2)在图形状态编程。
雨点下降的可见程度应是断断续续、依稀可见;圈圈水波应是
由里至外逐渐扩大和消失。
(3)每个雨点发生时,生成其记录,并预置下一个雨点的发生时间。
(4)用一个适当的结构管理当前存在的雨点,使系统能利用它按时更新每个雨点的状态,一旦有雨点的水圈全部消失,就从结构中删去。
【选作内容】
(1)增加“电闪雷鸣”景象。
(2)增加风的效果,展现“风雨飘摇”的情景。
(3)增加雨点密度的变化:
时而“和风细雨”,时而“暴风骤雨”。
(4)将“池塘”改为“荷塘”,雨点滴在荷叶上的效果是溅起四散的水珠,响声也不同
ch2栈和队列及其应用
仅仅认识到栈和队列是两种特殊的线性表是远远不够的,本次实习的目的在于使读者深入了解钱和队列的特性,以便在实际问题背景下灵活运用他们;同时还将巩固对这两种结构的构造方法的理解。
编程技术训练要点有:
基本的“任务书“观点及其典型用法(见本实习2。
2);问题求解的状态表示及其递归算法(2.3,2.4和2.9);利用栈实现表达式求值的技术(2.5);事件驱动的模拟方法(2.63.8);以及动态数据结构的实现(2.6,2.7和2.8)。
167.停车场管理
[问题描述]
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
[测试数据]
设n=2,输入数据为:
(‘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’表示输入结束。
[基本要求]
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:
若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表实现。
[实现提示]
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。
输入数据按到达或离去的时刻有序。
栈中每个元素表示一辆汽车,包含两个数据项:
汽车的牌照号码和进入停车场的时刻。
[选作内容]
(1)两个栈共享空间,思考应开辟数组的空间是多少?
(2)汽车可有不同种类,则它们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。
(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。
(4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。
168.魔王语言解释
【问题描述】
有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:
(1)
(2)
在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
【基本要求】
用下述两条具体规则和上述规则形式
(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
(1)
(2)
【测试数据】
B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae
若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
t
d
s
a
e
z
g
x
n
h
天
地
上
一只
鹅
追
赶
下
蛋
恨
【实现提示】
将魔王的语言自右至左进栈,总是处理栈顶字符。
若是开括号,则逐一出栈,将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。
其他情形较简单,请读者思考应如何处理。
应首先实现栈和队列的基本操作。
【选作内容】
(1)由于问题的特殊性,可以实现栈和队列的顺序存储空间共享。
(2)代换变量的数目不限,则在程序开始运行时首先读入一组第一种形式的规则,而不是把规则固定在程序中(第二种形式的规则只能固定在程序中)。
169.马踏棋盘
【问题描述】
设计一个国际象棋的马踏遍棋盘的演示程序。
【基本要求】
将马随机放在国际象棋的8×8棋盘Board[8][8]的某个方格中,马按走棋规则进行移动。
要求每个方格只进入一次,走遍棋盘上全部64个方格。
编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,输出之。
170.算术表达式求值演示
【问题描述】
表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。
设计一个程序,演示用算符优先法对算术表达式求值的过程。
【基本要求】
以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。
利用教科书表3.1给出的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例3-1演示在求值中运算符械、运算数校、输入字符和主要操作的变化过程。
171.银行业务模拟
【问题描述】
客户业务分为两种。
第一种是申请从银行得到一笔资金,即取款或借款。
第二种是向银行投入一笔资金,即存款或还款。
银行有两个服务窗口,相应地有两个队列。
客户到达银行后先排第一个队。
处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。
每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。
任何时刻都只开一个窗口。
假设检查不需要时间。
营业时间结束时所有客户立即离开银行。
写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
【基本要求】
利用动态存储结构实现模拟。
【测试数据】
一天营业开始时银行拥有的款额为10000(元),营业时间为600(分钟)。
其他模拟参
量自定,注意测定两种极端的情况:
一是两个到达事件之间的间隔时间很短,而客户的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户的交易时间很短。
【实现提示】
事件有两类:
到达银行和离开银行。
初始时银行现存资金总额为total。
开始营业后的第一今事件是客户到达,营业时间从0到closetime。
到达事件发生时随机地设置此客户的交易时间和距下一到达事件之间的时间间隔。
每个客户要办理的款额也是随机确定的,用负值和正值分别表示第一类和第二类业务。
变量total,closetime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。
两个队列和一个事件表均要用动态存储结构实现。
注意弄清应该在什么条件下设置离开事件,以及第二个队列用怎样的存储结构实现时可以获得较高的效率。
注意:
事件表是按时间顺序有序的。
【选作内容】
自己实现动态数据类型。
例如对于客户结点,定义pool为
CustNodepoolfMAX];
//结构类型CustNode含四个域:
aITHIne,durtime,amount,next
或者定义四个同样长的,以上述域名为名字的数组。
初始时,将所有分量的next域链接起来,形成一个静态链找,设置一个楼顶元素下标指示量top,top=0表示找空。
动态存储分配函数可以取名为myMalloc,其作用是出钱,将钱顶元素的下标返回。
若返回的值为0,则表示无空间可分配。
归还函数可取名为myFree,其作用是把该分量入钱。
用FOR-TRAN和BASIC等语言实现时只能如此地自行组织。
172.航空客运订票系统
【问题描述】
航空客运订票的业务活动包括:
查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】
(1)每条航线所涉及的信息有:
终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);
(2)系统能实现的操作和功能如下:
①录入:
可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;
②查询航线:
根据旅客提出的终点站名输出下列信息:
航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
③承办订票业务:
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;
④承办退票业务:
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
【测试数据】
由读者自行指定。
【实现提示】
两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
【选作内容】
当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其他航线情况。
读者还可充分发挥自己的想象力,增加你的系统的功能和其他服务项目。
173.电梯模拟
【问题描述】
设计一个电梯模拟系统。
这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体“构成的集合,虽然他们彼此交互作用,但他们的行为是基本独立的。
在离散的模拟中,以模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。
【基本要求】
(1)模拟某校五层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
五个楼层由下至上依次称为地下层、第→层、第二层、第三层和第四层,其中第一层是大楼的迸出层,即是电梯的“本垒层“,电梯“空闲“时,将来到该层候命。
(2)乘客可随机地进出于任何层。
对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
(3)模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要耗费一定的时间单位(简记为t),比如:
有人进出时,电梯每隔40t测试一次,若无人进出,则关门;
关门和开门各需要20tg
每个人进出电梯均需要25h
如果电梯在某层静止时间超过300t,则驶回1层候命。
(4)按时序显示系统状态的变化过程:
发生的全部人和电梯的动作序列。
【测试数据】
模拟时钟Time的初值为0,终值可在500~10000范围内逐步增加。
【实现提示】
(1)楼层由下至上依次编号为0,1,2,3,4。
每层有要求Up(上)和Down(下〉的两个按钮,对应10个变量CaliUp[0..4]和CallDOWEl[0..4]。
电梯内5个目标层按钮对应变量Caucar[0..4]。
有人按下某个按钮时,相应的变量就置为1,一旦要求满足后,电梯就把该变量清为0。
(2)电梯处于三种状态之-zGoingUp(上行)、GoingDown(下行)和Idle(停候)。
如果电梯处于Idle状态且不在1层,则关门并驶回1层。
在1层停候时,电梯是闭门候命。
一旦收到往另一层的命令,就转入GoingUp或GoingDown状态,执行相应的操作。
(3)用变量Time表示模拟时钟,初值为0,时间单位。
)为0。
l秒。
其他重要的变量有:
Floor——电梯的当前位置(楼层);
DI——值为0,除非人们正在进入和离开电梯;
D2——值为0,如果电梯已经在某层停候30Ot以上;
D3——值为0,除非电梯门正开着又无人迸出电梯;
State——电梯的当前状态(GoingUp,GoingDOWEl,Idle)。
系统初始时,Floor=1,Dl=D2=D3=0,State=Idle。
(4)每个人从进入系统到离开称为该人在系统中的存在周期。
在此周期内,他有6种可能发生的动作:
M1.[进入系统,为下一人的出现作准备]产生以下数值:
InFloor——该人进入哪层楼;
011tFloor——他要去哪层楼;
GiveupTime——他能容忍的等候时间;
Inter-Time——下一人出现的时间间隔,据此系统预置下一人进入系统的时刻。
M2.[按电钮并等候]此时应对以下不同情况作不同的处理:
①Floor=InFloor且电梯的下一个活动是E6(电梯在本层,但正在关门〉;
②Floor=InFloor且D3手0(电梯在本层,正有人迸出);
③其他情况,可能D2=0或电梯处于活动El(在1层停候)。
M3.[进入排队]在等候队列Queue[InFloor]末尾插入该人,并预置在GiveupTime个t之后,他若仍在队列中将实施动作M4。
M4.[放弃]如果Floor手InFloor或Dl=0,则从Quem[InFloor]和系统删除该人。
如果Floor=InFloor且D1学0,他就继续等候(他知道马上就可进入电梯〉。
M5.[进入电梯]从Queue[InFloor〕删除该人,并把他插入到lElevator(电梯)校中。
置Cancar[011tFloor]为1。
M6.[离去]从Elevator和系统删除该人。
(5)电梯的活动有9种:
E1.[在1层停候]若有人按下一个按钮,则调用Controler将电梯转入活动E3或E60。
E2.[要改变状态?
]如果电梯处于GoingUp(或GoingDown〉状态,但该方向的楼层却无人等待,则要看反方向楼层是否有人等候,而决定置State为GoingDown(或GoingUp〉还是Idle。
E3.[开门]置DI和D2为非0值,预置300个t后启动活动E9和76个t后启动E5,然后预置20个t后转到目。
E4.[让人出入]如果Elevator不空且有人的011tFloor=Floor,则按进入的倒序每隔25个t让这类人立即转到他们的动作M6。
Elevator中不再有要离开的人时,如果Queue[Floor]不空,则以25个t的速度让他们依次转到MLQueue[Floor]空时,置Dl为0,D3手0,而且等候某个其他活动的到来。
E5.[关门]每隔40个t检查D1,直到是D1=O(若D1手0,则仍有人出入〉。
置D3为0并预置电梯再20个t后启动活动E6(再关门期间,若有人到来,则如M2所述,门再次打开)。
E6.[准备移动]置Caucar[Floor]为0,而且若State手GoingDown,则置CallUP
CFloor]为05若State手GoingUp,则置CallDownCFloor]为0。
调用Contr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 级数 结构 课程设计 任务书 题目