4510人加入学习
(26人评价)
《数据结构》
价格 免费
音频听课 手机端支持一键听课 (试一试)

1.一个AOV网用邻接矩阵表示,如下页图一,用拓扑排序求该AOV网的一个拓扑序列,给出相应的步骤。

2.拓扑排序的结果不是唯一的,请给出如下页图2所示的有向图的所有可能的拓扑序列。

3.请在深度优先搜索算法的基础上设计一个对有向无环图进行拓扑排序的算法。

1.答:

v0-v1,v0-v2;

v1-v3,v1-v4,v1-v5;

v2-v4,v2-v6;

v4-v6

v5-v6

入度为0,可画图v0-v1-v3-v5-v4-v2-v6

2.答:

由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止:选择一个入度为0的顶点并输出之,从网中删除此顶点及所有出边。

循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。

由AOV网构造出拓扑序列的实际意义是:如果按照拓扑序列中的顶点次序,在开始每一项活动时,能够保证它的所有前驱活动都已完成,从而使整个工程顺序进行,不会出现冲突的情况。

3答:

1、import java.util.*;

2、public class Topology

3、{

4、static final int MAX = 20; //最大点数

5、static int[][] g; //图

6、static LinkedList queue; //保存排序结果

7、static int[] ingoing; //记录节点入度

8、static int[] outgoing;//记录节点出度

9、static int[] used;

10、static int ver;

11、static int edge;

12、

13、static void tplgOrd(){

14、//从所有出度为0的点开始遍历

15、for(int i=1;i<=ver;i++){

16、if(outgoing[i] == 0)

17、 helper(i);

18、 }

19、 }

20、

21、static void helper(int index){

22、//入度为0,说明没有先驱节点了

23、if(ingoing[index]==0) {

24、if(used[index]==0){used[index] = 1;queue.addLast(index);}

25、return;

26、 }

27、//有边指向当前节点说明还有前驱节点,处理前驱节点

28、for(int i = 1;i <= ver;i++){

29、if(g[i][index] < Integer.MAX_VALUE) //有边相连

30、 helper(i);

31、 }

32、//到这里一定是所有的前驱节点都处理过了,所以只要把当前节点加入队列即可。

33、if(used[index] == 0){

34、 used[index] = 1;

35、 queue.addLast(index);

36、 }

37、 }

38、

39、static void init(){

40、 g = new int[ver+5][ver+5];

41、 queue = new LinkedList();

42、 ingoing = new int[ver+5];

43、 outgoing = new int[ver+5];

44、 used = new int[ver+5];

45、for(int i=1;i<=ver;i++){

46、//初始S为空,Q为全部节点

47、for(int j=0;j

48、 g[i][j] = Integer.MAX_VALUE;

49、 }

50、 }

51、

52、static void input(){

53、 Scanner cin = new Scanner(System.in);

54、 System.out.println("请输入点数边数");

55、 ver = cin.nextInt();

56、 edge = cin.nextInt();

57、int s,e,w;

58、 init();

59、 System.out.println("起点终点");

60、for(int i=0;i

61、 s = cin.nextInt();

62、 e = cin.nextInt();

63、 g[s][e] = 1;

64、if(s != e){

65、 ingoing[e] += 1;

66、 outgoing[s] += 1;

67、 }

68、 }

69、 }

70、

71、static void print(){

72、 System.out.println("拓扑排序结果:");

73、 Iterator iter = queue.iterator();

74、while(iter.hasNext()){

75、 System.out.print(iter.next()+" ");

76、 }

77、 System.out.println();

78、 }

79、public static void main(String[] args){

80、 input();

81、 tplgOrd();

82、 print();

83、 }

84、}

[展开全文]

对于下所示的带权无向图,

1)按照Prime算法给出从顶点2开始构造最小生成树的过程;

2)按照Kruskal算法给出最小生成树的过程;

1)答:普里姆算法的基本思想:普里姆算法是另一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。

