2015级软件工程专业《数据结构与算法》上机题目 (1)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1868: 2015级软件班《数据结构与算法》实验1:线性表的

应用(6学时)

Description

输入一个字符串,按照字符串的输入顺序创建一个线性表A。线性表A

中包含有三类字符:数字字符、字母字符、其他字符。试写一个函数实

现对线性表A的拆分,使得线性表A、B、C分别各自指向同一类字符。

要求如下:

(1)在拆分时,必须使用原表A的结点空间,不能额外创建新结点。(2)拆分后,原表A指向数字字符,且其内容的前后次序与原表中的

前后次序必须一致,新的表B指向字母字符,新的表C指向其他字符。

其中要求删除B中的重复结点(如“abbcdexec”,变为“abcdex”)。(3)判断拆分后的表A是否是中心对称的(如123321或12321都是中

心对称的),若是,则输出1,否则输出0。

Input

输入格式要求:输入一行字符串,可以带空格,并以‘?’做为输入结束标志,中间不能输入’?‘。字符串长度不做限制。

如可以输入:

1aabccd2e3f(!3c<2g1>?

Output

输出格式要求:前3行分别输出表A、B、C的内容(若某个表为空表,则相应行输出-1),第4行输出表A是否为对称的标志。

如输出:

123321 (拆分后表A的内容)

abcdef g (拆分后表B的内容)

(!<> (拆分后表C的内容)

1 (拆分后表A是中心对称的)

Sampl e Input

1aabccd2e3f(!3c<2g1>?

Sampl e Output

123321

abcdefg

(!<>

1

HINT

为了方便判断线性表是否为中心对称的,可以使用双向链表结构(但不是必须的)。

1869: 2015级软件工程专业《数据结构与算法》实验2:表

达式求值(9学时~12学时)Description

表达式求值是计算机实现程序设计语言中的基本问题之一,也是栈应用的一个典型例子,通过本实验,对输入的一个表达式进行求值。

[实验目的]

掌握栈的应用;掌握算符优先表达式求值的算法;掌握字符串处理和数值的转换。

具体要求如下:

(1)表达式以字符串形式输入,并以‘#’结束。如输入:12*(12.4+20.15)/25#

(2)运算数可以是实数,运算符有+ - * / ,带括号,可以输入以下4个函数:平方sqr()、正弦sin() 、余弦cos()、四舍五入取整rd()。函数的优先级要高于+ - * /。

(3)对输入的表达式进行计算,计算结果要求必须保留小数点后2位。

(4)能够有效判别表达式的输入格式是否有误(如缺失操作数、括号不匹配、函数名错误等),若输入格式错误,输出为“error!”。

Input

表达式以字符串形式输入,并以‘#’结束,可输入的符号为:数字、小数点、“+ - * /”4个运算符、括号、以及指定的4个函数名,其他符号为非法符号,如出现则意味着输入格式错误。下面是一些输入示例:

12*(12.4+20.15)/25# ---格式正确

12.001+(2*5/37# ---格式错误

12*sin(30)+sqr(2.3)# ---格式正确

12ab+5#

---格式错误

12+5-*2 # ---格式错误

sin(20)+cosa(30)# ---格式错误Output

若表达式输入格式正确,则输出计算结果,结果要求必须保留2位小数,如输入:12*(12.4+20.15)/25# ,输出为:15.62。如输出为16或15.624,都为错误。

若表达式输入格式错误,则输出为:error!,如输入:15.4/(2-sin(5.12)*)+21#,输出为:error!。

Sampl e Input

12*(12.4+20.15)/25#

Sampl e Output

15.62

HINT

1. 核心算法用栈结构来实现;

2. 首先需对输入的表达式字符串进行解析,分离出操作数和运算符,在分离过程中,可以对非法的操作数和运算符进行判错。若输入的操作数和运算符正确,则分别入栈;

3. 函数可以看成是单目运算符,即只需一个操作数;

4. 注意函数的优先级要高于其他的运算符,请正确设置运算符优先级表;

5. 在出栈的过程中,可以判别括号匹配和操作数匹配的错误。

1870: 2015级软件工程专业《算法与数据结构》实验3:面向数字图像的Huffman编/译码器的设计与实现(12学时)Description

“Huffman-树”不仅能对文本数据进行编码、译码,提高文本数据的传输效率,同时它也能对多媒体数据(如:数字图像、视频等)进行编码、译码,从而实现多媒体数据的压缩存储。目前,在Web互联网上广泛使用的JPEG图像格式就采用了Huffman编码,与其他图像格

式(如:BMP、TIF等)相比,同一副图像采用JPEG格式时所需的存储空间是最少的。在这个实验中,请设计一个Huffman编/译码器,并模拟数字图像的压缩存储(编码)和解码显示(译码)的过程。

(1)构造“Huffman-树”:

①读入一个大小为N*M(N为图像的高度,M为图像的宽度)的灰度图像块,该图像中的每个像素(元素)的取值范围是0~255,取值为0表示该像素是“黑色”,取值为255表示该像素是“白色”,其他取值表示介于“黑色”和“白色”之间的灰度值。

②统计读入图像块中每种灰度值出现的次数,并去除出现次数为零的灰度值,以此作为构造“Huffman-树”所需的权值。

③说明:在构造“Huffman-树”的过程中,当有多个待合并元素的权值相同时,每次选择灰度值较小的两个元素进行合并。

(2)Huffman编码(压缩存储):读入新的灰度图像块,利用已建立好的“Huffman-树”对其进行编码,将图像的宽度、高度信息和编码结果保存到文件(如:compress_image.txt)中,同时计算Huffman编码的压缩比并输出。压缩比的计算公式如下:压缩比=原始图像所需比特数/压缩后图像所需比特数。(3)Huffman译码(解码显示):读入压缩存储的灰度图像,利用已建立好的“Huffman-树”对其进行译码,将译码结果按照原有宽度、高度还原图像,并将还原之后的图像保存到文件(如:decoding_image.txt)中。

Input

该实验有多组测试数据。

每组测试数据的第一行包含两个以空格间隔的正整数N和M,它们的取值范围都为[1, 100],分别表示图像的高度和宽度;之后的N行数据是一个灰度图像,每行含有M个以空格间隔的正整数P(0≤P≤255),P表示对应像素的灰度值。

当输入的N和M都为零时结束。

相关文档
最新文档