级软件工程专业《数据结构与算法》上机题目 1.docx
- 文档编号:29382093
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:18
- 大小:22.64KB
级软件工程专业《数据结构与算法》上机题目 1.docx
《级软件工程专业《数据结构与算法》上机题目 1.docx》由会员分享,可在线阅读,更多相关《级软件工程专业《数据结构与算法》上机题目 1.docx(18页珍藏版)》请在冰豆网上搜索。
级软件工程专业《数据结构与算法》上机题目1
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的内容)
abcdefg(拆分后表B的内容)
(!
<>(拆分后表C的内容)
1(拆分后表A是中心对称的)
SampleInput
1aabccd2e3f(!
3c<2g1>?
SampleOutput
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!
。
SampleInput
12*(12.4+20.15)/25#
SampleOutput
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都为零时结束。
Output
每组测试数据的输出占一行,输出的内容为“Huffman编码的压缩比”。
SampleInput
88
162162162161162157163161
162162162161162157163161
162162162161162157163161
162162162161162157163161
162162162161162157163161
164164158155161159159160
160160163158160162159156
159159155157158159156157
00
SampleOutput
Huffman编码的压缩比为2.72:
1
HINT
在OJ系统中提交该实验的代码时,请将图像压缩存储结果保存到文件的代码和压缩图像解码结果保存到文件的代码都注释掉,只输出Huffman树的压缩比即可。
压缩结果和解码结果在检查程序时查看。
1871:
2015级软件工程专业《算法与数据结构》实验4:
小型文本搜索引擎的实现(15学时)
Description
随着互联网技术的飞速发展,如何从海量数据中查找所需内容,不仅是科研人员关注的热点问题,许多IT公司也先后推出了各自的搜索引擎,如:
Google、XX、Bing等。
搜索引擎的核心是如何对Web网页构建有效的索引,以便能够快速查找和匹配查询关键词,并及时地将搜索结果返回给用户。
在这个实验中,请实现一个英文单词的二叉查找树,并可根据输入的英文单词进行搜索,同时可给出单词出现的次数。
具体要求如下:
(1)构造二叉查找树:
①读入文本内容,过滤掉阿拉伯数字和标点符号,并将英文字母的大写形式全部转换成小写形式。
②按照英文字母表的顺序构造英文单词的二叉查找树。
当两个英文单词的首字母相同时,按第二个字母进行排序,依次类推。
③当待插入的单词已在二叉查找树中,则将该单词的出现次数增1。
(2)遍历二叉查找树:
①搜索:
输入一个待检索单词,在二叉查找树中进行查找,如果能找到该单词,则输出该单词及其出现次数;
②实现二叉查找树的中序遍历,并将遍历结果输出到屏幕上。
(3)删除结点:
给定一个停用词列表(停用词是指对搜索没有作用的词,如:
of,and,a,an,the等等),将二叉查找树中的属于停用词表中的单词依次删除(不仅删除结点,还需清空记录该单词位置信息的单链表)。
Input
输入有以下四种情况:
当输入大写英文字母'T'时,表示下一行是文本内容,包含若干英文单词、标点符号以及阿拉伯数字,用于构建二叉查找树。
文本内容以字符‘@’结束,文本中的每个英文单词的长度不超过30个字母。
当输入大写英文字母'S'时,表示后面跟着的若干行都是停用词,每个停用词占一行,当某行是字符‘#’时,表示停用词输入完毕。
对每个停用词,都需要删除二叉查找树中的相应结点,即:
每输入一个停用词,执行一次删除结点的操作。
当输入大写英文字母'V'时,表示中序遍历二叉查找树。
遍历结果中的每个单词占一行,先输出该单词,然后输出一个空格,再输出该单词出现的次数。
当输入大写英文字母'Q'时,表示后面跟着的若干行都是查询词,每个查询词占一行,当某行是字符‘#’时,表示查询词输入完毕。
对每个查询词,都需要在二叉查找树中的搜索相应结点,如果找到,则输出该单词及其出现次数,如果未找到,则输出-1。
每个查询词的查询结果占一行,先输出该单词,然后输出一个空格,再输出该单词出现的次数。
当输入大写英文字母'X'时,表示输入结束。
Output
按照输入的要求输出相应结果。
提示:
只有在'V'或者'Q'状态下,才有内容需要输出。
SampleInput
T
AccordingtocharacteristicsofMongolianwordformation,amethodforremovinginflectionalsuffixesfromwordimagesoftheMongolianKanjurisproposedinthispaper.@
V
Q
the
#
S
after
against
all
almost
also
although
among
an
and
#
Q
the
#
S
the
their
then
there
therefore
these
they
this
those
though
three
to
two
#
Q
the
#
V
T
ThispaperpresentsanewmethodtorecognizemachineprintedtraditionalMongoliancharactersbyusingbackpropagation(BP)neuralnetworks.@
Q
the
#
V
Q
mongolian
ocr
#
X
SampleOutput
a1
according1
characteristics1
for1
formation1
from1
images1
in1
inflectional1
is1
kanjur1
method1
mongolian2
of2
paper1
proposed1
removing1
suffixes1
the1
this1
to1
word2
the1
the1
-1
a1
according1
characteristics1
for1
formation1
from1
images1
in1
inflectional1
is1
kanjur1
method1
mongolian2
of2
paper1
proposed1
removing1
suffixes1
word2
-1
a2
according1
back1
bp1
by1
characteristics1
characters1
for1
formation1
from1
images1
in1
inflectional1
is1
kanjur1
machine1
method2
mongolian3
networks1
neural1
new1
of2
paper2
presents1
printed1
propagation1
proposed1
recognize1
removing1
suffixes1
this1
to1
traditional1
using1
word2
mongolian3
-1
HINT
提示1:
char*到string变量可以直接用=,因为string类重载了=操作符,而且提供了以char*为源的拷贝构造函数。
但string变量到char*就不能用=,但是string类的c_str()函数可以返回它的字符串的首地址,因此可以用如下方法将string变量赋给char*。
(希望这个提示对你实现该实验有帮助!
)
提示2:
为了保证程序编译正确,请将以下两个头文件均加入程序开头处:
#include
#include
提示3:
结点类的参考定义:
classNode{
private:
char*key;//英文单词
intcount;//出现次数
Node*leftChild;
Node*rightChild;
};
提示4:
二叉查找树参考定义:
classBinary{
private:
Node*root;
public:
Binary();
~Binary();
boolfind(Node*,constchar*,Node*&,Node*&);//查找
voidprint(Node*);//中序遍历
boolinsert(char*&);//插入一个元素
booldeletel(Node*,constchar*);//删除一个元素
Node*getRoot();//获得根节点
};
1872:
2015级软件工程专业《数据结构与算法》实验5:
最小生成树的应用(6学时)
Description
[问题描述]
N个居民小区之间需要铺设煤气管道。
假设任意两个居民小区之间都可以铺设煤气管道,但由于地理环境不同,所需要的费用也不尽相同。
设计一个最佳方案使得这N个居民小区之间铺设煤气管道所需总投资尽可能小。
[实验目的]
(1)掌握图的邻接矩阵表示法;
(2)掌握无向图的最小生成树算法(Prim和Kruskal);
(3)运用最小生成树算法解决实际问题。
Input
输入格式要求:
首先构建N个居民小区的铺设管道成本图模型,输入数据的第一行包含两个正整数N和M(1 小区分别以0~N-1编号。 (当输入的N和M都为零时结束。 )接下来输入M行铺设的管道信息。 每一行有三个整数x,y,z,分别表示小区x、小区y,以及铺设管道的成本z。 如输入: 33 ---3个小区,3条管道(第一个图) 011 --第1条管道信息 023 ---第2条管道信息 121 ---第3条管道信息 31 ---3个小区,1条管道(第二个图) 011 ---第1条管道信息 00 ---输入结束标志 Output 输出格式要求: 选择一种建设成本最小的方案,输出总的投资费用。 (如果费用太高,无法建设,则输出“费用太高,无法建设! ”。 )如上述输入数据的输出为: 2 ---第1个图的输出结果 费用太高,无法建设! ---第2个图的输出结果 SampleInput 33 011 023 121 31 011 00 SampleOutput 2 费用太高,无法建设! HINT 1873: 2015级软件工程专业《数据结构与算法》实验6: 内部排序算法(9学时~12学时) Description [问题描述] 排序是计算机程序设计中一种重要操作,它的功能是将一个数据元素(或记录)的任意序列重新排列成一个按关键字有序的序列。 本实验熟悉几种典型的排序方法,并对各种算法的特点、使用范围和效率进行进一步的了解。 [实验目的] (1) 深刻理解排序的定义和各类排序的算法思想,并能灵活应用。 (2) 掌握各类排序的时间复杂度的分析方法,能从“关键字间的比较次数”分析算法的平均情况、最好情况和最坏情况。 (3) 理解排序方法“稳定”和“不稳定”的含义。 (4) 对结果做出简单的分析,诸如稳定性、最好情况、最坏情况、平均情况等。 [实验内容及要求] (1) 实现简单插入排序、希尔排序、快速排序、堆排序这4种算法。 (2) 根据给定的输入数据实现数据的非递减排序,统计关键字的比较次数和元素移动次数。 (3) 注意: 需在算法的适当位置插入对关键字的比较次数和移动次数的计数,关键字的交换计3次移动)。 Input 输入格式: 输入关键字序列,以-1为结束标志。 (输入个数不超过1000)如: 2324105089463223496012-1 Output 输出格式: 第一行输出排序后的结果,第二行输出关键字的比较次数和移动次数。 例如,上述输入的排序输出结果为: 1012232324324649506089 4138 -----(简单插入排序的比较次数为41,移动次数为38) 2556 -----(希尔排序的比较次数为25,移动次数为56) 4936 -----(快速排序的比较次数为49,移动次数为36) 32 84 -----(堆排序的比较次数为32,移动次数为84) SampleInput 7842651-8621120-1 SampleOutput -80112246781265 6260 2658 5436 3693 HINT 1.注意比较次数的计算,只统计关键码的比较次数,非关键码的比较不计数; 像操作: R[i]>R[j] //关键码的比较计数 像操作: i>j //非关键码的比较不计数 2.注意移动次数的计算,凡是涉及到关键码的移动(或赋值),就计数,否则不计数。 例1: 堆排序中某段代码 heap[current]=heap[child]; //移动次数+1 current=child; //不计入移动次数 child=2*child; //不计入移动次数 例2: 直接插入排序中某段代码 if(R[i].key { R[0]=R[i]; //移动次数+1 for(j=i-1;R[0].key { R[j+1]=R[j]; //移动次数+1 } R[j+1]=R[0]; //移动次数+1 }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法 级软件工程专业数据结构与算法上机题目 软件工程 专业 数据结构 算法 上机 题目