ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:245.27KB ,
资源ID:8040518      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8040518.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计报告模板.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计报告模板.docx

1、课程设计报告模板算法与数据结构课程设计报告题目: 教学计划编制问题 专业: 网络工程 班级: 2 学号: 1030040259 姓名: 魏益松 指导教师: 姜忠海 完成日期:2012年 6月 24日一、课程设计目的本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结

2、构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。二、课程设计内容针对计算机系本科课程,依据其相互依赖关系制定课程安排计划,其相互依赖关系如下图所示,并要求各学期课程数目大致相同且搭配适当。基本要求(1)求解上图的拓扑排序结果。(2)上述课程在4学期上完,要求每学期上课的门数大致一样。三、课程设计过程1需求分析根据课程间的依赖关系,制定课程安排计划。按照用户的输入建立一个邻接表,输出拓扑排序结果。按照用户输入的课程数,学期数,课程间的先后关系数目以及课程间两两间的先后关系,程序执行后会给出每学期

3、应学的课程。(1) 输入的形式和输入值的范围:输入间用空格隔开。要求用户输入的课程数小于20,学期数小于或是等于20,课程名的长度小于等于20个字符。(2) 输出的形式:输出本程序使用的课程及先后关系表,输出各个顶点的入读数和邻接点,输出一个拓扑排序结果;输出各个学期应学的课程代号。(3) 程序所能达到的功能:按照用户的输入,输出拓扑排序结果。按照用户的输入,给出每学期应学的课程。2概要设计1.头文件#include #include #include #include using namespace std;#define MAX_VERTEX_NUM 20 /最大顶点个数2. 定义链式队列

4、typedef int ElemType;typedef struct QNode ElemType data; struct QNode *next; QNode,*QueuePtr;typedef struct QueuePtr front; QueuePtr rear; LinkQueue;3. 初始化链式队列void InitQueue(LinkQueue *Q) Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode); if (!(Q-front) exit(0); Q-front-next=NULL; 4. 判断空队列int QueueEmpty

5、(LinkQueue Q) if(Q.front=Q.rear) return 1; else return 0; 5. 入队列void EnQueue(LinkQueue *Q, ElemType e) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if (!p) exit(0); p-data=e; p-next=NULL; Q-rear-next=p; Q-rear=p; 6.出队列void DeQueue(LinkQueue *Q, ElemType *e) QueuePtr p; if(Q-front!=Q-rear) p=Q-front

6、-next; *e=p-data; Q-front-next=p-next; if (Q-rear=p) Q-rear=Q-front; free(p); 7.图与邻接表typedef char VertexType20; /顶点信息(名称)/* 图的类型定义(邻接表存储结构) */typedef struct ArcNode /链表结点 int vexpos; /该弧所指向的顶点在数组中的位置 struct ArcNode *next; /指向当前起点的下一条弧的指针 ArcNode;typedef struct VNode /头结点 VertexType name; /顶点信息(名称) i

7、nt indegree; /顶点入度 ArcNode *firstarc; /指向当前顶点的第一条弧的指针 VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vexhead; /邻接表头结点数组 int vexnum,arcnum; /图的顶点数和弧数 ALGraph8.定位顶点的头节点int LocateVex(ALGraph G,VertexType v) int i; for(i=0;iG.vexnum;i+) if(strcmp(v,G.vexheadi.name)=0) break; return i; 9. 建立邻接表int Cr

8、eateGraph(ALGraph *G) /成功建立返回1,不成功则返回0 int i,j,k; VertexType v1,v2;ArcNode *newarc; printf(n输入有向图顶点数和弧数vexnum,arcnum:); /输入顶点数和弧数 scanf(%d,%d,&(*G).vexnum,&(*G).arcnum); /输入并判断顶点数和弧数是否正确 if(*G).vexnum0|(*G).arcnum(*G).vexnum*(*G).vexnum-1) printf(n顶点数或弧数不正确,有向图建立失败!n);return 0; printf(n输入 %d 个顶点:,(*

9、G).vexnum); /输入顶点名称 for(i=0;i(*G).vexnum;i+) scanf(%s,(*G).vexheadi.name); printf(n顶点列表:n共有%d个顶点: ,(*G).vexnum);/输出顶点名称 for(i=0;i(*G).vexnum;i+) printf(%s ,(*G).vexheadi.name); for(i=0;i(*G).vexnum;i+) /邻接表初始化 (*G).vexheadi.firstarc=NULL; (*G).vexheadi.indegree=0; printf(nn输入 %d 条边:vi vjn,(*G).arcnu

10、m); /输入有向图的边 for(k=0;k=(*G).vexnum) printf(顶点%s不存在,有向图建立失败!n,v1);return 0; if(j=(*G).vexnum) printf(顶点%s不存在,有向图建立失败!n,v2);return 0; newarc=(ArcNode*)malloc(sizeof(ArcNode); /前插法建顶点链表 newarc-vexpos=j; if(*G).vexheadi.firstarc=NULL) newarc-next=NULL; (*G).vexheadi.firstarc=newarc; else newarc-next=(*G

11、).vexheadi.firstarc-next; (*G).vexheadi.firstarc-next=newarc; (*G).vexheadj.indegree+; /对应顶点入度计数加1 printf(n有向图建立成功!n); return 1;10. 按邻接表方式输出有向图void PrintGraph(ALGraph G) int i;ArcNode *p; printf(n输出有向图:n); for(i=0; ivexpos.name); p=p-next; printf(n); 11. 输出本程序使用的课程及先后关系表int CreateGraph2(ALGraph *G)

