中北大学数据结构与算法课程设计说 明 书 学 院 、 系 :软件学院专 业 :软件工程学 生 姓 名:学 号:设 计 题 目 :教学计划编制问题起 迄 日 期 :2024 年 12 月 9 日-2024 年 12 月 20 日指 导 教 师: 2013 年 12 月 20 日1 需求分析1。 在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息.2. 本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程。3.测试数据:学期总数:6;学分上限:9;本专业共开设 12 门课,课程号从 C00 到 C11,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。2 概要设计1.抽象数据类型图的定义如下:ADT Graph{数据对象 V:V 是具有相同特性的数据元素的集合,称为顶点集.数据关系 R:R={VR}VR={(v,w)|v,w∈V,(v,w)表示 v 和 w 之间存在直接先修关系}基本操作 P:void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int * );int TopologicalOrder(ALGraph G,AdjList R,struct Name name[])int LocateVex(ALGraph G, VertexType u)/* 查找图中某个顶点位置 */ }ADT Graph2.栈的定义如下:ADT Stack{数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n〉=0} 数据关系:R1={﹤ai-1 ai﹥|ai—1,ai∈D,i=2,…,n}基本操作:void InitStack (SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int );int Pop(SqStack *S, int *e);}ADT Stack3.本程序有两个模块,调用关系简单:主程序模块 → 拓扑排序模块3 系统完成功能及功能框图 图 3。1 系统功能框图 图 3。2 邻接表Y Y N Y N Y 图 3.3 拓扑排序流程图图 3.4 课程先修关系图4 详细设计1. 图的邻接表的存储表示,即结构体的定义:typedef struct ArcNode{int AdjOfV; // 该弧所指向的顶点的位置struct ArcNode *next; //指向下一条弧的指针}ArcNode;typedef char VertexType[MAXOfNAME]; typedef struct //链接表{VertexType data; //顶点信息int grades; //存储学分信息0C11C22C33C44C55C66C7^7C8^8C99C1010C1111C12 ^1 ^5 ^11 ^111067 ^6 ^4 ^72 ^1134 ^9 ^对每个顶点求入度,并存入数组 InDegree[i] 中( i=0…n )初始化栈 Stack,Counter=0Return O...