2018年温州医科大学眼视光学院生物医学工程学院408计算机学科专业基础综合之数据结构考研核心题库
● 摘要
一、算法设计题
1. 用邻接多重表存储结构,编写FERST-ADJ(G,V) 函数,函数返回值为第一个邻接点,若V 没有邻接点,返回零。
【答案】算法如下:
在邻接多重表g 中,求v 的第一邻接点, 若存在,返回第一邻接点,否则返回
确定顶点v 在邻接多重表向量中的下标, 不考虑不存在v 的情况
返回第一邻接点, 和中必有一个等于
i 取第一个边结点
2. 在二叉排序树的结构中,有些数据元素值可能是相同的,设计一个算法实现按递增有序打印结点的数据域,要求相同的数据元素仅输出一个,算法还应能报出最后被滤掉而未输出的数据元素个数,对如图所示的二叉排序树,输出为:10,12,13,15,18,21,27,35,42。滤掉3个元素。
图
【答案】算法如下:
递增序输出二叉排序树中结点的值,滤去重复元素
中序遍历左子树
是当前访问结点的前驱,调用本算法时初值为
null
记重复元素,调用
本算法时初值为
前驱后移
中序遍历右子树
结束算法
3. 设有一头指针为L 的带有表头结点的非循环双向链表,其每个结点中除有pred(前驱指针) ,data(数据) 和next(后继指针) 域外,还有一个访问频度域freq 。在链表被启用前,其值均初始化为零。每当在链表中进行一次Locate(L,X) 运算时,令元素值为x 的结点中freq 域的值增1,并使此链表中结点保持按访问频度非增(递减) 的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x) 运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。
【答案】算法如下:
//L是带头结点的按访问频度递减的双向链表
//本算法先査找数据x ,査找成功时结点的访问频度域增1,最后将该结点按频度递减插入链表中
//P为L 表的工作指针,q 为p 的前驱,用于査找插入位置
//查找值为x 的结点
("不存在所査结点\n”) ;exit(0);
//令元素值为x 的结点的freq 域加
1
//将P 结点从链表上摘下
//以下査找P 结点的插人位置
//将P 结点插人
//返回值为x 的结点的指针
//算法结束
4. 编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,又查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。
【答案】算法如下:
在具有个元素的有序表R 中,顺序査找值为K 的结点,査找成功返回其位置
否则返回-1表示失败
元素序号
结束
,查找失败的平均查找期望值分析:在等概率情况下,则查找成功的平均查找长度为
长度为(n+2)/2(失败位置除小于每一个,还存在大于最后一个) 。若查找成功和不成功的概率也相等,则查找成功时和关键字比较的个数的期望值约为。
5. 假设以I 和0分别表示入栈和出栈操作。栈的初态和终态均为空,入桟和出找的操作序列可表示为仅由I 和0组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
(1)下面所示的序列中哪些是合法的?
A.
B.
C.
D.
(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true ,否则返回false(假定被判定的操作序列已存入一维数组中) 。
【答案】(1)A和D 是合法序列,B 和C 是非法序列。
(2)设被判定的操作序列已存入一维数组A 中,算法如下:
//判断字符数组A 中的输入输出序列是否是合法序列。
//i为下标
//j和k 分别为I 和字母O 的个数
//入栈次数增
1
//不论A[i]是’I'或’〇' ,指针i 均后移
//算法结束
二、应用题
6. 一个循环队列的数据结构描述如下:
相关内容
相关标签