12、/* 输出本程序使用的课程及先后关系表 */ cout课程及先修课程关系表endl; coutendl; cout课程代号 课程名称 先修课程 endl; coutendl; coutc1 高等数学 无 endl; coutendl; coutc2 程序设计 无 endl; coutendl; coutc3 离散数学 c1 endl; coutendl; coutc4 数据结构 c2 c3 endl; coutendl; coutc5 编译原理 c2 c4 endl; coutendl; coutc6 操作原理 c4 c7 endl; coutendl; coutc7 计算机组成原理 c2 e

13、ndl; coutendl; system(PAUSE); (*G).vexnum=8; (*G).arcnum=16; return 0;12. 按邻接表方式输出课程图void PrintGraph2(ALGraph G) int i;ArcNode *p; printf(n输出有向图:n); for(i=0; ivexpos.name); p=p-next; printf(n); 13.拓扑排序void TopologicalSort(ALGraph G) int i,k,count;ElemType e;ArcNode *p; LinkQueue Q; /*定义队列*/ InitQueu

14、e(&Q); for(i=0; inext) /遍历当前课程的邻接点 k=p-vexpos; /邻接点位置 if(!(-G.vexheadk.indegree) /每个邻接点入度减1后若为零则入队列 EnQueue(&Q,k); printf(n); if(countG.vexnum) printf(n该有向图有回路,无法完成拓扑排序!n); 14. 主函数void main() ALGraph G; int menu,menu2; while(1) printf(n *n); printf( * 1.输出课程及先修课程关系表 *n); printf( * 2.建立有向图并求一个拓扑排序序列

15、*n); printf( * 3.退出 *n); printf( *n); printf( 请输入你的选择:); scanf(%d,&menu); switch(menu) case 1: if(CreateGraph2(&G) /有向图建成则执操作 system(PAUSE); PrintGraph2(G); system(PAUSE); break; case 2: if(CreateGraph(&G) /有向图建成则执操作 system(PAUSE); PrintGraph(G);system(PAUSE); TopologicalSort(G); break; case 3: retu

16、rn; 3详细设计1.教学计划编程问题,主要是根据不同课程之间的依赖关系来分配先后顺序。是拓扑排序的应用,邻接表为主要存储结构,队列为辅助结构。利用宏定义来完成一些变量的赋值:2、本程序包含 8个函数:( 1 )主函数 main( )( 2 )创建一个队列InitQueue ( )( 3 ) 判断空队列QueueEmpty ( ) ( 4 )入队操作 enqueue( ) ( 5 )出队操作 dequeue( ) ( 6 )定位顶点 LocateVex ( )(7)创建邻接表CreateGraph()(8)输出有向图 PrintGraph()(9)拓扑排序 TopologicalSort()

17、(10 )菜单操作 menu( )4调试分析 调试过程中遇到很多问题,大多是和同学讨论共同修改。由于只输出拓扑排序结果,没有输出学期安排,用队列存储不知道怎么实现学期安排,又编写了一个用栈来存储的学期输出程序,在附录中有。5用户使用说明根据提示输入。6测试结果7附录#include #include #include #include #include #define TRUE 1 #define FALSE 0 typedef int Status; typedef int Boolean; #define MAX_NAME 10 #define MAXCLASS 100 int Z=0;

18、int X=0; int xqzs,q=1,xfsx; typedef int InfoType; typedef char VertexTypeMAX_NAME; /* 字符串类型*/ /* 图的邻接表存储表示*/ #define MAX_VERTEX_NUM 100 typedef enumDGGraphKind; typedef struct ArcNode int adjvex; struct ArcNode *nextarc; InfoType *info; ArcNode; typedef struct VertexType data; /* 顶点信息*/ ArcNode *fir

19、starc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针*/ VNode,AdjListMAX_VERTEX_NUM; /* 头结点*/ typedef struct AdjList vertices,verticestwo; int vexnum,arcnum; /* 图的当前顶点数和弧数*/ int kind; /* 图的种类标志*/ ALGraph;/* 图的邻接表存储的基本操作*/ int LocateVex(ALGraph G,VertexType u) /* 初始条件: 图G存在,u和G中顶点有相同特征*/ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;

20、否则返回-1 */ int i; for(i=0;iG.vexnum;+i) if(strcmp(u,G.verticesi.data)=0) return i; return -1;Status CreateGraph(ALGraph *G) /* 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) */ int i,j,k; VertexType va,vb; ArcNode *p; (*G).vexnum=7; printf(请输入拓扑排序所形成的课程先修关系的边数: ); scanf(%d,&(*G).arcnum); printf(请输入7个课程的代表值(7个字符):n

21、,(*G).vexnum,MAX_NAME); for(i=0;i(*G).vexnum;+i) /* 构造顶点向量*/ scanf(%s,(*G).verticesi.data); (*G).verticesi.firstarc=NULL; printf(请输入每条弧(边)的弧头和弧尾(以空格作为间隔):n); for(k=0;kadjvex=j; p-info=NULL; /* 图*/ p-nextarc=(*G).verticesi.firstarc; /* 插在表头*/ (*G).verticesi.firstarc=p; return OK; void Display(ALGraph

22、 G) /* 输出图的邻接矩阵G */ int i; ArcNode *p; switch(G.kind) case DG: printf(有向图n); printf(%d个顶点:n,G.vexnum); for(i=0;iG.vexnum;+i) printf(%s ,G.verticesi.data); printf(n%d条弧(边):n,G.arcnum); for(i=0;iadjvex.data); p=p-nextarc; printf(n); void FindInDegree(ALGraph G,int indegree) /* 求顶点的入度,算法调用*/ int i; Arc

23、Node *p; for(i=0;iG.vexnum;i+) indegreei=0; /* 赋初值*/ for(i=0;iadjvex+; p=p-nextarc; typedef int SElemType; /* 栈类型*/ /*栈的顺序存储表示*/ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/ #define STACKINCREMENT 2 /* 存储空间分配增量*/ typedef struct SqStack SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */ SElemType *top; /* 栈顶指针*/ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ SqStack; /* 顺序栈*/ /* 顺序栈的基本操作*/ Status InitStack(SqSta

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

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