数据结构与程序设计实验实验报告
哈尔滨工程大学
实验报告五
实验课名称:数据结构与程序设计实验
实验名称:教学计划编制
班级:学号:姓名:时间:2016.05.03
一、问题描述
学历进修需要学生在一定的时间内完成一定的课程学习,每一门课有一定的
学分,修满学分,可获取相应的学历。
因为有些课程内容是另一些课程的学习基
础,所以课程学习之间存有一定的先后次序。
如:某学历的计算机专业需要学习的课程及课程之间的关系如表1 所示。
表 1 计算机专业进修课程
课程进修关系图课程编号课程名称学分
C1 程序设计基础 2
C2 离散数学 3
C3 数据结构 4
C4 汇编语言 3
C5 程序设计与分析 2
C6 计算机原理 3
C7 编译原理 4
C8 操作系统 4
C9 高等数学7
C10 线性代数 5
C11 普通物理 2
C12 数值分析 3
C13 软件工程 3
C14 数据库原理 3
本设计的主要任务是根据需要完成的课程的先修关系、每学期开设的课程总
数及总的学习时间,制定出教学计划。
需事先的基本功能如下。
a. 课程进修目录的读入。
b. 课程进修目录的编辑,如课程增加、删除、信息修改等。
c. 满足一定条件的教学计划的输出。
二、数据结构设计
1. 以邻接表存储课程名和学分
#define MAX_VERTEX_NUM 100
typedef struct ArcNode{ //弧结构
int adjvex; //该弧所指向的顶点的位置;
struct ArcNode *nextarc; //指向下一条弧的指针
InfoType *info; //弧的权值指针
}ArcNode; //表结点
typedef struct{ //头节点
VertexType data; //顶点信息
ArcNode *firstarc; //第一个表结点的地址,指向第一条依附该顶点的弧的指针
}VNode, AdjList[MAX_VERTEX_NUM];
typedef struct{
int i;
ArcNode *p;
for(i=0;i<G.vexnum;i++)
indegree[i]=0;
for(i=0;i<G.vexnum;i++){
p=G.vertices[i].firstarc;
while(p){
indegree[p->adjvex]++;
p=p->nextarc;
}
}
}
Status sum(ALGraph G){ //求大学所有课程总学分;
int z=0;
for(int i=0; i < G.vexnum; i++){
z += atoi(G.vertices2[i].data);
}
return z;
}
四、界面设计
输入参数包括:学期总数,一学期的学分上限,课程数,弧的数目,每门课的课程号、学分和直接先修课的关系。
输出各门课程所对应的学分,以及每学期各门课程的安排。
所有输入输出均以提示给出。
五、运行测试与分析
1.输入学期总数,学分上限,课程数,弧的数目
2.输入每门课的课程号,学分,与直接先修课的关系(以弧的形式给出)
3.构造图并输出图的信息
4.按各学期中的学习负担尽量均匀地制定教学计划5.按尽可能短的时间完成学习,制定教学计划
6.当存在回路时输出提示
六、实验收获与思考
通过实际的编程,巩固了图的邻接表存储。
拓扑排序等知识,同时在编程过程中发现了自己的不足,遇到了很多语法错误及逻辑错误,通过不断的调试解决问题,使我对编程有了更加深入的体会和认识。
七、附录(源代码)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <process.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status; // Status是函数的返回类型
typedef int Boolean;
#define MAX_NAME 10 //顶点字符串的最大长度。