数据结构课程设计教学计划安排系统.doc
- 文档编号:90242
- 上传时间:2022-10-02
- 格式:DOC
- 页数:23
- 大小:327.60KB
数据结构课程设计教学计划安排系统.doc
《数据结构课程设计教学计划安排系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计教学计划安排系统.doc(23页珍藏版)》请在冰豆网上搜索。
教学单位计算机科学与技术
学生学号
数据结构
课程设计报告书
题 目 教学计划安排系统
学生姓名
专业名称 计算机科学与技术(软件工程)
指导教师 李志敏吴先飞
课程设计评分
评分标准
得分
1、内容完整性(20分)
2、报告撰写规范性(10分)
3、问题描述正确性(10分)
4、设计合理与有效性(10分)
5、程序代码编写规范性(20分)
6、程序运行正确性(10分)
7、屏幕提示信息准确与充分性(10分)
8、测试过程充分性与正确性(10分)
合计
平时成绩(30%):
课程设计报告成绩(70%):
总成绩:
评阅人签名:
目录
一、 课程设计的目的 4
二、 设计的内容与要求 4
三、 总体设计 4
四、 详细设计 5
五、 调试与测试 15
六、 课程设计的总结 17
一、课程设计的目的
1.巩固和加深学生对C语言课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力
二.设计的内容与要求
要建立一个图,因而要输入图的结点数和边数以及图的每一个结点的名称,要对所输入课程进行排课,因而要确定每一个结点的入度是否为零,并且将入度为零的结点分别进栈再出栈,再进另一个栈,最后出栈,最后实现对所输入的课程进行排课
三.总体设计
(1)该教学计划安排系统分为6个模块
1.建立图
2.栈的初始化
3.出栈
4.进栈
5求结点的入度
6拓扑排序
(2)算法描述(此程序中所包含的函数)
1.主函数main():
调用 CreateALGraph(G)函数和TopologicalSort(G)函数。
2.CreateALGraph()函数:
从键盘上输入所需要的值,并对每一个结点的*firstarc赋值为NULL。
3.InitStack()函数:
将栈分配存储空间,并对top和base赋值。
4.Push()函数:
进满足条件的元素压入栈中,并改变top指针的值
5.Pop()函数:
开始判断栈中的top和base指针是否相等,若相等则返回,否则进行出栈操作。
6.StackEmpty()函数:
通过判断栈是否为空来返回相应的值。
7.FindInDegree()函数:
通过循环求出每一个结点的入度
8.TopologicalSort()函数:
通过拓扑排序将相应的课程给输出来
四.详细设计
数据的组织描述(比如主要的变量类型,结构体等等),模块之间的参数设计(接口设计,模块的功能说明),系统控制流程图,各个模块的流程图,采用的算法
typedefstruct
{
SElemType*base;//在栈构造之前和销毁之后,base的值为NULL
SElemType*top;//栈顶指针
intstacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
typedefstructArcNode
{
intadjvex;//该弧所指向的顶点的位置
structArcNode*nextarc;//指向第一条依附该顶点的弧的指针
}ArcNode;
typedefstructVNode
{
chardata[10];
ArcNode*firstarc;
}AdjList[max_vertex_num];
typedefstruct
{
AdjListvertices;
intvexnum,arcnum;//图的当前顶点数和弧数
}ALGraph;
1.主函数模块
定义一个图的变量,调用CreateALGraph(G)函数,和TopologicalSort(G)函数。
2.创建图的模块
从键盘上输入学期数,再输入课程数目(即结点数)和课程之间的关系数(即边数),并把指向第一条依附该顶点的弧的指针赋值为NULL,同时把每一个结点所指向的其他结点形成一个链表。
为NULL。
3栈的初始化模块
使栈中base指针分配一定的存储空间,并使栈中top指针指向base指针。
4.栈的进栈模块
先开始判断这个栈是否为满,若满了,则重新分配一定的存储空间,栈中的top指针重新赋值之后,再使该元素进栈,并使top指针指向下一位。
5.栈的出栈模块
判断栈的top指针和base指针是否相等,若相等则为空,否则不为空。
6.栈空的模块
通过判断栈的top指针和base指针是否相等,来返回相应的值
7.求结点的入度模块
对每一个结点已经形成了一个链表进行查找,若发现有一个结点指向另一个结点,就把另一个结点的入度加1,直到循环结束
8.拓扑排序模块
首先对栈进行初始化,然后找出结点的入度为零的结点,若入度为零,则进栈。
当是S1不为空时,就将栈中的S1进行出栈操作,并把序号所对应的结点给输出来。
与此同时,把结点所对应的序号压入栈S2,同时将count加1,并判断栈S2是否为空,
若不为空,则把栈S2中的元素进行出栈操作,并把该结点所形成的链表中每一个结点的入度减一,若减之后,就把该结点的序号压入栈S1。
如此循环,直到该循环结束
图
(1)是CreateALGraph()函数
inti,semester_num,v,w,vex
CreateALGraph函数
semester_num>8
输入学期数
N
vex>=20
vex>=20
Y
课程数目
输入课程之间
的关系数
输入课程的名字
N
i 输入课程的之间的先后关系数v,w Y i 结束 图 (1) 图 (2)是InitStack()函数 图(3) 否 return1 e=*--S.top return1 return0 是 S.top==S.base 图(3)是Pop()函数 图 (2) S.base=(SElemType*)malloc(stack_init_size*sizeof(SElemType)) 否 s.base! =0 return0 S.top=S.base, S.stacksize=stack_init_size 图(4)是Push函数 图(4) S.top-S.base>=S.stacksize return1 *S.top++=e return0 是 否 S.top=S.base+S.stacksize, S.stacksize+=createstack; S.base==0 S.base=(SElemType*)realloc(S.base,(S.stacksize+createstack)*sizeof(SElemType)) 图(6) 图(6)是FindInDegree()函数 图(6)是FindInDegree()函数 p=p->nextarc i++ 否 结束 是 是 是 否 否 indegree[j]++ intj=0,j p->adjvex==j P==NULL p=G.vertices[i].firstarc i inti=0 ArcNode*p 图(5) return0 return1 S.top==S.base 图(5)是StackEmpty()函数 SqStackS1,S2;ArcNode*p; inti=0,count=0,k; 图(7)拓扑排序函数函数 是 indegree[i]==0 Push(S1,i) 否 是 i++,i 否 StackEmpty(S1)! =0 是 输出相应的课程 是 StackEmpty(S1)! =0 Pop(S1,i),输出i号结点,Push(S2,i) 否 count++ 否 StackEmpty(S2)! =0 是 Pop(S2,i) p=G.vertices[i].firstarc;p p=p->nextarc Push(S1,k) --indegree[k])==0 k=p->adjvex 五.调试与测试 调试 1.在编程当中,由于要输入大量的程序,所以经常出现很多不让人注意的小错误。 例如大小写int写成Int(因为是在word中写的,会自动将字母大写) 2.关系运算符和赋值运算符总是用错,而这种错误也总是被忽略。 3.有时候会忘记加分号或是在不该加的地方加上了分号。 不过这种情况还是比较容易被发现的。 4.有时候大括号也会忘加,尤其是在if语句和for语句中。 5.最重要的是函数的应用,函数应该应用得当,否则程序会出现很大的错误,尤其是在如此庞大的程序中。 6.调试拓扑排序的时候,最头疼,有时候调试半天没有结果,最后问了一下同学,才有了思绪,错误逐渐浮出水面,让我明白究竟错在哪里。 7.总是忘了初始化,结果调试半天没有调试出来。 8.我对拓扑排序基本弄清楚了,但是程序不一定写的出来,稍微错了一点很难找出来。 9.在定义结构体时,纠结了半天,没有定义好结构体很多都是白搭,下面很多程序都不好写。 10.全程变量的运用错误导致很多错误,调试了半天。 测试 开始界面 输入课程数目 输入总边数 输入所有课程的名称 输入课程之间的先后关系 学期课程安排 六.课程设计的总结 通过这个课程设计,我们更加牢固的掌握了书本上的知识。 并对于以前不熟悉的知识有了更加深刻的了解。 在完成此次课程设计的过程中,虽然有些疲劳和困倦,但带给我很多的收获。 数据结构已经学了半个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。 很多程序理论上说得过去,但真正上机了却会发现行不通。 所以说无论做什么事空有理论而不去实践都收获不到真正的果实。 说实话,我这个程序在所有程序当中算是简单的,所包含的知识也就是调用函数和结构体,当中穿插了一些拓扑排序算法,总体来说结构还是很清晰的,由各个模块小模块组成了一个排课系统。 但过程中也是遇到了不少的麻烦,很多地方都想不到或是想不全的。 所以说对待任何事情我们都不容小觑,一件自己没做过的事谁都不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 教学计划 安排 系统