前言
- 终于写完小学期的两个小任务+大任务组合了,这里写一个小指路供后人参考,欢迎指出错误(反正不会改)
小任务题目
作业一:构建哈夫曼树
问题描述
26个英文字母的使用频率如下表所示:
| 字母 | 使用频率 | 字母 | 使用频率 |
|---|---|---|---|
| A | 0.0819 | N | 0.0706 |
| B | 0.0147 | O | 0.0726 |
| C | 0.0383 | P | 0.0289 |
| D | 0.0391 | Q | 0.0009 |
| E | 0.1225 | R | 0.0685 |
| F | 0.0226 | S | 0.0636 |
| G | 0.0171 | T | 0.0941 |
| H | 0.0457 | U | 0.0258 |
| I | 0.0710 | V | 0.0109 |
| J | 0.0041 | W | 0.0159 |
| K | 0.0014 | X | 0.0021 |
| L | 0.0377 | Y | 0.0158 |
| M | 0.0334 | Z | 0.0008 |
根据26个字母及其相应的权重值,设计算法来对其构建一个哈夫曼树,并计算其对应的编码长度。要求实现以下功能:
1. 构建哈夫曼树:根据给定的字符及其权重值,构建出对应的哈夫曼树。
2. 计算编码长度:对于构建出的哈夫曼树,计算每个字符的编码长度,即根节点到该字符叶子节点的路径长度之和。路径长度定义为从根节点到某个节点的边的数量。
3. 输出编码表:根据哈夫曼树,生成字符到对应编码的映射表。将每个字符与其对应的哈夫曼编码打印输出。
4. 对字符串“pneumonoultramicroscopicsilicovolcanoconiosis”进行编码:利用步骤3中生成的编码表,对给定的字符串进行编码,将各个字符替换为其对应的哈夫曼编码。
请设计一个满足上述要求的算法,并给出相应的代码实现。
作业要求
需要提交代码及实验报告。源代码关键部分须包含详细注释。
实验报告需要包含以下内容:
1. 描述程序中所用的算法及其对应的主要思想。
2. 分析程序的时空复杂度。
3. 展示构建的哈夫曼树、编码表,说明26个字母分别对应的编码长度。
4. 给出字符串“pneumonoultramicroscopicsilicovolcanoconiosis”的编码结果
实验报告的一号标题为黑体三号字,二号标题为为黑体小三号字,三号标题为宋体小四号字,中文正文为宋体五号字数字和字母为Times New Roman,1.5倍行距,首行缩进两字符。实验报告 及源代码 命名格式 均为“作业一_ 学号_ 姓名”, 实验报告以word文档形式提交。
作业二 :迷宫寻路
问题描述
以一个 m×n 的长方阵表示迷宫,0 和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。要求实现以下功能:
1. 以链表作存储结构的栈类型,编写一个求解迷宫的非递归程序。求得的通路以 (i,j) 的形式按通路顺序输出,其中(i,j) 为迷宫中的一个坐标。
2. 求得迷宫中所有可能的通路,并输出最短路径。
以下是仅为一条测试数据:左上角 (0,1)为入口,右下角 (11,12)为出口。
13 13
1 0 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 0 1
1 1 1 1 1 0 1 0 1 1 1 0 1
1 0 0 0 1 0 1 0 0 0 1 0 1
1 0 1 1 1 0 1 1 1 0 1 1 1
1 0 0 0 1 0 0 0 1 0 0 0 1
1 0 1 0 1 1 1 0 1 0 1 0 1
1 0 1 0 1 0 0 0 0 0 1 0 1
1 0 1 0 1 0 1 0 1 1 1 0 1
1 0 1 0 0 0 1 0 1 0 0 0 1
1 0 1 1 1 1 1 1 1 0 1 0 1
1 0 0 0 0 0 0 0 0 0 1 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1
0 1
11 12
作业要求
需要提交代码及实验报告。源代码关键部分须包含详细注释。
实验报告需要包含以下内容:
-
描述程序中所用的算法及其对应的主要思想。
-
说明迷宫中是否有通路,求得迷宫中所有可能的通路。
-
输出迷宫通路最短通路路径。
实验报告的一号标题为黑体三号字,二号标题为为黑体小三号字,三号标题为宋体小四号字,中文正文为宋体五号字数字和字母为Times New Roman,1.5倍行距,首行缩进两字符。实验报告及源代码命名格式均为“作业二 _学号_姓名”,实验报告以word文档形式提交。
大作业题目
地铁线路查询
问题描述:
当一个用户从甲地到乙地时,由于不同需求,就有不同的交通路线,有人希望以最短时间到达,有人希望用最少的换乘次数等。请编写一北京地铁线路查询系统,通过输入起始站、终点站,为用户提供两种决策的交通咨询。
设计要求:
1. 提供对地铁线路进行编辑的功能,要求可以添加或删除线路。
2. 提供两种决策:最短时间,最少换乘次数。
3. 中途换乘站换乘耗时为5分钟,地铁在除始发站外每一站停留1分钟。
4. 按照始发站时间、地铁时速及停留时间推算之后各个线路的地铁到站时间。
5. 该系统以人机对话方式进行。系统自动获取当前时间,用户输入起始站,终点站以及需求原则(需求原则包括最短时间,最少换乘次数),系统输出乘车方案:乘几号线,距离,时间,费用,换乘方法等相关信息。
课程设计报告撰写要求:
课程设计报告需要包含以下内容:
1. 描述程序使用的所有数据结构,并列出其对应的抽象数据类型。
2. 描述程序中所用的算法及其对应的主要思想。
3. 尽可能详细地描述整个地铁线路系统的设计与实现的方法及工作的流程。
4. 多种决策对应的程序运行的示例。
5. 代码源码。
实验报告需要包含目录,一号标题为黑体三号字,二号标题为为黑体小三号字,三号标题为宋体小四号字,中文正文为宋体五号字数字和字母为Times New Roman,1.5倍行距,首行缩进两字符。
实验报告以word文档形式提交,命名格式为“学号_姓名”,同源码文件打包,命名为“数据结构课程设计大作业_学号_姓名”,于9月10日23:59之前提交至指定邮箱。
课程设计资源及附件:
-
轨道交通价格为:6公里(含)内3元;6公里至12公里(含)4元;12公里至22公里(含)5元;22公里至32公里(含)6元;32公里以上部分,每增加1元可乘坐20公里。
-
只考虑每个线路首末两站的始发时间,例如对1号线
- 只需考虑“古城”和“环球度假区”两站,古城站是发往环球度假区站的始发站,而环球度假区站是发往古城站的始发站。
- 注意地铁发车时间分为工作日和双休日两种情况,所有发车时刻对应的地铁均为全线运行,即不考虑发车时刻表上不同时刻的列车终点站颜色标注。