欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    湖大数据结构教学计划编制问题文档格式.docx

    • 资源ID:22398862       资源大小:193.18KB        全文页数:21页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    湖大数据结构教学计划编制问题文档格式.docx

    1、a01 a034. 请输入课程总数:4请输入第四门课程的课程号(占3位的字母数字串):a04 a02请输入第二条边:请输入第三条边:请输入第四条边:a04 a01a04 a02 a03 a015. 请输入课程总数:-1 结束程序 二 概要设计抽象数据类型因为各个课程的修读之间的关系是非线性的,而且具有结构网状特性,并且课程修读关系是有向的,所以选择有向图来表示教学计划;由于邻接表的时间复杂度为(),比邻接矩阵的时间代价要小,所以我选用邻接表来存储该有向图;有向图的ADT设计:数据对象:G=(V,E),其中V表示顶点集合,E表示边集合数据关系:VR| v,wV 且 P(v,w) 表示从 v 到

    2、w 的一条弧, v 为弧头,w 为弧尾。基本操作:int n();/图中顶点个数int e();/图边数int first(int);/该点的第一条临边int next(int,int);/该点的第二条临边void setEdge(int,int,int);/为边设置权值void setMark(int ,int);/设置该顶点的标志值int getMark(int);/获得该顶点的标志值 图的顶点ADT设计: 数据对象:课程的课程号(占3位的字母数字串)数据关系:vi|i=1,2,3n int position();/获取顶点位置算法基本思想1.建表:通过用户输入的课程个数初始化一个有向图的

    3、临接矩阵,根据用户输入的课程修读的先后关系构建完整的临接矩阵,并完成图的构建。为了检验图中顶点是否经过拓扑排序,为每个顶点初始化一个标志值0,当一个顶点经过拓扑排序后更改该顶点标志值1。2.排序:从有向图中选取一个没有前驱 的顶点,将该顶点的数据入队列。然后从有向图中删去此顶点以及所 有以它为尾的弧,并把该顶点标志值改为1。重复上述步骤 ,直至所有点的标志值都为1(图空),或者图不空但找不到无前驱的顶点为止。若无标志值为0的顶点,则输出顶点序列并将其存入文件中,若还有1个或1个以上的标志值为0的顶点,则输出此问题无解程序基本流程此程序主要包括4个流程:1.输入流程:由用户输入各项参数:课程总数

    4、,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。当用户输入有误时,提示用户输入有误并重新输入;2.构建流程:根据用户构建相应的临接矩阵;3.排序流程:将该图的顶点依次进行拓扑排序,并将排序结果存入队列;4.输出流程:若最后所有顶点标志值都为1,则输出队列中的课程修读顺序,将其存入文件中。若最后有1个或1个以上顶点标志值为0,则输出该问题无解三 详细设计物理数据类型1. 图和边的相邻矩阵实现:边的实现:class Edgepublic:int vertex,weight;Edge() vertex=-1;weight=-1; Edge(int v,intw) vertex=v;w

    5、eight=w;图的相邻矩阵实现:class Graphmprivate:int numVertex,numEdge;int *matrix; int *mark;Graphm(int numVert) int i,j;numVertex = numVert; /顶点数 numEdge=0; mark=new intnumVert;for(i=0;inumVertex;i+) marki=0; /每一个顶点的标志值初始化为0 matrix =(int*) new int*numVertex; matrixi=newint*numVertex; for(i=0;for(j=0;jnext; de

    6、lete rear;size=0; /队列的清空 bool enqueue(const Node& it) if(rear=NULL) front=rear=new Link(it NULL); else rear-next=new Link size+; return true;/入队bool dequeue( Node& if(size=0) return false; it=front-element;Node* ltemp=front;front=front-nextdelete ltemp;if(front=NULL) rear=NULL;siz-;return true;/出队in

    7、t length() const return size; /队列的长度Topological Sort的实现void topsort(Graph* G, Queue* Q) int CountG-n(); int v, w; for (v=0; vn(); v+) Countv = 0; v+) / Process edges for (w=G-first(v); wnext(v,w) Countw+; / Add to v2s count v+) / Initialize Q if (Countv = 0) / No prereqs Q-enqueue(v); while (Q-lengt

    8、h() != 0) dequeue(v); printout(v); / PreVisit for V w = G-next(v,w) Countw-; / One less prereq if (Countw = 0) / Now freeenqueue(w);算法具体步骤1.输入:2.构建图:根据用户构建相应的临接表;3.拓扑排序:4.输出:input(classNu);/课程总数Graphm G;Queue Q;for(int i=0;classNu;i+)input(classNamei);/课程编号input(rearClass);/该课程的先修课程if(rearClass!=N)G

    9、.setEdge(rearClass,i);G.setMark(i,1);for(int j=0;n;j+) if(G.getMark(i)=0)output:”此问题无解。”;exit;/判断是否有解topsort(G,Q);/排序及输出函数关系调用 输入 构建临接矩阵:G.setEdge(classNum1,classNum2,1)标记函数:G.Mark(I,1)拓扑排序:topsort(G,Q)判断是否有解:存在G.getMark(i)=0?输出:output算法时空分析构建一个临接矩阵的时间代价是(|V|2),拓扑排序的时间代价是(|V|),所以该算法总的时间代价是(|V|2)输入输出

    10、格式输入: input(classNu);该课程的先修课是(若没有则输入N,有则输入课程号):/topsort函数中的输出功能 此问题无解。四 调试分析程序需要用到较多指针,因而首次调试时出现了溢出的情况,后来通过设置断点的方法解决了这个问题五 测试结果六 用户使用说明1. 本程序可以通过构建一个有向图来实现教学计划的编排;2. 用户需输入每门课的课程号(固定占输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和边的总数以及各条边。3在边的输入中,请勿输入之前未经输入的课程名字,否则程序会出错!七 实验心得通过该实验,我掌握了通过构建邻接表来存储图的方法以及拓扑排序的使用方法。#in

    11、cludestringusing namespace std;int judge() /对输入的合法性进行判断并返回有效的输入 int temp; cin.sync(); /清空输入流缓冲区 cin temp; while (1) if (cin.fail() | cin.bad() | cin.get() != n) /验证输入是否合法,其中cin.fail()和cin.bad()解决输入字符串和溢出的问题 cout return temp;/结点类 string className; int position; /位置 Node* next; bool visit; /是否被访问 Node

    12、() visit = false; next = NULL; position = 0; className = ;class List /线性表类 int num; Node* head; Node* rear; Node* fence; List() num = 0; head = fence = rear = new Node(); List() deletehead; deletefence; void insert(int v, string ch) /插入元素 Node* current = new Node(); current-className = ch;position =

    13、 v; fence-next = current; fence = current; num+;class Graph /图类 int numVertex; int numEdge; List* list; Graph(int v, int e) numVertex = v; numEdge = e; list = new Listv; Graph() deletelist; void pushVertex() /读入点 string ch; for (int i = 0; i i+) 请输入课程 i + 1 ch; listi.head-position = i; void pushEdge

    14、() /读入边 string ch1,ch2; int pos1,pos2; for (int i = 0;numEdge; cout 请输入第i+1 ch1 ch2; for (int j = 0; jclassName = ch1) pos1 = j; /找到该字母对应的位置 if (listj.head-className = ch2) pos2 = listj.head-position; break; listpos1.insert(pos2, ch2); void topsort() /拓扑排序 int i; int *count = new intnumVertex; for (

    15、i = 0; counti = 0; /数组初始化 Node* p = listi.head; while (p-next != NULL) countp-next-position+; /计算每个点的入度 p = p- int top = -1, m = 0, j, k; i+) if (counti = 0) counti = top; /找到第一个入度为0的点 top=i; while (top != -1) j = top; top = counttop; listj.head-className = NULL) k = p- countk-; /当起点被删除,时后面的点的入度-1 if(countk=0) countk = top; top = k; p = p- if (mnumVertex) /输出点的个数小于输入点的个数,不能完全遍历此问题无解 deletecount;int main() int classAmo, sideAmo; cout NUL); return 0;


    注意事项

    本文(湖大数据结构教学计划编制问题文档格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开