1、设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
2、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。(注:图中不存在顶点到自己的弧)
有向图判断回路要比无向图复杂。利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。
下面用0,1,2表示这三种状态。前面已提到,若dfs(v)结束前出现顶点u到v的回边,则图中必有包含顶点v和u的回路。对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。
void print(int v,int start ) 输出从顶点start开始的回路。
for(i=1;i<=n;i++)
if(g[v][i]!=0 &&visited[i]==1 ) 若存在边(v,i),且顶点i的状态为1。
//if}//print
void dfs(int v)
//ifelse
visited[v]=2;
//dfsvoid find_cycle() 判断是否有回路,有则输出邻接矩阵。visited数组为全局变量。
{for (i=1;i<=n;i++)visited[i]=0;
for (i=1;i<=n;i++ if (!visited[i]) dfs(i);
//find_cycle
3、设有一个数组中存放了一个无序的关键序列k1、k2、…、kn。现要求将kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。
51. 借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[l..
h]中。若查找成功,则输出该记录在r数组中的位置及其值,否则显示“not find”信息。请编写出算法并简要说明算法思想。
4、设指针变量p指向双向链表中结点a,指针变量q指向被插入结点b,要求给出在结点a的后面插入结点b的操作序列(设双向链表中结点的两个指针域分别为llink和rlink)。
2019云南省数据结构 C考
1 下列各种数据结构中属于线性结构的有 a a 栈b 二叉树c 广义表d 图。2 线性表的链接实现有利于 a 运算。a 插入b 读元素c 查找d 定位3 若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是 b a 9 b 11 c 15 d 不能确定。4 已知栈的最大容量为...
2019云南省数据结构 C必备
1 倘若在对串的插入 删除运算中,期望运算速度最快,则应采用 c a 顺序表示法b 单字符为结点的单链表表示法c 等量分块表示法d 不等量分块表示法。2 广义表head a,b c,d 的运算结果为 a a a,bb c,d c 空表d a,b c,d 3 已知栈的最大容量为4。若进栈序列为1,2,...
2019云南省数据结构 C必备
8 设有一个10阶的对称矩阵a,采用压缩存储方式,以行序为主存储,a?11为第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为 b a 13 b 33 c 18 d 40 9 c 在进行插入操作时,常产生假溢出现象。a 顺序栈b 循环队列。c 顺序队列d 链队列。10 线索二叉树中某...