} }
G.arcs[i][j]=w; G.arcs[j][i]=w;
第一个for循环:将图中的顶点输入到数组G.vexs[i]; 第二个for循环,初始化邻接矩阵;
第三个for循环,将图中边信息存入数组G.vexs[i]中; 本程序的功能是:创建图的邻接矩阵;
132. scanf(\:语句的功能输入定点数和图中的边数。
133. 给定权值{7,3,6,12,8,15},构造相应哈夫曼树,并计算其带权路径长度。
134. 有一组关键码49,38,65,97,76,13,27,43,采用堆排序方法,请写出每趟排序结果。
135. 设有关键字序列{32,53,78,12,25,62,43},哈希函数H(K)=K mod 7,用线性探测再散列方法处理冲突,要求构造一个装填因子为0.7的哈希表,并分别计算出在等概率情况下查找成功与查找不成功的平均查找长度。 136. 给出右边有向图G的邻接表表示,按Dijkstra算法,给出由V0到其余各顶点的最
短路径。(要求按算法步骤次序,产生各个最短路)
五、详细解析题
137. 二叉树按二叉链表方式存放,其中的data域为char类型,已有按前序方式构造二叉树的算法,若输入序列为AB□CD□□ED□G□□□,请给出构造的相应二叉树。
138. 已知Ackerman函数定义如下:
n?1当m?0? ?Ack(m,n)??Ack(m?1,1)当m?0,n?0时 ?Ack(m?1,Ack(m,n?1))当m?0,n?0时?
1) 写出Ack(2,1)的计算过程。 2) 写出计算Ack(m,n)的非递归算法。
139. 对于正整数A、B,说明下面程序段定义了什么函数功能,要求重写程序段,使之完成原函数功能,且执行时间仅可能短。 Unsigned int f(a,b)
int a,b;
{if (a*b==0) return (a+b)
else return(f(b-(b/a)*a,a); (注:b/a相当整除) }
140. 假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为{2,3,5,7,11,4,13,15},试为这8个字母设计哈夫曼编码。
141. 设有关键字序列{75,33,52,41,12,88,66,27},哈希函数H(K)=K mod 7 ,用线性探测再散列方法处理冲突,要求构造一个装填因子为0.8的哈希表,并分别计算出在等概率情况下查找成功与查找不成功的平均查找长度。
142. 设散列表为HT[0..12],即表的大小为m=13。现采用双散列法解决冲突。散列函数和在散列函数分别为: H0(key)=key;注:%是求余数运算(=mod)
Hi=(Hi-1+REV(key+1)+1); i=1,2,3,…,m-1。其中,函数REV(x)表示颠倒10进制数x的各位,如REV(37)=73,REV(7)=7等。若插入的关键码序列为{2,8,31,20,19,18,53,27}。
1) 试画出插入这8个关键码后的散列表。 2) 计算搜索成功的平均搜索长度ASL。
143. 给出右边有向图G的邻接表表示,按Dijkstra算法,给出由V0到其余各顶点的最短路径。(要求按算法步骤次序,产生各个最短路).
144. 如图所示:求解
1) 从顶点A出发,求它的深度优先生成树。 2) 从顶点E出发,求它的广度优先生成树。 3) 根据普里姆(Prim)算法,求它的最小生成树。
G B 3 5 6 E 5 1 F A 4 C 1 2 V0 D 3 4 V1 5 10 V2 30 10 100 V560 V4 20 V3 50 145. 给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程:
1) 归并排序 每归并一次书写一个次序。 2)快速排序 每划分一次书写一个次序
3)堆排序 先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。 146. 图1是用邻接表存储的图,画出此图,并写出从C点开始按深度优先遍历该图的结果。
147. 图1表示一个地区的通讯网,边表示城市间的通讯线路,边上的权表示架设线路花费的代价,如何选择能沟通每个城市且总代价最省的n-1条线路,画出所有可能的选择。
V2 V1 V7 V8 V4 V3 V5 148. 对于有向无环图,写出它的四个不同的拓朴有序序列。
V6 149. 假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。