编写拓扑排序算法c语言,拓扑排序算法

用C语言编写程序,实现图的拓扑排序操作的算法

图的拓扑排序操作

一、实验内容

题目:实现下图的拓扑排序。

1-119-jpg_6_0_______-191-0-0-191.jpg

5

二、目的与要求

(一)目的

1、了解拓扑排序的方法及其在工程建设中的实际意义。

2、掌握拓扑排序的算法,了解拓扑排序的有向图的数据结构。

(二)要求

用C语言编写程序,实现图的拓扑排序操作。

三、设计思想

首先对有向图,我们采取邻接表作为数据结构。且将表头指针改为头结点, 其数据域存放该结点的入度,入度设为零的结点即没有前趋。

在建立邻接表输入之前,表头向量的每个结点的初始状态为数据域VEX(入度)为零,指针域NXET为空,每输入一条弧< J, K > 建立链表的一个结点,同时令k 的入度加1,因此在输入结束时,表头的两个域分别表示顶点的入度和指向链表的第一个结点指针。

在拓扑排序的过程之中,输入入度为零(即没有前趋)的顶点,同时将该顶点的直接后继的入度减1。

(1)、查邻接表中入度为零的顶点,并进栈。

(2)、当栈为空时,进行拓扑排序。

(a)、退栈,输出栈顶元素V。

(b)、在邻接表中查找Vj的直接后继Vk,将Vk的入度减一,并令入度减至零的顶点进栈。

(3)、若栈空时输出的顶点数不是N个则说明有向回路,否则拓扑排序结束。为建立存放入度为零的顶点的栈,不需要另分配存储单元,即可借入入度为零的数据域。一方面,入度为零的顶点序号即为表头结点的序号,另一方面,借用入度为零的数据域存放带链栈的指针域(下一个入度的顶点号)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值