数据结构课程设计题目及报告范例样本.doc
《数据结构课程设计题目及报告范例样本.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计题目及报告范例样本.doc(72页珍藏版)》请在咨信网上搜索。
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 1. 运动会分数统计 【问题描述】 参加运动会的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 个字符。每个项目结束时, 将其 编号、 类型符(区分取前五名还是前三名) 输入, 并按名次顺序输入运动员姓名、 校名(和成 绩)。 【选作内容】 允许用户指定某项目采取其它名次取法。 2. 集合的并、 交和差运算 【问题描述】 编制一个能演示执行集合的并、 交和差运算的程序。 【基本要求】 (1) 集合的元素限定为小写字母字符 [‘a’..’z’] 。 (2) 演示程序以用户和计算机的对话方式执行。 【测试数据】 (1)Set1="magazine", Set2="paper", Set1∪Set2="aegimnprz", Setl ∩Set2="ae", Set1-Set2="gimnz"。 (2)Set1= " 012oper4a6tion89", Set2="error data", Set1∪Set2="adeinoprt", Setl ∩Set2="aeort", Set1-Set2="inp"。 【实现提示】 以有序链表表示集合。 【选作内容】 (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表示式求值。 (4) 集合的元素类型推广到其它类型 , 甚至任意类型。 3. 一元稀疏多项式计算器 【问题描述】 设计一个一元稀疏多项式简单计算器。 【基本要求】 一元稀疏多项式简单计算器的基本功能是: (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) 计算器的仿真界。 4. 池塘夜降彩色雨 【问题描述】 设计一个程序, 演示美丽的”池塘夜雨”景色: 色彩缤纷的雨点飘飘洒洒地从天而降, 滴滴入水有声, 溅起圈圈微澜。 【基本要求】 (1) 雨点的空中出现位置、 降范过程的可见程度、 入水位置、 颜色、 最大水圈等, 都是随机确定的 ; (2) 多个雨点按照各自的随机参数和存在状态, 同时演示在屏幕上。 【测试数据】 适当调整控制雨点密度、 最大水圈和状态变化的时间间隔等参数。 【实现提示】 (1) 每个雨点的存在周期可分为三个阶段: 从天而降、 入水有声和圈圈微澜, 需要一 个记录存储其相关参数、 当前状态和下一状态的更新时刻。 (2) 在图形状态编程。雨点下降的可见程度应是断断续续、 依稀可见; 圈圈水波应是 由里至外逐渐扩大和消失。 (3) 每个雨点发生时, 生成其记录, 并预置下一个雨点的发生时间。 (4) 用一个适当的结构管理当前存在的雨点, 使系统能利用它按时更新每个雨点的状态, 一旦有雨点的水圈全部消失, 就从结构中删去。 【选作内容】 (1) 增加”电闪雷鸣”景象。 (2) 增加风的效果, 展现”风雨飘摇”的情景。 (3) 增加雨点密度的变化: 时而”和风细雨”, 时而”暴风骤雨”。 (4) 将”池塘”改为”荷塘”, 雨点滴在荷叶上的效果是溅起四散的水珠, 响声也不同。 5. 银行业务模拟 【问题描述】 客户业务分为两种。第一种是申请从银行得到一笔资金, 即取款或借款。第二种是向银行投入一笔资金, 即存款或还款。银行有两个服务窗口, 相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时, 如果属于第一种, 且申请额超出银行现存资金总额而得不到满足, 则马上排入第二个队等候, 直至满足时才离开银行; 否则业务处理完后马上离开银行。每接待完一个第二种业务的客户, 则顺序检查和处理(如果可能)第二个队列中的客户, 对能满足的申请者予以满足, 不能满足者重新排到第二个队列的队尾。注意, 在此检查过程中, 一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额, 或者本次已将第二个队列检查或处理了一遍, 就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。 写一个上述银行业务的事件驱动模拟系统, 经过模拟方法求出客户在银行内逗留的平均时间。 【基本要求】 利用动态存储结构实现模拟。 【测试数据】 一天营业开始时银行拥有的款额为10000(元), 营业时间为600(分钟)。其它模拟参 量自定, 注意测定两种极端的情况: 一是两个到达事件之间的间隔时间很短, 而客户的交易时间很长, 另一个恰好相反, 设置两个到达事件的间隔时间很长, 而客户的交易时间很短。 【实现提示】 事件有两类: 到达银行和离开银行。初始时银行现存资金总额为total。开始营业后的第一今事件是客户到达, 营业时间从0到closetime。到达事件发生时随机地设置此客户的交易时间和距下一到达事件之间的时间间隔。每个客户要办理的款额也是随机确定的, 用负值和正值分别表示第一类和第二类业务。变量total, closetime以及上述两个随机量的上下界均交互地从终端读入, 作为模拟参数。 两个队列和一个事件表均要用动态存储结构实现。注意弄清应该在什么条件下设置离开事件, 以及第二个队列用怎样的存储结构实现时能够获得较高的效率。注意: 事件表是按时间顺序有序的。 【选作内容】 自己实现动态数据类型。例如对于客户结点, 定义pool为 CustNodepoolfMAX]; // 结构类型CustNode含四个域: aITHIne, durtime, amount, next 或者定义四个同样长的, 以上述域名为名字的数组。初始时, 将所有分量的next域链接起来, 形成一个静态链找, 设置一个楼顶元素下标指示量top, top=0表示找空。动态存储分配函数能够取名为myMalloc, 其作用是出钱, 将钱顶元素的下标返回。若返回的值为0, 则表示无空间可分配。归还函数可取名为myFree, 其作用是把该分量入钱。用FOR-TRAN和BASIC等语言实现时只能如此地自行组织。 6. 马踏棋盘 【问题描述】 设计一个国际象棋的马踏遍棋盘的演示程序。 【基本要求】 将马随机放在国际象棋的8×8棋盘Board[8][8]的某个方格中, 马按走棋规则进行移动。要求每个方格只进入一次, 走遍棋盘上全部64个方格。编制非递归程序, 求出马的行走路线, 并按求出的行走路线, 将数字1, 2, …, 64依次填入一个8×8的方阵, 输出之。 7. 魔王语言解释 【问题描述】 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话, 没有人能昕得懂, 但她的语言是能够逐步解释成人能听懂的语言, 因为她的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1) (2) 在这两种形式中, 从左到右均表示解释。试写一个魔王语言的解释系统, 把她的话解释成人能听得懂的话。 【基本要求】 用下述两条具体规则和上述规则形式(2)实现。设大写字母表示魔王语言的词汇; 小写字母表示人的语言词汇; 希腊字母表示能够用大写字母或小写字母代换的变量。魔王语言可含人的词汇。 (1) (2) 【测试数据】 B(ehnxgz)B解释成tsaedsaeezegexenehetsaedsae 若将小写字母与汉字建立下表所示的对应关系, 则魔王说的话是”天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。 t d s a e z g x n h 天 地 上 一只 鹅 追 赶 下 蛋 恨 【实现提示】 将魔王的语言自右至左进栈, 总是处理栈顶字符。若是开括号, 则逐一出栈, 将字母顺序入队列, 直至闭括号出栈, 并按规则要求逐一出队列再处理后入栈。其它情形较简单, 请读者思考应如何处理。应首先实现栈和队列的基本操作。 【选作内容】 (1)由于问题的特殊性, 能够实现栈和队列的顺序存储空间共享。 (2)代换变量的数目不限, 则在程序开始运行时首先读入一组第一种形式的规则, 而不是把规则固定在程序中(第二种形式的规则只能固定在程序中)。 8. 航空客运订票系统 【问题描述】 航空客运订票的业务活动包括: 查询航线、 客票预订和办理退票等。试设计一个航空客运订票系统, 以使上述业务能够借助计算机来完成。 【基本要求】 (1)每条航线所涉及的信息有: 终点站名、 航班号、 飞机号、 飞行周日(星期几)、 乘员定额、 余票量、 已订票的客户名单(包括姓名、 订票量、 舱位等级1, 2或3)以及等候替补的客户名单(包括姓名、 所需票量); (2)系统能实现的操作和功能如下: ①录入: 能够录入航班情况, 全部数据能够只放在内存中, 最好存储在文件中; ②查询航线: 根据旅客提出的终点站名输出下列信息: 航班号、 飞机号、 星期几飞行, 最近一天航班的日期和余票额; ③承办订票业务: 根据客户提出的要求(航班号、 订票数额)查询该航班票额情况, 若尚有余票, 则为客户办理订票手续, 输出座位号; 若已满员或余票额少于订票额, 则需重新询问客户要求。若需要, 可登记排队候补; ④承办退票业务: 根据客户提供的情况(日期、 航班), 为客户办理退票手续, 然后查询该航班是否有人排队候补, 首先询问排在第一的客户, 若所退票额能满足她的要求, 则为她办理订票手续, 否则依次询问其它排队候补的客户。 【测试数据】 由读者自行指定。 【实现提示】 两个客户名单可分别由线性表和队列实现。为查找方便, 已订票客户的线性表应按客户姓名有序, 而且, 为插入和删除方便, 应以链表作存储结构。由于预约人数无法预计, 队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上, 由于航线基本不变, 可采用顺序存储结构, 并按航班有序或按终点站名有序。每条航线是这张表上的一个记录, 包含上述8个域、 其中乘员名单域为指向乘员名单链表的头指针, 等候替补的客户名单域为分别指向队头和队尾的指针。 【选作内容】 当客户订票要求不能满足时, 系统可向客户提供到达同一目的地的其它航线情况。读者还可充分发挥自己的想象力, 增加你的系统的功能和其它服务项目。 9. 药店的药品销售统计系统 【问题描述】 设计一系统, 实现医药公司定期对销售各药品的记录进行统计, 可按药品的编号、 单价、 销售量或销售额做出排名。 【基本要求】 在本设计中, 首先从数据文件中读出各药品的信息记录, 存储在顺序表中。各药品的信息包括: 药品编号、 药名、 药品单价、 销出数量、 销售额。药品编号共4位, 采用字母和数字混合编号, 如: A125, 前一位为大写字母, 后三位为数字, 按药品编号进行排序时, 可采用基数排序法。对各药品的单价、 销售量或销售额进行排序时, 可采用多种排序方法, 如直接插入排序、 冒泡排序、 快速排序, 直接选择排序等方法。在本设计中, 对单价的排序采用冒泡排序法, 对销售量的排序采用快速排序法, 对销售额的排序采用堆排序法。 10. 文学研究助手 【问题描述】 文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为"文学研究助手"。 【基本要求】 英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。 【测试数据】 以你的C源程序模拟英文小说,C语言的保留字集作为待统计的词汇集。 【实现提示】 约定小说中的词汇一律不跨行。这样,每读入一行,就统计每个词在这行中的出现次数。出现位置所在行的行号能够用链表存储。若某行中出现了不止一次,不必存多个相同的行号。 如果读者希望达到选做部分(1)和(2)所提出的要求,则首先应把KMP算法改写成如下的等价形式,再将它推广到多个模式的情形。 i=1;j=1; while(i!=s.curlen+1&&j!=t.curlerl十1) { while(j!=0&&s.ch[i]!=t.ch[j]) j=next[j]; //j==O或s.ch[i]==t.ch[j] j++;i++;//每次进入循环体,i只增加一次 } 【选作内容】 (1)模式匹配要基于KMP算法。 (2)整个统计过程中只对小说文字扫描一遍以提高效率。 (3)假设小说中的每个单词或者从行首开始,或者前置一个空格符。利用单词匹配特点另写一个高效的统计程序,与KMP算法统计程序进行效率比较。 (4)推广到更一般的模式集匹配问题,并设待查模式串能够跨行(提示:定义操作GetAChar)。 11. 文本格式化 【问题描述】 输入文件中含有待格式化〈或称为待排版〉的文本,它由多行的文字组成,例如一篇英文文章。每一行由一系列被一个或多个空格符所隔开的字①组成,任何完整的字都没有被分割在两行(每行最后一个字与下一行的第一个字之间在逻辑上应该由空格分开),每行字符数不超过80。除了上述文本类字符之外,还存在着起控制作用的字符:符号"@"指示它后面的正文在格式化时应另起一段排放,即空一行,并在段首缩入8个字符位置。"@"自成一个字。 一个文本格式化程序能够处理上述输入文件,按照用户指定的版面规格重排版面z实现页内调整、 分段、 分页等文本处理功能,排版结果存入输出文本文件中。 试写一个这样的程序。 【基本要求】 (1)输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。 (2)在输出文件中,任何完整的字仍不能分割在两行,行尾不齐没关系,但行首要对齐(即左对齐)。 (3)如果所要求的每页页底所空行数不少于3,则将页号印在页底空行中第2行的中间位置上,否则不印。 (4)版面要求的参数要包含: 页长(PageLength)一一每页内文字(不计页号)的行数。 页宽(PageWedth)一一每行内文字所占最大字符数。 左空白(LeftMargin)-一一每行文字前的固定空格数。 头长(HeadingLength)一一每页页顶所空行数。 脚长(FootingLength)一一每页页底所空行数(含页号行)。 起始页号(StartingPageNumber)一一首页的页号。 【测试数据】 略。注意在标点之后加上空格符。 【实现提示】 能够设:左空白数×2+页宽<=160,即行印机最大行宽,从而只要设置这样大的一个行缓冲区就足够了,每加工完一行,就输出一行。 如果输入文件和输出文件不是由程序规定死,而是可由用户指定,则有两种做法:一是像其它参量一样,将文件名交互地读入字符串变量中;更好的方式是让用户经过命令行指定,具体做法依机器的操作系统而定。 应该首先实现GetAWord(w)这一操作,把诸如行尾处理、 文件尾处理、 多余空格符压缩等一系列"低级"事务留给它处理,使系统的核心部分集中对付排版要求。 每个参数都能够实现缺省值②设置。上述排版参数的缺省值能够分别取56,60,10,5,5和1。 【选作内容】 (1)输入文件名和输出文件名要由用户指定。 (2)允许用户指定是否右对齐,即增加一个参量"右对齐否"(RightJustifying),缺省值可设为"y"(yes)。右对齐指每行最后一个字的字尾要对齐,多余的空格要均匀分布在本行中各字之间。 (3)实现字符填充(characterstuffing)技术。"@"作为分段控制符之后,限制了原文中不能有这样的字。现在去掉这一限制:如果原文中有这样的字,改用两个"@"并列起来 表示一个"@"字。当然,如果原文中此符号夹在字中,就不必特殊处理了。 (4)允许用户自动按多栏印出一页。 12. 简单行编辑程序 【问题描述】 文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、 删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。 被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。一种解决方法是逐段地编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按照这种方法实现一个简单的行编辑程序。设文件每行不超过320个字符,很少超过80个字符。 【基本要求】 实现以下4条基本编辑命令: (1) 行插入。格式:i<行号><回车><文本>.<回车> 将<文本>插入活区中第<行号>行之后。 (2) 行删除。格式:d<行号l>[<空格><行号2>]<回车> 删除活区中第<行号l>行(到第<行号2>行)。例如:"d10"和"d1014"。 (3) 活区切换。格式n<回车> 将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。 (4) 活区显示。格式:p<回车> 逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。 各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号能够等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。 【测试数据】 自行设定,注意测试将活区删空等特殊情况。 【实现提示】 (1)设活区的大小用行数ActiveMULen(可设为100)来描述。考虑到文本文件行长一般为正态分布,且峰值在60到70之间,用320×ActiveMULen大小的字符数组实现存储将造成大量浪费。能够以标准行块为单位为各行分配存储,每个标准行块可含81个字符。这些行块能够组成一个数组,也能够利用动态链表连接起来。一行文字可能占多个行块。行尾可用一个特殊的ASCII字符(如(012)8)标识。另外,还应记住活区起始行号。行插入将引起随后各行行号的顺序下推。 (2)初始化函数包括:请用户提供输入文件名(空串表示无输入文件)和输出文件名,两者不能相同。然后尽可能多地从输入文件中读入各行,但不超过ActiveMULen-LX的值能够自定,例如20。 (3)在执行行插入命令的过程中,每接收到一行时都要检查活区大小是否已达ActiveMaxLen。如果是,则为了在插入这一行之后仍保持活区大小不超过ActiveMaxLen应将插入点之前的活区部分中第一行输出到输出文件中;若插入点为第一行之前,则只得将新插入的这一行输出。 (4)若输入文件尚未读完,活区切换命令可将原活区中最后几行留在活区顶部,以保持阅读连续性;否则,它意味着结束编辑或开始编辑另一个文件。 (5)可令前三条命令执行后自动调用活区显示。 【选作内容】 (1)对于命令格式非法等一切错误作严格检查和适当处理。 (2)加入更复杂的编辑操作,如对某行进行串替换; 在活区内进行模式匹配等, 格式能够为S<行号>@<串1>@<串2><回车>和m<串><回车>。 13. 串基本操作的演示 【问题描述】 如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试实现串类型,并写一个串的基本操作的演示系统。 【基本要求】 在教科书4.2.2节用堆分配存储表示实现HString串类型的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数)。参数合法性检查必须严格。 利用上述基本操作函数构造以下系统:它是一个命令解释程序,循环往复地处理用户键入的每一条命令,直至终止程序的命令为止。命令定义如下: (1)赋值。 格式: A <串标识> <回车> 用<串标识>所表示的串的值建立新串,并显示新串的内部名和串值。例:A ‘Hi!’ (2)判相等。格式: E <串标识1> <串标识2> <回车> 若两串相等,则显示"EQUAL",否则显示"UNEQUAL"。 (3)联接。 格式:C <串标识1> <串标识2> <回车> 将两串拼接产生结果串,它的内部名和串值都显示出来。 (4)求长度。格式:L〈串标识> <回车> 显示串的长度。 (5)求子串。格式:S <串标识> +<数1>+<数2><回车> 如果参数合法,则显示子串的内部名和串值。<数>不带正负号。 (6)子串定位。格式:I <串标识1> <串标识2> <回车> 显示第二个串在第一个串中首次出现时的起始位置。 (7)串替换。格式: R <串标识1> <串标识2> <串标识3> <回车> 将第一个串中所有出现的第二个串用第三个串替换,显示结果串的内部名和串值,原串不变。 (8)显示。格式:P <回车> 显示所有在系统中被保持的串的内部名和串值的对照表。 (9)删除。格式:D <内部名> <回车> 删除该内部名对应的串,即赋值的逆操作。 (10)退出。格式:Q <回车> 结束程序的运行。 在上述命令中,如果一个自变量是串,则应首先建立它。基本操作函数的结果(即函数值)如果是一个串,则应在尚未分配的区域内新辟空间存放。 【测试数据】 自定。但要包括以下几组: (1)E ‘’ ‘’<回车>,应显示"EQUAL"。 (2)E ‘abc’ ‘abcd’<回车>,应显示"UNEQUAL"。 (3)C ‘ ‘ ‘ ‘ <回车>,应显示"。 (4)I ‘a’ ‘’ <回车>,应报告:参数非法。 (5)R ‘aaa’ ‘aa’ ‘b’<回车>,应显示'ba’ (6)R ‘aaabc’ ‘a’ ‘aab’<回车>,应显示’aabaabaabbc’。 (7)R ‘Faaaaaaaa’ ‘aaaa’ ‘ab’,<回车>,应显示’abab’。 【实现提示】 【选作内容】 (1) 串头表改用单链表实现。 (2) 对命令的格式(即语法)作严格检查,使系统既能处理正确的命令,也能处理错误的命令。注意,语义检查(如某内部名对应的串已被删除而无定义等)和基本操作参数合法性检查仍应留给基本操作去做。 (3) 支持串名。将串名(可设不超过6个字符)存于串头表中。命令(1)(3)(5)要增加命令参数<结果串名>;命令(7)中的<串标识1> 改为<串名>,并用此名作为结果串名,删除原被替串标识,用<串名>代替<串标识>定义和命令解释中的内部名。每个命令执行完毕时立即自动删除无名串。 14. 程序分析 【问题描述】 读入一个C程序,统计程序中代码、 注释和空行的行数以及函数的个数和平均行数,并利用统计信息分析评价该程序的风格。 【基本要求】 (1) 把 C 程序文件按字符顺序读入源程序; (2) 边读入程序,边识别统计代码行、 注释行和空行,同时还要识别函数的开始和结束,以便统计其个数和平均行数。 (3) 程序的风格评价分为代码、 注释和空行三个方面。每个方面分为 A,B,C 和 D 四个等级 , 等级的划分标准是 : A级 B级 C级 D级 代码(函数平均长度) 10~15行 8~9或16~20行 5~7或21~24行 <5或>24行 注释(占总行数比率) 15~25% 10~14或26~30% 5~9或31~35% <5%或>35% 空行(占总行数比率) 15~25% 10~14或26~30% 5~9或31~35% <5%或>35% 【测试数据】 先对较小的程序进行分析。当你的程序能正确运行时,对你的程序本身进行分析。 【实现提示】 为了实现的方便,可作以下约定: (1) 头两个字符是 FFF 的行称为注释行(该行不含语句)。除了空行和注释行外,其余均为代码行(包括类型定义、 变量定义和函数头)。 (2) 每个函数代码行数(除去空行和注释行)称为该函数的长度。 (3) 每行最多只有一个"{" 、 "}"、 "switch" 和"struet"(便于识别函数的结束行)。 【选作内容】 (1) 报告函数的平均长度。 (2) 找出最长函数及其在程序中的位置。 (3) 允许函数的嵌套定义,报告最大的函数嵌套深度。 15. 稀疏矩阵运算器 【问题描述】 稀疏矩阵是指那些多数元素为零的矩阵。利用 " 稀疏 " 特点进行存储和计算能够大大 节省存储空间 , 提高计算效率。实现一个能进行稀疏矩阵基本运算的运算器。 【基本要求】 以"带行逻辑链接信息"的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、 相减和相乘的运算。稀疏矩阵的输入形式采用三元组表示 , 而运算结果的矩阵则以一般的阵列形式列出。 【实现提示】 1. 首先应输入矩阵的行数和列数 , 并判别给出的两个矩阵的行、 列数对于所要求作 的运算是否相匹配。可设矩阵的行数和列数均不超过 20 。 2. 程序能够对三元组的输入顺序加以限制 , 例如 , 按行优先。注意研究教科书 5.3.2 节中的算法 , 以便提高计算效率。 3. 在用三元组表示稀疏矩阵时 , 相加或相减所得结果矩阵应该另生成 , 乘积矩阵也 可用二维数组存放。 【选作内容】 1. 按教科书 5.3.2 节中的描述方法 , 以十字链表表示稀疏矩阵。 2. 增添矩阵求逆的运算 , 包括不可求逆的情况。在求逆之前 , 先将稀疏矩阵的内部表示改为十字链表。 16. 多维数组 【问题描述】 设计并模拟实现整型多维数组类型。 【 基本要求】 尽管 C 等程序设计语言已经提供了多维数组 , 但在某些情况下 , 定义用户所需的多维数组很有用的。经过设计并模拟实现多维数组类型 , 能够深刻理解和掌握多维数组。整型多维数组应具有以下基本功能 : (1) 定义整型多维数组类型 , 各维的下标是任意整数开始的连续整数 ; (2) 下标变量赋值 , 执行下标范围检查 ; (3 〉同类型数组赋值 ; (4) 子数组赋值 , 例如 ,a[1..n]=a [2..n+1];a[2..4][3..5]=b[1..3][2..4]; (5) 确定数组的大小。 【 测试数据】 由读者指定。 【实现提示】 各基本功能能够分别用函数模拟实现 , 应仔细考虑函数参数的形式和设置。 定义整型多维数组类型时 , 其类型信息能够存储在如下定义的类型的记录中: #define MaxDim 5 Typedef struct int dim , BoundPtr lower , Upper; ConstPtr constants; )NArray,*NarrayPtr; 整型多维数组变量的存储结构类型可定义为: Typedef struct{ ElemType *elem; Int num; NArrayType TypeRecord; }NArrayType; 【选作内容】 (1) 各维的下标是任意字符开始的连续字符。 (2) 数组初始化。 (3) 可修改数组的下标范围。 17. 简单LISP算术表示式计算器 【问题描述】 设计一个简单的 LISP 算术表示式计算器。 简单 LISP 算术表示式(以下简称表示式)定义如下: (1) 定义一个自然数 (2)(运算符 表示式 表示式) 例如,6,(+45),(+(+25)8) 都是表示式,其值分别为6,9和15。 【基本要求】 实现LISP加法表示式的求值。 【测试数据】 6,(+45),(+(+25)8),(+2(+58)),(+(+(+12)(+34))(+(+56)(+78))) 【 实现提示】 写一个递归函数: int Evaluate(FILE * CharFile) 字符文件 CharFile 的每行是一个如上定义的表示式。每读入CharFile 的一行,求出并返回表示式的值。 能够设计以下辅助函数 status isNumber(char ReadInChar); //视ReadInchar 是否是数字而返回 TRUE 或 FALSE 。 int TurnToInteger(char IntChar); // 将字符’0’..’9’ 转换为整数 0..9 【选做内容】 (1) 标准整数类型的 LISP 加法表示式的求值。 (2) 标准整数类型的 LISP 四则运算表示式的求值。 (3) LISP 算术表示式的语法检查。 18. 重言式判别 【问题描述】 一个逻辑表示式如果对于其变元的任一种取值都为真, 则称为重言式; 反之, 如果对于其变元的任一种取值都为假, 则称为矛盾式; 然而, 更多的情况下, 既非重言式, 也非矛盾式。试写一个程序, 经过真值表判别一个逻辑表示式属于上述哪一类。 【基本要求】 (1) 逻辑表示式从终端输入, 长度不超过一行。逻辑运算符包括 "|", "&" 和 "~", 分别表示或、 与和非, 运算优先程度递增, 但可由括号改变, 即括号内的运算优先。逻辑变元 为大写字母。表示式中任何地方都能够含有多个空格符。 (2) 若是重言式或矛盾式, 能够只显示"True forever", 或"False forever", 否则显示 "Satisfactible" 以及变量名序列, 与用户交互。若用户对表示式中变元取定一组值, 程序就求出并显示逻辑表示式的值。 【测试数据】 (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)I: 初始化(Initialization)。从终端读入字符集大小n , 以及n个字符和n个权值, 建立哈夫曼树, 并将它存于文件hfmTree中。 (2)E: 编码(Encoding)。利用已建好的哈夫曼树(如不在内存, 则从文件hfmTree中读人), 对文件ToBeTran中的正文进行编码, 然后将结果存入文件CodeFile中。 (3)D: 译码(Decoding)。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码, 结果存入文件TextFile中。 (4)P: 打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上, 每行 50 个代码。同时将此字符形式的编码文件写入文件 CodePrin 中。 (5)T: 打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上, 同时将此字符形式的哈夫曼树写入文件TreePrint中。 【测试数据】 (1)利用教科书例 6-2 中的数据调试程序。 (2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树 , 并实现以下报文的编码和译码: "THIS PROGRAM IS MY FAVORITE"。 字符 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 【选作内容】 (1)上述文件CodeFile中的每个"0"或"1"实际上占用了一个字节的空间, 只起到示意或模拟的作用。为最大限度地利用编码存储能力, 试改写你的系统, 将编码结果以二进制形式存放在文件CodeFile中。 (2)修改你的系统, 实现对你的系统的原程序的编码和译码(主要是将行尾符编/译码问题)。 (3)实现各个转换操作的源/目文件, 均由用户在选择此操作时指定。 20. 图遍历的演示 【问题描述】 很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序, 演示在连通的无向图上访问全部结点的操作。 【基本要求】 以邻接多重表为存储结构, 实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点, 分别输出每种遍历下的结点访问序列和相应生成树的边集。 【测试数据】 任选国内城市, 起点为合肥, 暂时忽略里- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 题目 报告 范例 样本
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文