程序设计(2023年计算机统考

已知有向图G采用邻接矩阵存储,其定义如下:

typedef struct{//图的定义

int numberVertices,numEgges;//图中实际的顶点数和边数

char verticesList[maxV];//顶点表

int edge[maxV][maxV];//邻接矩阵

}MGraph;

将图中出度大于入度的顶点称为K顶点,如图,a和b都是K顶点,设计算法 int printVertices(MGraph G)对给定任意非空有向图G,输出G中所有K顶点,并返回K顶点的个数。

(1)给出算法的设计思想。

(2)根据算法思想,写出C/C++描述,并注释。

答案解析

⑴ 有向图G采用邻接矩阵G.Edge表示,G.Edge[i][j]=1表示存在有向边(i,j),G.Edge[i][j]=0 表示不存在有向边(i,j).本题算法基本设计思想如下:第一步:统计所有顶点的入度和出度。若存在边(i,j),即G.Edge[i][j]=1,则顶点i 的出度加1,顶点j的入度加1。若不存在边(i,j),即G.Edge[i][j]=0 ,则顶点i 的出度不变,顶点j 的入度不变。第二步:统计所有顶点中出度大于入度的顶点的个数,并输出。(2) C语言代码:int printVertices(MGraph G) { int indegrees[G.numVertices]; int outdegrees[G.numVertices]; memset(indegrees, 0, sizeof(indegrees)); memset(outdegrees, 0, sizeof(outdegrees)); // 遍历无向图...

查看完整答案

讨论

使用快速排序算法对数据进行升序排序, 若经过一次划分后得到的数据序列是 68, 11, 70, 23, 80, 77, 48, 81, 93, 88,则该次划分的轴枢【】。

下列排序算法中,不稳定的是【 】。Ⅰ. 希尔排序Ⅱ. 归并排序Ⅲ. 快速排序Ⅳ. 堆排序Ⅴ. 基数排序

现有长度为 5,初始为空的散列表HT,散列函数H(k)=(k+4) mod 5, 用线性探查再散列法解决冲突。若将关键字序列 2022, 12, 25 依次插入HT中,然后删除关键字 25 ,则HT中查找失败的平均查找长度为【 】。

对含有 600 个元素的有序顺序表进行折半查找,关键字之间的比较次数最多是【 】

下列关于非空 B 树的叙述中,正确的是【 】Ⅰ. 插入操作可能增加树的高度Ⅱ. 删除操作一定会导致叶结点的变化Ⅲ. 查找某关键字一定是要查找到叶结点Ⅳ. 插入的新关键字最终位于叶结点中

已知无向连通图 G 中各边的权值均为 1,下列算法中一定能够求出图 G 中从某顶点到其余各个顶点最短路径的是【 】Ⅰ.普利姆算法;Ⅱ.克鲁斯卡尔算法;Ⅲ.图的广度优先搜索

已知一棵二叉树的树形如图,若其后序遍历为 f、d、b、e、c、a,则其先序列为【 】

在有 6 个字符组成的字符集 S 中,各个字符出现的频次分别为 3、4、5、6、8、10,为 S 构造的哈夫曼树的加权平均长度为【 】

若采用三元组表存储结构存储系数矩阵 M.则除三元组外,下列数据中还需要保存的是【 】Ⅰ. M 的行数;Ⅱ. M 中包含非零元素的行数;Ⅲ. M 的列数;Ⅳ. M 中包含非零元素的列数.

现有非空双向链表 L,其结点结构为:prer|data|next。prer 是指向前直接前驱结点的指针,next 是指向直接后继结点的指针。若要在 L 中指针 p 所指向的结点( 非尾结点) 之后插入指针 s 指向的新结点, 则在执行了语句序列: “s->next=p->next;p->next=s”后,还要执行【 】

若一个有向图的邻接矩阵中对角线以下元素均为零,则该图的拓扑有序序列必定存在。

试列中下列图中全部可能的拓扑排序序列。

Kruskal算法的时间复杂度为__________,它对__________图比较合适。

在下列两种求图的最小生成树的算法中,【 】算法适合于求边稀疏的网的最小生成树。

在一个有n个顶点的无向网中,有O(n1.5*log2n)条边,则应该选用【 】算法来求这个网的最小生成树,从而使计算时间较少。

下图所示的非确定有限自动机(s0为初态,s3为终态)可识别字符串【 】。

下列对顺序存储的有序表 (长度为 n)实现给定操作的算法中平均时间复杂度为 O(1)的是【 】

对含有n (n>0)个记录的文件进行外部排序,采用置换-选择排序生成初始归并段时需要使用一个工作,工作区中能保存m个记录,请回答下列问题。(1) 如果文件中有19条记录,其关键字分别为:51,94,37,92,14,63,15,99,48,56,23,60,31,17,43,8,90,166,100,当m=4时,可生成几个初试归并段,各是什么?(2)对任意m (n≫m>0),生成的第一个初试归并段长度最大值和最小值分别多少?

已知有向图G采用邻接矩阵存储,其定义如下:typedef struct{//图的定义 int numberVertices,numEgges;//图中实际的顶点数和边数 char verticesList[maxV];//顶点表 int edge[maxV][maxV];//邻接矩阵}MGraph;将图中出度大于入度的顶点称为K顶点,如图,a和b都是K顶点,设计算法 int printVertices(MGraph G)对给定任意非空有向图G,输出G中所有K顶点,并返回K顶点的个数。(1)给出算法的设计思想。(2)根据算法思想,写出C/C++描述,并注释。

已知有向图G采用邻接矩阵存储,其定义如下:typedef struct{//图的定义 int numberVertices,numEgges;//图中实际的顶点数和边数 char verticesList[maxV];//顶点表 int edge[maxV][maxV];//邻接矩阵}MGraph;将图中出度大于入度的顶点称为K顶点,如图,a和b都是K顶点,设计算法 int printVertices(MGraph G)对给定任意非空有向图G,输出G中所有K顶点,并返回K顶点的个数。(1)给出算法的设计思想。(2)根据算法思想,写出C/C++描述,并注释。