《算法与数据结构》实验报告(2014) 内蒙古大学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法与数据结构》实验报告
班级____________ 姓名___________ 学号_____________
实验1:线性表的应用(6学时)
[问题描述]
一个线性表A中包含有三类字符:数字字符、字母字符、其他字符。试写一个函数实现对线性表A的拆分,使得线性表A、B、C分别各自指向同一类字符。
[实验目的]
(1)熟练掌握链表的基本操作;
(2)运用链表解决实际问题。
[实验内容及要求]
(1)首先通过输入字符建立线性表A;
(2)在拆分时,必须使用原表A的结点空间,不能额外创建新结点;
(3)拆分后,原表A指向数字字符,且其内容的前后次序与原表中的前后次序必须一致,新的表B指向字母字符,新的表C指向其他字符。其中要求删除B中
的重复结点(如“abbcdexec”,变为“abcdex”)。
(4)分别输出表A、B(删除重复结点后的内容)、C的内容;
(5)判断拆分后的表A是否是中心对称的(如123321或12321都是中心对称的),若是,则输出1,否则输出0。
[示例输入/输出]
示例输入:
1aabccd2e3f(!3c<2g1> (用于创建原表A的输入字符串)
示例输出:
123321 (拆分后表A的内容)
abcdef (拆分后表B的内容)
(!<> (拆分后表C的内容)
1 (拆分后表A是中心对称的)
《算法与数据结构》实验报告
班级____________ 姓名___________ 学号_____________
实验2:表达式求值(6学时)
[问题描述]
表达式求值是计算机实现程序设计语言中的基本问题之一,也是栈应用的一个典型例子,通过本实验,对输入的一个表达式进行求值。
[实验目的]
(1)掌握栈的应用;
(2)掌握算符优先表达式求值的算法;
(3)掌握字符串处理和数值的转换;
(4)练习上述知识的综合应用。
[实验内容及要求]
(1)表达式以字符串形式输入。如:12*(12.4+20.15)/25,结果以字符串形式输出(保留小数点后2位)。
(2)运算数是实数,运算符有+ - * / ,带括号,常用函数有:开方sqr()、正弦sin() 、余弦cos()、四舍五入取整rd()。函数的优先级高于+ - * /。
(3)能够有效判别表达式的输入格式是否有误(如缺失操作数、括号不匹配、函数名错误等),若输入错误,输出为“error!”。
[示例输入/输出]
示例输入:
12*(12.4+20.15)/25
15.4/(2-sin(5.12)*)+21
示例输出:
15.62
error!
《算法与数据结构》实验报告
班级____________ 姓名___________ 学号_____________
实验3:迷宫最短路径问题求解(9学时)
[问题描述]
以一个M×N的长方阵表示迷宫。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的最佳通路。
[实验目的]
(1)掌握栈的存储特点及其实现;
(2)掌握栈的出栈和入栈操作;
(3)灵活应用栈和队列。
[实验内容及要求]
(1)以一个M×N的长方阵表示迷宫,1和0分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的最佳通路,或得出没
有通路的结论。(所谓最佳通路是指在所有的通路中输出步长最短的一条通
路。)
(2)首先创建一个迷宫,输入格式为:M N,指定迷宫的行数和列数,然后按行输入迷宫的每一行的布局信息(参见输入示例)。求得的通路以三元组(i, j, d)的形
式输出(每行输出5组),其中:(i, j)表示迷宫的坐标,d表示走到下一坐标的
方向(值为1、2、3、4,分别对应右、下、左、上方向)。迷宫入口坐标(左上
角)为(1,1),出口坐标为右下角。
(3)提示:用栈和队列都可实现。使用栈从所有可能的通路中寻找最短路径。使用队列可直接确定最短路径。
[示例输入/输出]
示例输入:
4 5
1 0 0 0 0
1 1 1 0 1
1 0 0 1 1
1 1 1 1 1
示例输出:
(1,1,2)(2,1,2)(3,1,2)(4,1,1)(4,2,1)(4,3,1)(4,4,1)(4,5,0)示例输入:4 4
1 0 0 1
1 0 1 1
1 0 0 1
1 0 1 1
示例输出:没有通路
《算法与数据结构》实验报告
班级____________ 姓名___________ 学号_____________
实验4:Huffman 编/译码器的设计与实现(9学时)
[问题描述]
设字符集为26个英文字母,其出现频度如下表所示。先建哈夫曼树,再利用此树对报文“This program is my favorite”进行编码和译码。
[实验目的]
(1) 掌握“Huffman-树”的构造过程;
(2) 对给定的原字符串进行编码。
(3) Decoding :对给定的编码串进行译码(或解码)。
[实验内容及要求]
(1) 构造“Huffman-树”; (2) 输出报文的编码;
(3) 输出报文编码的压缩比;
(4)
读入一串编码符号,输出解码结果。
[选作内容]
(1) 字符的出现频数能否从指定文件中统计而得? (2) 对指定的文件进行编码/解码。
[示例输入/输出]
输出数据为:
51 48 1 15 63 57 20 32 5 1 频度 z y x w v u t 字符 1
16
1
18
8
23
80
频度
p 21
f q 15
g r 47
h s o n m l k j 字符 57
103 32 22 13 64 186 频度 i e d c b a 空格
字符