2018年兰州理工大学计算机与通信学院408计算机学科专业基础综合[专业硕士]之数据结构考研基础五套测试题
● 摘要
一、算法设计题
1. 以顺序存储结构表示串,设计算法。求串S 中出现的第一个最长重复子串及其位置并分析算法的时间复杂度。
【答案】算法如下:
//串用一维数组s 存储,本算法求最长重复子串,返回其长度
//index记最长的串在s 串中的开始位置,max
记其长度
//length记局部重复子串长度,i 为字符数组下标
//上一个重复子串结束
//当前重复子串长
度大,则更新
max
//初始化下一重复子串的起始位置和长度
(”最长重复子串的长度为
.//算法结束
,在串中的位置
,max ,index) ;
时间复杂度:算法的时间复杂度为O(n),每个字符与其后继比较一次。
2. 假设串的存储结构如下所示,编写算法实现串的置换操作。
【答案】算法如下:
//s和t 是用一维数组存储的串,本算法将s 串第i 个字符开始连续j 个字符用t 串置换,操作成功返回1,否则返回0表示失败
//检査参数及置换后的长度的合法性
//若S 串被替换的子串长度小于t 串长度,则S 串部分右移
//S串中被替换子串的长度小于t 串的长度
//将t 串复制到S 串的适当位置
//算法结束
//本算法是串的置换操作,将串S 中所有非空串t 相等且不重叠的子串用V 代替
//判断S 是否有和t 相等的子串
//串S 中包含和t 相等的子串
//creat操作是将串常量(此处为空串) 赋值给
temp
//求串t 和s 的长度
//用串v 替换t 形成部
分结果
//将串s 中串后的部分形成新的s 串
//求串s 的长度
//在新s 串中再找串t 的位置
//将串temp 和剩余的串s 连接后再赋值给s
}//if结束
//算法结束
3. 编程:假设以数组Q[m]存放循环队列中的元素,同时以rear 和length 分别指示环形队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件,并写出相应的初始化(initqueue),插入(enqueue)和删除(dequeue)元素的操作。
【答案】定义队列:
//循环队列占m 个存储单元
//rear指向队尾元素,length 为元素个数
(1)设cq 是seQueue 类型变量,则当(2)队列的初始化:
//cq为循环队列,本算法进行队列初始化
时队列空,当 时队列满。
//算法结束 (3)队列的插入:
//cq是已如上定义的循环队列,本算法将元素x 入队
//队满
.
//计算插入元素位置
//将元素x 入队列
//修改队列长度
//算法结束
//cq是已如上定义的循环队列,本算法是出队算法,且返回出队元素
//队空
;//出队元素位置
//修改队列长度
//返回队头元素
//算法结束
4. 己知L 为链表的头结点地址,表中共有m(m>3) 个结点,从表中第i 个结点(l<i <m) 起到第m 个结点构成一个循环部分链表,设计将这部分循环链表中所有结点顺序完全倒置的算法。
【答案】算法如下:
//L是有m 个结点的链表的头结点的指针。表中从第个结点到第m 个结点构成循环部分链表//本算法将这部分循环链表倒置
//p是工作指针,初始指向第二结点(已假定i >
l) //pre是前驱结点指针,最终指向第i ﹣i 个结点
//计数器
//查找第i 个结点
//査找结束,P 指向第i 个结点
//暂存第i 个结点的指针
//p指向第i +l 个结点,准备逆置
//上面while 循环结束时,j =i ﹣1现从第i +1结点开始逆置
(4)队列的删除:
相关内容
相关标签