南京工业大学2023数据结构复习题简析【编程题5】

本文详细介绍了拓扑排序的基本概念,通过邻接表的数据结构实现算法,并提供了完整的代码框架,包括邻接表的创建、插入操作以及拓扑排序函数。通过测试,展示了算法的正确运行效果。
摘要由CSDN通过智能技术生成

题目:拓扑排序算法的基本思想

一、基本概念

拓扑排序是一个非常容易理解的概念。我们要回忆一下入度这个概念。

我们想象这样一个图,里面只有两个结点A和B,且只有一条从A指向B的边。那么此时,我们称A的入度为0,B的入度为1。

也就是说,某个结点被几个结点指向,那么它的入度就是几。

所谓拓扑排序,就是每次出队的结点入度都为0。这样一直循环下去,就能将一个图中的结点进行排序。

二、代码实现

(1)初步框架

1.头文件:

#include <stdio.h>
#include <stdlib.h>

2.规定一下点的最大个数(这里以9个点为例):

#define MaxVertex 9

3.定义结点的结构体:

由于用的是邻接表,所以普通的结点和头结点要分开定义。

typedef struct LNode{
    int nextVertex;
    struct LNode *next;
}*Node;

4.定义头结点的结构体:

这里存放的是入度。

struct HeadNode{
    int inDegree;
    struct LNode *next;
};

 5.定义邻接表结构体:

typedef struct Adj{
    int vertexCount;
    int edgeCount;
    struct HeadNode vertex[MaxVertex];
}*Graph;

(2) 邻接表的基本操作:

1.创建一个邻接表:

Graph createGraph(){
    Graph graph = (Graph)malloc(sizeof(stru
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值