数据结构课程设计教学计划安排系统Word格式.doc

上传人:b****9 文档编号:13021145 上传时间:2022-10-02 格式:DOC 页数:23 大小:327.60KB
下载 相关 举报
数据结构课程设计教学计划安排系统Word格式.doc_第1页
第1页 / 共23页
数据结构课程设计教学计划安排系统Word格式.doc_第2页
第2页 / 共23页
数据结构课程设计教学计划安排系统Word格式.doc_第3页
第3页 / 共23页
数据结构课程设计教学计划安排系统Word格式.doc_第4页
第4页 / 共23页
数据结构课程设计教学计划安排系统Word格式.doc_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课程设计教学计划安排系统Word格式.doc

《数据结构课程设计教学计划安排系统Word格式.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计教学计划安排系统Word格式.doc(23页珍藏版)》请在冰豆网上搜索。

数据结构课程设计教学计划安排系统Word格式.doc

总成绩:

评阅人签名:

目录

一、 课程设计的目的 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];

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

Y

课程数目

输入课程之间

的关系数

输入课程的名字

i<

G.vexnum

输入课程的之间的先后关系数v,w

G.arcnum

结束

(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

*S.top++=e

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()函数

p=p->

nextarc

i++

结束

indegree[j]++

intj=0,j<

p->

adjvex==j

P==NULL

p=G.vertices[i].firstarc

i<

G.vexnum

inti=0

ArcNode*p

图(5)

图(5)是StackEmpty()函数

SqStackS1,S2;

ArcNode*p;

inti=0,count=0,k;

图(7)拓扑排序函数函数

indegree[i]==0

Push(S1,i)

i++,i<

StackEmpty(S1)!

输出相应的课程

Pop(S1,i),输出i号结点,Push(S2,i)

count++

StackEmpty(S2)!

Pop(S2,i)

p=G.vertices[i].firstarc;

p

Push(S1,k)

--indegree[k])==0

k=p->

adjvex

五.调试与测试

调试

1.在编程当中,由于要输入大量的程序,所以经常出现很多不让人注意的小错误。

例如大小写int写成Int(因为是在word中写的,会自动将字母大写)

2.关系运算符和赋值运算符总是用错,而这种错误也总是被忽略。

3.有时候会忘记加分号或是在不该加的地方加上了分号。

不过这种情况还是比较容易被发现的。

4.有时候大括号也会忘加,尤其是在if语句和for语句中。

5.最重要的是函数的应用,函数应该应用得当,否则程序会出现很大的错误,尤其是在如此庞大的程序中。

6.调试拓扑排序的时候,最头疼,有时候调试半天没有结果,最后问了一下同学,才有了思绪,错误逐渐浮出水面,让我明白究竟错在哪里。

7.总是忘了初始化,结果调试半天没有调试出来。

8.我对拓扑排序基本弄清楚了,但是程序不一定写的出来,稍微错了一点很难找出来。

9.在定义结构体时,纠结了半天,没有定义好结构体很多都是白搭,下面很多程序都不好写。

10.全程变量的运用错误导致很多错误,调试了半天。

测试

开始界面

输入课程数目

输入总边数

输入所有课程的名称

输入课程之间的先后关系

学期课程安排

六.课程设计的总结

通过这个课程设计,我们更加牢固的掌握了书本上的知识。

并对于以前不熟悉的知识有了更加深刻的了解。

在完成此次课程设计的过程中,虽然有些疲劳和困倦,但带给我很多的收获。

数据结构已经学了半个学期了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,已经减少了许多。

很多程序理论上说得过去,但真正上机了却会发现行不通。

所以说无论做什么事空有理论而不去实践都收获不到真正的果实。

说实话,我这个程序在所有程序当中算是简单的,所包含的知识也就是调用函数和结构体,当中穿插了一些拓扑排序算法,总体来说结构还是很清晰的,由各个模块小模块组成了一个排课系统。

但过程中也是遇到了不少的麻烦,很多地方都想不到或是想不全的。

所以说对待任何事情我们都不容小觑,一件自己没做过的事谁都不

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1