2023年数据结构实验 教学计划编制问题(精选多篇).docx
《2023年数据结构实验 教学计划编制问题(精选多篇).docx》由会员分享,可在线阅读,更多相关《2023年数据结构实验 教学计划编制问题(精选多篇).docx(247页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年数据结构实验 教学计划编制问题(精选多篇) 推荐第1篇:数据结构实验报告十教学计划编制问题 问题描述: 若用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A指向B)。试设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。(课程线性排列,每门课上课时其先修课程已经被安排)。 基本要求: (1) 输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。 (2) 若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。 一、需求分析: 本程序需要基
2、于图的基本操作来实现 二、概要设计 : 抽象数据类型 : 为实现上述功能需建立一个结点类,线性表类,图类。 算法的基本思想 : 1、图的构建: 建立一个结点类,类的元素有字符型变量用来存储字母,整形变量用来存储位置,该类型的指针,指向下一个元素。建立一个线性表类,完成线性表的构建。建立一个图类,完成图的信息的读取,(如有n个点,则建立n个线性表,将每个结点与其指向的结点组成一个线性表,并记录线性表的长度)。 2、Topsort算法: 先计算每个点的入度,保存在数组中。找到第一个入度为0的点,将该点所连的各点的入度减一。再在这些点中找入度为0 的点。如果找到,重复上述操作。如果找不到,则跳出wh
3、ile循环,再搜索其他的点,看入度是否为0。再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。 程序的流程 程序由三个模块组成: 输入模块: 读入图的信息(顶点和边,用线性表进行存储)。 处理模块:topsort算法。 输出模块:将结果输出。 三、详细设计 算法的具体步骤: cla Node/结点类 public: string node; int position; /位置 Node* next; bool visit; /是否被访问 Node()visit=false;next=NULL;position=0;node= ; ; cla Line
4、/线性表类 public: int num; Node* head; Node* rear; Node* fence; Line()num=0;head=fence=rear=new Node(); void insert(int v,string ch) /插入元素 Node* current=new Node(); current-node=ch; current-position=v; fence-next=current; fence=current; num+; ; cla Graph /图类 private: int numVertex; int numEdge; Line* li
5、ne; public: Graph(int v,int e)numVertex=v;numEdge=e;line =new Linev; void pushVertex() /读入点 string ch; for(int i=0;i cout cinch; linei.head-node=ch; linei.head-position=i; void pushEdge() /读入边 string ch1,ch2; int pos1,pos2; for(int i=0;i cout cinch1ch2; for(int j=0;j if(linej.head-node=ch1) pos1=j;
6、/找到该字母对应的位置 if(linej.head-node=ch2) pos2=linej.head-position; break; linepos1.insert(pos2,ch2); void topsort() /拓扑排序 int i; int *d=new intnumVertex; for(i=0;i di=0; /数组初始化 for(i=0;i Node* p=linei.head; while(p-next!=NULL) dp-next-position+; /计算每个点的入度 p=p-next; int top=-1,m=0,j,k; for(i=0;i if(di=0)
7、di=top; /找到第一个入度为0的点 top=i; while(top!=-1) j=top; top=dtop; coutnode Node* p=linej.head; while(p-next!=NULL) k=p-next-position; dk-; /当起点被删除,时后面的点的入度-1 if(dk=0) dk=top; top=k; p=p-next; cout coutnm; Graph G(n,m); G.pushVertex(); G.pushEdge(); G.topsort (); system(pause); return 0; 四、调试分析 略。 五、测试结果 本
8、实验的测试结果截图如下: 注:此处由于不会用文件流输入和输出,故在命令提示符上直接进行输入。 六、用户使用说明(可选) 1、本程序的运行环境为windows 操作系统,执行文件为Untitled1.exe 2、运行程序时 提示输入数据 并且输入数据然后回车就可以继续输入相应数据,最后即可得到结果。 七、实验心得(可选) 1、本实验是在图的遍历问题的基础上做的,图的构建大部分是采用图 的遍历问题中的代码(不过要将结点类中的char改为string型), 自己另外写了topsort函数,就完成了整个程序。 2、topsort函数中一开始采用的方法是找到一个入度为0的点,完成 相应的操作后,重新进行
9、搜索,后来改进代码,先搜索入度为0的 点后面连接的点,这样减少了算法复杂度。 附录(实验代码): #include #include using namespace std; cla Node/结点类 public: string node; int position; /位置 Node* next; bool visit; /是否被访问 Node()visit=false;next=NULL;position=0;node= ; ; cla Line /线性表类 public: int num; Node* head; Node* rear; Node* fence; Line()num=0
10、;head=fence=rear=new Node(); void insert(int v,string ch) /插入元素 Node* current=new Node(); current-node=ch; current-position=v; fence-next=current; fence=current; num+; ; cla Graph /图类 private: int numVertex; int numEdge; Line* line; public: Graph(int v,int e)numVertex=v;numEdge=e;line =new Linev; vo
11、id pushVertex() /读入点 string ch; for(int i=0;i cout cinch; linei.head-node=ch; linei.head-position=i; void pushEdge() /读入边 string ch1,ch2; int pos1,pos2; for(int i=0;i cout cinch1ch2; for(int j=0;j if(linej.head-node=ch1) pos1=j; /找到该字母对应的位置 if(linej.head-node=ch2) pos2=linej.head-position; break; li
12、nepos1.insert(pos2,ch2); void topsort() /拓扑排序 int i; int *d=new intnumVertex; for(i=0;i di=0; /数组初始化 for(i=0;i Node* p=linei.head; while(p-next!=NULL) dp-next-position+; /计算每个点的入度 p=p-next; int top=-1,m=0,j,k; for(i=0;i if(di=0) di=top; /找到第一个入度为0的点 top=i; while(top!=-1) j=top; top=dtop; coutnode No
13、de* p=linej.head; while(p-next!=NULL) k=p-next-position; dk-; /当起点被删除,时后面的点的入度-1 if(dk=0) dk=top; top=k; p=p-next; cout coutnm; Graph G(n,m); G.pushVertex(); G.pushEdge(); G.topsort (); system(pause); return 0; 推荐第2篇:数据结构课程设计教学计划编制 攀枝花学院课程设计论文 教学计划编制问题 摘 要 教学计划(课程计划)是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不
14、同课程在管理学习方式的要求及其所占比例,同时,对学校的教学、生产劳动、课外活动等作出全面安排,具体规定了学校应设置的学科、课程开设的顺序及课时分配,并对学期、学年、假期进行划分。 根据一定的教育目的和培养目标制定的教学和教育工作的指导文件。它决定着教学内容总的方向和总的结构,并对有关学校的教学、教育活动,生产劳动和课外活动校外活动等各方面作出全面安排,具体规定一定学校的学科设置、各门学科的教学顺序、教学时数以及各种活动等。教学计划、教学大纲和教科书互相联系,共同反映教学内容。 近代以来,特别是在实行学科课程的条件下,教学计划主要是学科的计划,或只是学科表。随着社会经济和科学技术的新发展,教育结
15、构不断发生变革,现代教育和教学理论主张对教学计划的结构实行改革。除了教学以外,生产劳动、科技活动、发展体力和增进健康的活动、艺术活动和社会活动等也应列入教学计划。下面就利用对此进行程序设计,已达到预期的目的。 关键字:数据结构,教学计划编制,抽象数据类型,程序设计 - 1攀枝花学院课程设计论文 教学计划编制问题 2.概要设计: 2.1流程图 void FindInDegree(ALGraph G, int indegree)/求图中各节点的入度(如下左图)void CreatGraph(ALGraph *G)/构件图(如下右图)。 void TopologicalSort_1(ALGraph
16、G,int numterm,int uplcredit) /有向图G采用邻接表存储结构(如下左图); void TopologicalSort_2(ALGraph G,int numterm,int uplcredit) /有向图G采用邻接表存储结构(如下右图)。 攀枝花学院课程设计论文 教学计划编制问题 主函数: void main() - 4攀枝花学院课程设计论文 教学计划编制问题 数据关系:R1=ai-1 ai|ai-1,aiD,i=2,n 基本操作: void InitStack (SqStack *S); int StackEmpty(SqStack S); void Push(Sq
17、Stack *S, int ); int Pop(SqStack *S, int *e); ADT Stack 2.3主程序 int main() /主函数 int numterm; /学期总数 int uplcredit; /一个学期的学分上限 int selectway; ALGraph G; printf(请输入学期总数:n); scanf(%d,&numterm); printf(请输入一个学期的学分上限:n); scanf(%d,&uplcredit); CreatGraph(&G); printf(请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布n); scan
18、f(%d,&selectway); if(selectway=1) TopologicalSort_1(G,numterm,uplcredit); if(selectway=2) TopologicalSort_2(G,numterm,uplcredit); system(pause); return 0; 2.4本程序只有两个模块,调用关系简单 主程序模块拓扑排序模块 攀枝花学院课程设计论文 教学计划编制问题 4.详细设计 4.1头结点、表结点、邻接表的定义 #define MAX_VERTEX_NUM 100 /最大课程总数 typedef struct ArcNode int adjve
19、x; struct ArcNode *nextarc; ArcNode; typedef struct VNode char name24; /课程名 int claid; /课程号 int credit; /课程的学分 int indegree; /该结点的入度 int state; /该节点的状态 ArcNode *firstarc; /指向第一条依附该顶点的弧的指针 VNode,AdjListMAX_VEXTEX_NUM; typedef struct AdjList vertices; int vexnum, arcnum; ALGraph; 邻接表的基本操作: void CreatG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023年数据结构实验 教学计划编制问题精选多篇 2023 数据结构 实验 教学计划 编制 问题 精选
限制150内