算法课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法与数据结构》课程设计报告题目:教学计划编制问题
专业:计算机科学与技术
班级: 1002
学号: 1030030242
姓名:巫爱萍
指导教师:许文庆
完成日期: 2012年 6月 14 日
一、课程设计目的
本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。
通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
二、课程设计内容
针对计算机系本科课程,依据其相互依赖关系制定课程安排计划,其相互依赖关系如下图所示,并要求各学期课程数目大致相同且搭配适当。
三、课程设计过程
1.需求分析
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:
(1) 输入的形式和输入值的范围;创建邻接表时需要输入顶点数、边数、顶点及其入度和确定弧的两个顶点
(2) 输出的形式;在主函数中输出拓扑排序序列。
(3) 程序所能达到的功能;A、求解上图的拓扑排序结果。B、上述课程在4学期上完,要求每学期上课的门数大致一样。
(4) 测试数据:
创建邻接表时输入的顶点数:7
创建邻接表时输入的顶点数:8
创建邻接表时输入的顶点及其入度分别为:(1,0)、(2,0)、(3,1)、(4,2)、
(5,2)、(6,2)、(7,1)
创建邻接表时输入的确定弧的两个顶点
<2,4>、<2,7>、<2,5>、<7,6>、<4,6>、<4,5>
2.概要设计
1)本程序包含7个函数:
①主函数main()
②创建邻接表函数creatgraph(algraph& g)
③拓扑排序函数toposort(algraph& g,int n)
各函数间关系如下:
3.详细设计
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其
他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。
1)
typedef struct arcnode
{
int adjvex;
//int info;
struct arcnode *nextarc;
}arcnode;
2)
typedef struct vnode
{
int data;
int id;
struct arcnode *firstarc;
}vnode,adjlist[MAX_VERTEX_NUM
3)
typedef struct
{
adjlist vertices;
int vexnum,arcnum;
//int kind;
}algraph;
4)图的基本操作
为了方便用邻接表来存储有向图。
algraph creatgraph(algraph& g)
{
int i,j,k;
arcnode *p;
algraph ag;
printf("******************************************\n");
printf("请输入顶点数:\n");
scanf("%d",&g.vexnum);
printf("请输入边数:\n");
scanf("%d",&g.arcnum);
printf("******************************************\n");
printf("请输入顶点:");
for(i=1;i<=g.vexnum;++i)
{
scanf("%d,%d",&g.vertices[i].data,&g.vertices[i].id);
g.vertices[i].firstarc=NULL;
}
printf("请输入确定弧的两个顶点
for(k=1;k<=g.arcnum;++k)
{ scanf("%d,%d",&i,&j);
p=(arcnode*)malloc(sizeof(arcnode));
p->adjvex=j;
p->nextarc=g.vertices[i].firstarc;
g.vertices[i].firstarc=p;
}
return ag;
}
5)拓扑排序的基本操作
int toposort(algraph& g,int n)
{
int i,j,k,m=0;
int top=0;
arcnode *p;
//p=(arcnode*)malloc(sizeof(arcnode));
for(i=1;i<=n;i++)
if(g.vertices[i].id==0)
{
g.vertices[i].id=top;
top=i;
}
while(top!=0)
{ j=top;
top=g.vertices[top].id;
printf("%d\n",g.vertices[j].data);
m++;
p=g.vertices[j].firstarc;
while(p!=NULL)
{ k=p->adjvex;
g.vertices[k].id--;
if(g.vertices[k].id==0)
{ g.vertices[k].id=top;
top=k;
}
p=p->nextarc;
}
}
if(m { printf("The AOV network has a cycle\n"); return 0; } else return 1;