数据结构之教学计划编制问题

发布 2019-07-28 11:50:37 阅读 1658

课程设计说明书。

题目: 教学计划编制问题(a类。

院系: 计算机科学系。

专业班级: 06网络工程。

学号。学生姓名。

指导教师。一。 需求分析。

1)实验内容和实验目的:

1.大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。

每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。每个课程的先修关系都是确定的,可以有任意多门,也可以没有。每一门课程恰好一个学期。

试在这样的情况下设置一个教学计划编制程序。

2.在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息。

3.本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程。

2)测试数据:

学期总数:6;学分上限:10;该专业共开设12门课,课程号从01到12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。先修关系见教科书图7.26。

3)测试结果(包含正确和错误的):

正确测试结果:

错误测试结果:

二。 概要设计。

1. 抽象数据类型图的定义如下:

adt graph

vr=基本操作p:

void creatgraph(algraph *)

void findindegree(algraph , int *

void topologicalsort_1(algraph g,int numterm,int maxcredit);

void topologicalsort_2(algraph g,int numterm,int maxcredit);

adt graph

栈的定义:adt stack

数据关系:r1=

基本操作:void initstack (sqstack *s);

int stackempty(sqstack s);

void push(sqstack *s, int );

int pop(sqstack *s, int *e);

adt stack

2. 主程序

int main() 主函数。

int numterm; /学期总数。

int uplcredit; /一个学期的学分上限。

int selectway;

algraph g;

printf("请输入学期总数:");

scanf("%d",&numterm);

printf("请输入一个学期的学分上限:");

scanf("%d",&uplcredit);

creatgraph(&g);

printf("请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布");

scanf("%d",&selectway);

if(selectway==1)

topologicalsort_1(g,numterm,uplcredit);

if(selectway==2)

topologicalsort_2(g,numterm,uplcredit);

system("pause");

return 0;

3. 本程序只有两个模块,调用关系简单。

主程序模块。

拓扑排序模块。

三.详细设计。

1.头结点,表结点,邻接表的定义。

#define max_vertex_num 100 //最大课程总数。

typedef struct arcnodearcnode;

typedef struct vnodevnode,adjlist[max_vextex_num];

typedef structalgraph;

邻接表的基本操作:

void creatgraph(algraph *)

创建邻接表。

void findindegree(algraph , int *

求一个结点的入度。

void topologicalsort_1(algraph g,int numterm,int maxcredit);

拓扑排序来编排课程。

void topologicalsort_2(algraph g,int numterm,int maxcredit);

拓扑排序来编排课程。

2.栈的定义:

#define stack_init_size 100 //存储空间的初时分配量。

#define stackincrement 10 //存储空间的分配增量。

typedef int elemtype;

typedef structalgraph;

基本操作:void initstack (sqstack *s);

栈的初始化。

int stackempty(sqstack s);

判断栈是否为空。

void push(sqstack *s, int );

入栈操作。int pop(sqstack *s, int *e);

出栈操作。3.主程序和其他算法。

int main() 主函数。

int numterm; /学期总数。

int uplcredit; /一个学期的学分上限。

int selectway;

algraph g;

printf("请输入学期总数:");

scanf("%d",&numterm);

printf("请输入一个学期的学分上限:");

scanf("%d",&uplcredit);

creatgraph(&g);

printf("请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布");

scanf("%d",&selectway);

if(selectway==1)

topologicalsort_1(g,numterm,uplcredit);

if(selectway==2)

topologicalsort_2(g,numterm,uplcredit);

system("pause");

return 0;

void creatgraph(algraph *g)//构件图。

int i, m, n;

arcnode *p;

printf("请输入需要编排课程总数:");

scanf("%d",&g->vexnum);

for( i=1;i<=g->vexnum;i++)

printf("请输入课程先修关系总数:")

scanf("%d",&g->arcnum);

printf("请顺序输入每个课程先修关系(先修课程在前并以逗号作为间隔):");

for (i = 1; i <=g->arcnum; i++)

printf("请输入存在先修关系的两个课程的序号:")

scanf("%d,%d",&n,&m);

while (n < 0 ||n > g->vexnum ||m < 0 ||m > g->vexnum)

printf("输入的顶点序号不正确请重新输入:")

华信学院数据结构实习教学计划编制

findindegree g 初始条件 图g已存在。操作结果 输出一个人结点的入度。topologicalsort 初始条件 图g存在。操作结果 若g无回路,则输出g的顶点的一个拓扑序列。initstack s 操作结果 构造一个空栈。stackempty s 初始条件 栈s已存在。操作结果 若栈s...

数据结构实验之结构体与共同体

实验三 结构体和共用体。include include typedef char elemtype typedef struct node r next null return h void listinsert linklist l,int i,elemtype e if p j i 1 s li...

工作计划 之2023年初中学校教学计划

最新 工作计划 之2019年初中学校教学计划。初中校舍教授教养规划篇一。20xx年,我校教导事情的指示思维是 当真贯彻落实党的xx大和十八届三中全会肉体,深刻贯彻落实迷信发展观,周全贯彻党的教导目标,当真落实秋季教导事情集会肉体。以周全进步教导品质为焦点,以建立责任教导平衡进展和 双高普九 为抓手,...