| GZU521.COM学习网 |
|
试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rlink中,并利用左链域llink把所有结点按照其值从小到大的顺序连接起来。 八、设有一个关键码的输入序列 { 55, 31, 11, 37, 46, 73, 63, 02, 07 ,(1) 从空树开始构造平衡二叉搜索树, 画出每加入一个新结点时二叉树的形态。若发生不平衡, 指明需做的平衡旋转的类型及平衡旋转的结果。 (2) 计算该平衡二叉搜索树在等概率下的查找成功的平均查找长度和查找不成功的平均查找长度。 九、下面是求连通网络的最小生成树的prim算法的实现,中间有5个地方缺失,请阅读程序后将它们补上。 const int maxint = int_max; //int_max的值在中 const int n = 6; //图的顶点数, 应由用户定义 typedef int adjmatrix[n>[n>; //用二维数组作为邻接矩阵表示 typedef struct //生成树的边结点 int fromvex, tovex; //边的起点与终点 int weight; //边上的权值 treeedgenode; typedef treeedgenode mst[n-1>; //最小生成树定义 void primmst ( adjmatrix g, mst t, int rt ) { //从顶点rt出发构造图g的最小生成树t,rt成为树的根结点 treeedgenode e; int i, k = 0, min, minpos, v; for ( i = 0; i < n; i++ ) //初始化最小生成树t if ( i != rt ) { t[k>.fromvex = rt; t[k>.tovex = i ; t[k++>.weight = g[rt>; } for ( k = 0; k < n-1; k++ ) { //依次求mst的候选边 min = maxint ; for ( i = k; i < n-1; i++ ) //遍历当前候选边集合 if ( t.weight < min ) //选具有最小权值的候选边 { min = t.weight; minpos = i ; } if ( min == maxint ) //图不连通, 出错处理 { cerr 《 “graph is disconnected!” 《 endl; exit(1) ; } e = t[minpos>; t[minpos> = t[k> ; t[k> = e; v = t[k>.tovex; for ( i = k+1; i < n-1; i++ ) //修改候选边集合 if ( g[v>[t.tovex> < t.weight ) t.weight = g[v>[t.tovex>; t.fromvex = v ; 参考答案 一、(1) 错 (2) 错 (3) 对 (4) 错 (5) 对 二、(1) b (2) c 三、3 四、h = élog2(n+1)ù -1 五、a. ① b. ③ c. ② d. ④ e. ③ 六、① 出 ② 入 ③ 极小 ④ n-1 ⑤ 是(最小) ⑥ 有 ⑦ 无 ⑧ 14 七、算法如下 void sort ( dblnode * l ) { dblnode * s = l->rlink; //指针s指向待插入结点, 初始时指向第一个结点 |
责任编辑:gzu521