教务课程计划辅助制定

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

教务课程计划辅助制定

数据结构

课程设计报告

设计题目:教务课程计划的辅助制定

班级

学号

姓名

成绩

3.Display():输出图的邻接矩阵。采用循环设置输出图的邻接矩阵。

4.FindInDegree():求顶点的入度。

图FindInDegree()

图InitStack()

5.InitStack():构造一个空栈。

6.ClearStack():清空栈。

7.StackEmpty():判断栈是否为空。若栈S为空栈,则返回TRUE,否则返回FALSE。

8.Pop():出栈。若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。

9.Push():入栈。插入元素e为新的栈顶元素。

10.TopologicalSort():输出G顶点的拓扑排序结果。有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, 否则返回ERROR。

五.C语言源代码

#include

#include

#include // malloc()等

#include // INT_MAX等

#include // EOF(=^Z或F6),NULL

#include // atoi()52

#include // eof()

#include // floor(),ceil(),abs()

#include // exit()

// 函数结果状态代码

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等

typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE

#define MAX_NAME 20

/* 顶点字符串的最大长度*/

#define MAXCLASS 100

int Z=0;

int X=0;

int xqzs,q=1,xfsx;

typedef int InfoType;

typedef char VertexType[MAX_NAME]; /* 字符串类型*/

/* 图的邻接表存储表示*/

#define MAX_VERTEX_NUM 100

typedef enum{DG}GraphKind; /* {有向图,有向网,无向图,无向网} */

typedef struct ArcNode

{

int adjvex; /* 该弧所指向的顶点的位置*/

struct ArcNode *nextarc; /* 指向下一条弧的指针*/

InfoType *info; /* 网的权值指针)*/

}ArcNode; /* 表结点*/

typedef struct

{

VertexType data; /* 顶点信息*/

ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针*/

}VNode,AdjList[MAX_VERTEX_NUM]; /*

头结点*/

typedef struct

{

AdjList vertices,verticestwo;

int vexnum,arcnum; /* 图的当前顶点数和弧数*/

int kind; /* 图的种类标志*/

}ALGraph;

/* 图的邻接表存储的基本操作*/

int LocateVex(ALGraph G,VertexType u)

{ /* 初始条件: 图G存在,u和G中顶点有相同特征*/

/* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */

int i;

for(i=0;i

if(strcmp(u,G.vertices[i].data)==0)

return i;

return -1;

}

Status CreateGraph(ALGraph *G)

{ /* 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) */

int i,j,k;

VertexType va,vb;

ArcNode *p;

printf("请输入教学计划的课程数: ");

scanf("%d",&(*G).vexnum);

printf("请输入拓扑排序所形成的课程先修关系的边数: ");

scanf("%d",&(*G).arcnum);

printf("请输入%d个课程的代表值(<%d个字符):\n",(*G).vexnum,MAX_NAME);

for(i=0;i<(*G).vexnum;++i) /* 构造顶点向量*/

{ scanf("%s",(*G).vertices[i].data);

(*G).vertices[i].firstarc=NULL;

}

printf("请输入%d个课程的学分值(<%d个字符):\n",(*G).vexnum,MAX_NAME);

for(i=0;i<(*G).vexnum;++i) /* 构造顶点向量*/

{scanf("%s",(*G).verticestwo[i].data);

}

printf("请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):\n");

for(k=0;k<(*G).arcnum;++k) /* 构造表结点链表*/

{ scanf("%s%s",va,vb);

i=LocateVex(*G,va); /* 弧尾*/

j=LocateVex(*G,vb); /* 弧头*/

相关文档
最新文档