数据结构课外实践题库.docx
- 文档编号:24909887
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:32
- 大小:95.56KB
数据结构课外实践题库.docx
《数据结构课外实践题库.docx》由会员分享,可在线阅读,更多相关《数据结构课外实践题库.docx(32页珍藏版)》请在冰豆网上搜索。
数据结构课外实践题库
数据结构课程课外实践安排
(2012-2013学年第一学期)
课外实践学时:
32学时
课外实践目的:
综合应用数据结构课程中所学的数据结构:
线性表、栈、队列、数组、广义表、树、二叉树、图、查找表中的一种或多种数据结构完成一个较大问题的求解(其实这里的问题也并不太大,所用的数据结构可能是其中的多个,也可能是其中的一个两个)。
从而培养学生综合应用基本数据结构分析、解决实际问题的能力,并进一步加深对所学知识的理解和掌握。
课外实践要求:
1、课外实践以组为单位开展,每组2~4名同学,自由组合,确定组长一名。
2、每组从附件1列出的题目中任意选择其中一个完成(鼓励大家选择对你自己而言有一定挑战性的题目),每个题目最多由2组同学选做。
强调独立思考,组内分工明确,每组选择的题目有本组独立完成。
3、鼓励大家参考教材上、参考书上和所选题目相关的内容和算法。
不鼓励大家一拿到实验题目就去网上或参考书上找相关程序源代码,通过思考该问题并最终解决该问题不仅可以锻炼大家,提高大家的水平,而且大家对该问题的解决也会有成就感!
4、实现你所选题目要求的功能,并能够进行较完善友好的输入输出验证。
5、完成你所选的课外实践题目后,结合该题目给出设计报告(设计报告格式见课外实践报告模板),并按时上交。
6、每组同学须仔细阅读所选题目的要求,认真主动完成设计要求。
有问题及时主动通过各种方式与指导教师联系沟通。
同学们要发挥自主学习的能力,充分利用课外时间,安排好课外实践的时间,并在设计过程中不断检测自己的计划完成情况,及时的向教师汇报。
课外实践按照教学要求需要思考、编码和上机调试程序至少32学时,代码量要求在600~3000行。
7、编写代码时请保持良好的编程的风格:
Ø代码段与段之间要有空行和退缩
Ø标识符名称应该与其代表的意义一致
Ø函数名之前应该添加注释说明该函数的功能
Ø关键代码应说明其功能
8、课外实践的考核要求按组进行答辩,本学期第16周各组上交课外实践的设计报告、程序源代码、可执行程序等,第17周进行答辩。
附件1:
数据结构课程课外实践可选题目
一、运动会分数统计系统
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
功能要求:
1).可以输入各个项目的前三名或前五名的成绩;
2).能统计各学校总分,
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:
有中文提示,各学校分数为整数
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
二、学籍信息管理
【实验目的】
综合考察数据存储、以及对各种存储结构的建立、插入、删除、排序、查找等操作。
【实验要求】
设计一个简单的学籍管理系统。
包括建立、插入、修改,查找、输出、排序(按不同关键字)
【实验内容】
1.从学生基本信息文件读入数据以建立学籍信息。
下面是一个例子:
学号姓名性别宿舍号码电话号码
07011001张成成男50187732111
07011002李成华女10187723112
07011003王成凤女10187723112
07011004张明明男50287734333
07011005陈东男50187732111
每个学生信息至少包括:
学号、姓名、性别。
文件至少包括10个学生。
2.从学生成绩信息文件读入其内容建立学生的成绩信息。
以下一个例子:
(至少包含20项信息)
学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得学分
07011001A01大学物理3667882
07011002B03高等数学478-190
07011001B03高等数学445-188
07011002C01VC3657666
功能要求极其说明:
(1)数据录入功能:
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据。
实得成绩、实得学分根据条件自动运算。
综合成绩的计算:
a.如果本课程的实验成绩为-1,则表无实验成绩,综合成绩=平时成绩*30%+卷面成绩*70%
b.如果实验成绩不为-1,表示本课程有实验成绩,综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%
实得学分的计算:
采用等级学分制。
综合成绩在90~100之间,应得学分=学分*100%
综合成绩在80~90之间,应得学分=学分*80%
综合成绩在70~80之间,应得学分=学分*75%
综合成绩在60~70之间,应得学分=学分*60%
综合成绩在60分以下,应得学分=学分*0%
3.查询功能:
分为学生基本情况查询和成绩查询两种
4.删除功能:
根据输入的学生姓名或学好删除相应的学生信息。
5.排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
三、队列应用(用队列模拟超市交款处的顾客流)
使用一个队列模拟一队通过丹尼斯超市交款处的顾客流。
为了创建这个模拟,我们必须模拟排队时间和顾客通过流。
我们可以通过一个循环模拟时间,每通过一个顾客代表一定的时间间隔——例如,一分钟。
我们可以使用一个队列模拟顾客流,队列中的一个数据项代表一位顾客。
为了完成这个模拟,我们需要知道顾客加入交款处队列的频率、交款结算服务情况和离开的频率。
假设交款队列有以下属性。
·每分钟有一个顾客完成交款并离开(假设此时至少有一个顾客等待服务)。
·每分钟有零个到两个顾客加入,没有顾客到达的概率是50%,一个顾客到达的概率是25%,两个顾客到达的概率是25%。
(如何模拟?
)
我们可以使用下面的算法模拟一个时间段n分钟内的顾客流。
初始化队列为空。
for(minute=0;minute { 如果队列不空,对头顾客交款并离开(即出对); 产生一个0-3范围内的随机数k; 如果k=1,一个顾客加入交款队列(入对); 如果k=2,两个顾客加入交款队列(入对); 如果k=0或3,不增加任何顾客到交款队列; } 调用rand()函数是产生伪随机数的一种简单的方法,rand函数在 我们的模拟程序应该在每一个模拟分钟期间内更新下列信息,即每一次通过循环。 ·完成交款服务的总顾客数 ·这些顾客花费在排队等待的时间总和 ·顾客花费在排队等待的最长时间 为了计算顾客等待的时间长度,我们需要存储“minute”,作为这个客户队列数据项的一部分,表示顾客加入的时间。 如果你使用程序模拟一列顾客流,试着完成下面的表格。 请注意,平均等待时间是等待时间总和除以总的服务顾客数。 时间(分钟)总的顾客服务时间平均等待时间最长等待时间 30 60 120 480 四、栈对队列的模拟问题 问题描述: 用两个栈模拟一个队列,栈的基本操作包括Push、Pop、StackEmpty,需要实现队列的基本操作。 即以两个栈的存储空间,作为队列的存储空间;以栈的基本操作模拟实现队列的基本操作。 基本要求: (1)借用两个栈模拟一个队列; (2)设计队列的基本操作: 入队、出队、队元素显示;(3)以菜单形式提供基本操作选项;(4)输出: 各种基本操作演示结果。 实现提示: (1)栈的特点是先入后出,队列的特点是先入先出。 所以,用两个栈S1和S2模拟一个队列时,即要利用栈的“先入后出”实现“先入先出”。 (2)入队。 入队分以下三种情况: 1)S1未满时,入队元素入S1栈;2)S1满时,S2空时,首先将S1的元素出站至S2;然后入队元素入S1栈;3)S1满、S2不空,不能入队。 (3)出队。 出队分以下三种情况: 1)S2不空时,用S2出栈,模拟出队;2)S1不空S2空时,首先将S1中所有元素出栈至S2中,然后S2出栈;3)S1和S2均空时,不能出队。 测试与运行 (1)栈S1和S2等长,均为4,运行下列基本操作,并写出操作结果: 1)创建一个空队,并测队空;2)A、B、C入队,显示队元素;3)A出队,显示队元素;4)D、E、F、G入队,显示队元素;5)B、C出队,显示队元素;6)H、I入队,显示队元素;7)K入队;8)所有元素出队,测队空。 (2)分析运行结果的正确性,并据此修改与完善程序。 思考 (1)何为队空? 何为队满? (2)如何计算队长? 为什么S1满、S2不空时不能入队? 五、数据压缩 【实验目的】 1)调研数据压缩原理与相关算法的实现; 2)实现一个压缩/解压缩程序 【实验要求】 1.阅读相关资料,理解数据压缩的意义和过程。 2.调研几个著名的数据压缩算法,写一份调研报告,说明其算法及所使用的数据结构。 3.实现一个压缩/解压缩程序,算法任意。 4.程序要求: 控制台界面。 首先实现对单文件压缩的功能。 命令行格式: 压缩: 程序名-c输入文件[输出文件名] 解压缩: 程序名-d输入文件[输出文件名] []里内容表示可选。 控制台输出: 压缩: 原始文件大小、压缩后文件大小、压缩比例、消耗时间 解压缩: 解压前文件大小,解压后文件大小、压缩比例、消耗时间 选做: 1)将多个文件压缩到一个文件;2)检查压缩文件完整性,测试其能够完成解压缩;3)对文件测试,不压缩,输入其若压缩后的压缩率;4)列出压缩文件内所包含的文件名;4)实现对整个目录进行压缩的功能。 文件格式: 对压缩文件起一个后缀名。 若在命令行中没指定输入文件的话,输出文件名应该是输入文件名+.后缀名的格式;若在命令行中指定输出文件名的话,后缀也应自动加上。 实现的压缩比例越高、压缩时间越短越好。 六、迷宫问题。 利用栈结构实现迷宫求解问题。 迷宫求解问题如下: 心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,测试算法的迷宫如下图所示。 提示: 1、可以使用递归或非递归两种方法实现 2、老鼠能够记住已经走过的路,不会反复走重复的路径 3、可以自己任意设置迷宫的大小和障碍 4、使用“穷举求解”的方法 六‘、迷宫问题。 传说在远古时候,米诺斯国王统治着爱琴海南端的克里特岛。 他建造了一座有无数宫室的迷宫,在迷宫中喂养了一头人身牛头的恶兽——米诺牛。 为了供奉它,米诺斯要希腊的雅典每九年进贡七对童男女喂米诺牛。 当时,雅典有位名叫忒休斯的王子,他不忍人民遭受这种灾难,毅然决定跟随第四批被进贡的童男女去克里特杀死米诺牛。 在克里特,英勇的忒休斯赢得了米诺斯的女儿的爱慕。 她交给忒休斯一个线团,让他按下面规则边走边放线: (1)每到一个岔口,找没有铺上线的路走;若找不到未铺上线的路,就沿原来的路返回到前一个岔口。 (2)不走已铺上两条线的路。 用这种方法,忒休斯终于杀死米诺牛,胜利的走出迷宫。 七、学生数据结构成绩管理系统 [基本要求] (1)学生信息及成绩的录入 要求包括的学生信息有: 学号、姓名、性别、出生日期、民族及数据结构成绩(具体内容可自行假设,至少录入10名以上学生) 所录入的学生按学号散列存储(散列函数为: 学号%5取整,如1002%5=2),采用拉链法解决冲突。 (2)学生成绩的查询 要求根据提供的学号完成学生成绩的查询(必须采用哈希查找) (3)学生成绩的分段统计和排序输出 统计出各分数段学生人数(60分以下,60~70,71~80,...) 采用任何一种排序方法,将学生成绩从高到低排序输出 八、哈希表应用 [问题描述] 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。 [基本要求] 假设人名为中国人姓名的汉语拼音形式。 待填入哈希表的人名共有300个,取平均查找长度的上限为2。 哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 [测试数据] 取读者周围较熟悉的300个人名。 [选作内容] (1)从教科书上介绍的集中哈希函数构造方法中选出适用者并设计几个不同的哈希函数,比较他们的地址冲突率(可以用更大的名字集进行实验)。 (2)研究这300个人名的特点,努力找一个哈希函数,使得对于不同的拼音名一定不发生地址冲突。 (3)在哈希函数确定的前提下尝试各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚集性。 九、内部排序算法比较 [问题描述] 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。 试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 [基本要求] (1)对以下10种常用的内部排序算法任意选择6种进行比较: 直接插入排序;折半折入排序;二路插入排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序;归并排序;基数排序。 (2)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字移动次数(关键字交换计为3次移动)。 [测试数据] 由随机产生器决定。 [实现提示] 主要工作是设法在程序中适当的地方插入计数操作。 程序还可以包括计算几组数据得出结果波动大小的解释。 注意分块调试的方法。 十、校园导游程序 [问题描述] 用无向网表示安阳师范学院校园景点或建筑物平面图,图中顶点表示主要景点或建筑物,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。 要求能够回答有关景点介绍、游览路径等问题。 [基本要求] (1)查询各景点的相关信息; (2)查询图中任意两个景点间的最短路径。 (3)查询图中任意两个景点间的所有路径。 (4)增加、删除、更新有关景点和道路的信息。 (5)求多个景点的最佳(最短)游览路径。 十一、实现第7章图中的部分算法,这些算法至少包括以下5组中的两组: (1)深度和广度优先搜索遍历图; (2)构造最小生成树的两种算法 (3)拓扑排序算法; (4)求解关键路径; (5)求解最短路径。 十二、合理设计手机键盘 【题意描述】 我们的手机键盘上将26个字母如下左图设置在8个键盘上,但每个字母的按键频率是不同的,因此如果按照右图的方式设置字母在键盘上的相对位置可能会使所有字母的按键频率与按键次数乘积之和达到最小,从而更加方便客户使用。 我们的任务是根据输入的键盘数和字符数及每个字符的使用频率来确定最合理的分配方式,使分配后所有字符的频率和按键次数的乘积之和最小。 在每个键盘上,处于第i个位置上的字符按键次数为i,在分配的过程中我们不能更改字符的相对位置。 该题目详细描述如下: I-Keyboard TimeLimit: 2000MS MemoryLimit: 32768K TotalSubmissions: 3235 Accepted: 1690 Description MostofyouhaveprobablytriedtotypeanSMSmessageonthekeypadofacellularphone.Itissometimesveryannoyingtowritelongermessages,becauseonekeymustbeusuallypressedseveraltimestoproduceasingleletter.Itisduetoalownumberofkeysonthekeypad.Typicalphonehastwelvekeysonly(andmaybesomeothercontrolkeysthatarenotusedfortyping).Moreover,onlyeightkeysareusedfortyping26lettersofanEnglishalphabet.Thestandardassignmentoflettersonthekeypadisshownintheleftpicture: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 space # 1 2 abcd 3 efg 4 hijk 5 lm 6 nopq 7 rs 8 tuv 9 wxyz * 0 space # Thereare3or4lettersassignedtoeachkey.Ifyouwantthefirstletterofanygroup,youpressthatkeyonce.Ifyouwantthesecondletter,youhavetopressthekeytwice.Forotherletters,thekeymustbepressedthreeorfourtimes.Theauthorsofthekeyboarddidnottrytooptimisethelayoutforminimalnumberofkeystrokes.Instead,theypreferredtheevendistributionoflettersamongthekeys.Unfortunately,somelettersaremorefrequentthanothers.Someofthesefrequentlettersareplacedonthethirdorevenfourthplaceonthestandardkeyboard.Forexample,SisaverycommonletterinanEnglishalphabet,andweneedfourkeystrokestotypeit.Iftheassignmentofcharacterswaslikeintherightpicture,thekeyboardwouldbemuchmorecomfortablefortypingaverageEnglishtexts. ACMhavedecidedtoputanoptimisedversionofthekeyboardonitsnewcellularphone.Nowtheyneedacomputerprogramthatwillfindanoptimallayoutforthegivenletterfrequency.Weneedtopreservealphabeticalorderofletters,becausetheuserwouldbeconfusedifthelettersweremixed.Butwecanassignanynumberofletterstoasinglekey. Input ThereisasinglepositiveintegerTonthefirstlineofinput.Itstandsforthenumberoftestcasestofollow.EachtestcasebeginswithalinecontainingtwointegersK,L(1<=K<=L<=90)separatedbyasinglespace.Kisthenumberofkeys,Listhenumberofletterstobemappedontothosekeys.Thentherearetwolines.ThefirstonecontainsexactlyKcharacterseachrepresentinganameofonekey.ThesecondlinecontainsexactlyLcharactersrepresentingnamesoflettersofanalphabet.Keysandlettersarerepresentedbydigits,letters(whicharecase-sensitive),oranypunctuationcharacters(ASCIIcodebetween33and126inclusively).Notwokeyshavethesamecharacter,notwolettersarethesame.However,thenameofalettercanbeusedalsoasanameforakey. Afterthosetwolines,thereareexactlyLlineseachcontainingexactlyonepositiveintegerF1,F2,...FL.Thesenumbersdeterminethefrequencyofeveryletter,startingwithth
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课外 实践 题库