从连通网络N={V,E}中的某一顶点uO出发,选择与它关联的具有最小权值的边(HO,v)将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(U,v),把该边加入到生成树的边级TE中,把它的顶点加入到集合U中。如此重复执行,直到网络中的所有顶点都加入到生成树顶点集合U中为止。

2)答:Kruskal算法是一种按照连通网中边的权值的递增顺序构造最小生成树的算法。Kurskal算法的基本步骤:假设G=(V,E)是一个n个顶点的联通网,T=(U,TE)是G的最小生成树。令集合U的初始值为U=V,即包含有G中的全部顶点,集合TE的初值为TE={}0然后,将图G中的边按权值从小到大的顺序依次选取,若选取的边使生成树T不形成回路,则把它并入TE中,保留作为T的一条边;若选取的边使生成树T形成回路,则将其舍弃,如此进行下去,直到TE中包含有ml条边为止,此时的T即为最小生成树。

[展开全文]

假设用于通信的电文是由字符集{a,b,c,d,e,f,g,h}中的字符构成,这8个字符在电文中出现的概率分别为{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}。

1,请画出对应的huffman树(按左子树根结点的权小于等于右子树根结点的权的次序构造)。

2.求出每个字符的Huffman编码。

 

[展开全文]

设给定权值集合W={3,5,7,8,11,12},请构造关于W的一棵Huffman树,并求其加权路径长度WPL。

答:huffman树:

WPL = 3*3+5*3+7*3+8*3+11*2+12*2 =115

[展开全文]

线性结构是最常用,最简单的一种数据结构

[展开全文]

线性表结构  一对一

树形结构  一对多

网状结构   多对多

[展开全文]

第13讲

队列:一种先进先出的线性表。队列只允许在表的一端进行插入另一端进行删除。 队列是一种特殊的线性表。

顺序队列:利用一组连续的存储单元(一组数组)依次存放从队首到队尾的各个元素,称为顺序队列。

[展开全文]

第12讲

栈的应用

数制转换:除到商为零。

行编辑程序的功能:接受用户从终端输入的程序或者数据,并存入用户数据区。

 

栈与递归调用的实现:递归规则和终止条件,后调用先返回。

[展开全文]

第三章

第11讲

定义:限制在表的一段进行插入和删除操作的线性表(先进后出)。

栈顶top:允许插入删除。

栈底bottom:固定端称为表头。

空栈:当表中没有元素时被称为空栈。

基本操作:

InitStack(&S):构造一个空栈。

DestroyStack(&S):栈S被销毁。

ClearStack(&S):将栈S清为空栈。

StackEmpty(S):若S为空栈,则返回true否则返回FALSE。

StackLength(S):返回S的元素的个数,即栈的长度。

GetTop(S,&Ee):用e返回S的栈顶元素。

Push(&S,e):插入元素e为新的栈顶元素。

Pop(&S,&e):删除S的栈顶元素,并用e返回trur值。

StackTraverse(S,visit()):从栈底到栈顶依次对S的每个元素调用函数Visit()。一旦调用失败则操作失效。

[展开全文]

第09讲

一元多项式的表示和相加

一元多项式p(x)=p0+p1x+p2x2 

实质:指数不同(链表的合并)指数相同(系数相加)

[展开全文]

  第08讲

循环链表

定义:是一种头尾相接的链表。

特点:最后一个结点的指针域指向链表的头结点,并且形成一个环。

双向链表

定义:构成链表的每个结点中设立两个指针域 。

特点:克服单链表的单向性的缺陷。双向链表结构具有对称性。(钩链时先右后左  )

[展开全文]

第七讲:

线性链表

不要求逻辑上相邻的元素物理位置上也相同,可以是连续也可以是不连续,零散的分布在内存中的任意位置。

结点包含:

data:数据域,存放结点的值。

next:指针域,存放结点的直接后继的地址

单线性链表的基本操作

建立单链表、头插入法建表、未插入法建表、单链表的插入 

[展开全文]

授课教师

数据机构

课程特色

PPT(62)
视频(67)