数据结构-课程设计题-2011
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计
一、题目的选择方法
根据学号进行对应题目的选择,即学号的后2位除以17取余数,所得余数即为该同学所选题号。
二、《数据结构》课程设计可供选择的题目
1、Huffman编码的应用
创建一个文本文件,通过统计该文件中各字符出现的频率,对各字符进行Huffman编码,(1)能够实现将该文件转换成Huffman编码文件存储(压缩),(2)能够实现将Huffman 编码文件还原成原文件(解压)。
2、链表的应用
以有序的单链表结构来描述超市家电部的库存模型。当有提货或进货时需要对该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。链表结点的数据域包括家电名称、品牌、单价和数量,以单价的升序体现链表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。
3、Hash表的应用
扫描一个C语言源程序,用Hash表存储该程序中出现的关键字,并统计该程序中的关键字出现的频率。
4、图的应用
N(N>10)个居民之间需要铺设煤气管道。假设任意两个居民之间都可以铺设煤气管道,但代价不同。事先将任意两个居民之间铺设煤气管道的代价存入磁盘文件中。设计一个最佳方案使得这N个居民之间铺设煤气管道所需代价最少。
5、模式匹配算法的应用
利用字符串匹配的KMP算法,实现对文本文件的查找与替换功能。
6、Joseph环
约瑟夫环(Joseph)问题的一种描述是:编号为1、2、3……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。此题所用的循环链表中不需要“头结点”,请注意空表和非空表的界限。
7、长整数四则运算
[问题描述]
设计一个实现任意长的整数进行加法运算的演示程序
[基本要求]
利用双向循环链表实现长整数的存储,每个节点包含一个整型变量。任何整型变量的范围是-(215-1)~215-1,输入输出形式:按照中国对于长整数的表示习惯,每四位一组,组间用逗号分开。
[测试数据]
(1)0;0;应输入“0”
(2)-2345,6789;-7654,3211;应输出”-1,0000,0000”
(3)1,0001,0001;-1,0001,0001;应输出0。
[实现提示]
每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存放,即相当于按32767进制数存放,在十进制数与32767进制数之间的转换十分不便。故可以在每个节点中仅存放十进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。
可以利用头节点的数据域的符号代表长整数的符号。相加过程中不要破坏两个操作数链表。不能给长整数位数规定上限。
8、栈的应用一
表达式计算是实现程序设计语言的基本问题之一。也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法或转换成后缀表达式方法对算术表达式进行求值的过程。[基本要求]
以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用算符优先关系,或中缀表达式向后缀表达式转换的方法,实现对算术四则混合运算表达式的求值,并仿照教科书和课件中的例子演示求值中运算符栈、运算数栈、输入字符和主要操作变化的过程。[测试数据]
3*(7-2)
8;1+2+3+4;88-1*5;1024/4*8;(6+2*(3+6*(6+6)))
9、二分法查找的应用
分块查找又称为索引顺序查找,是顺序查找的一种改进方法。除了表自身之外,尚需建立一个“索引表”,为每一个子表建立一个索引项,其中包括两项内容,关键字(子表内的最大关键字)项和指针项(子表中第一个记录在表中的位置)。索引表按关键字排序,子表分块有序,查找时先确定待查记录所在的块,然后在块内查找。由于索引项是按照关键字排序的,所以在索引表中的查找可以采用二分查找方法。
[基本要求]
(1)将学生按照班级进行分类,同一班级的学生记录在一个子表中。
(2)索引表中存放班级的名称,并按照名称进行排序。
(3)一个班级的学生记录可以不按照顺序存放。
[测试数据]
自行设置。
[实现提示]
(1)可假设要存储的班级数最多为20个,一个班级最多有30个学生。
(2)所有班级的学生记录都存放在同一个连续的存储空间中。每个班级学
生记录存储的起始位置固定。
(3)索引表另行建立,用于存储每个班级的学生在子表中存储的起始位置
和人数。
10、哈希表的设计
针对你所在的集体(比如你所在的班级)中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表的程序。
[基本要求]
假设人名为中国人姓名的汉语拼音形式,待填入的哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数方法构造,用伪随机探测再散列处理冲突。
[测试数据]
取你周围熟悉的30个人的姓名。
[实现提示]
如果随机函数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度均不超过19个字符,最长的人名如:庄双双(Zhuang Shuangshuang)。字符的取码方法可直接利用C语言中的toascii函数,并可对过长的人名先作折叠处理。
11、二叉排序树的应用
使用二叉排序树进行表的建立和查找算法。
[基本要求]
将自己的联系人按照联系人的电话号码关键字建立二叉排序树,并实现在建立的二叉排序树上进行查找操作。联系人的信息可以有:姓名、性别、出生年月日、家庭住址和另一个联系电话等信息。
[测试数据]
自行设定。
12、多关键字排序的应用
多关键字的排序有一定的实用范围。例如:在即行高考分数的处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此上需在总分相同的情况下,按用户提出的单科分数的次序要求排出考生录取的顺序。
[基本要求]
(1)假设待排序的记录不超过10,000,表中记录的关键字不超过5个,各个关键字的范围均为0至100。按照用户给定的进行排序的关键字的优先关系,输出排序的结果。
(2)约定按照LSD(最低位优先法,Least Significant Digit first,简称LSD法。)进行多关键字的排序。在对各个关键字进行排序时采用两种策略:其一是利用稳定的内部排序算法,其二是利用“分配”和“收集”的方法。并综合比较这两种策略。
[测试数据]
由随机数产生器产生。
[实现提示]