欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构拓扑排序实验报告.docx

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

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

    数据结构拓扑排序实验报告.docx

    拓扑排序基本要求用邻接表建立一个有向图的存储结构。利用拓扑排序算法输出该图的拓扑排序 序列。编程思路首先图的创建,采用邻接表建立,逆向插入到单链表中,特殊注意有向是不需要对称插 入结点,且要把输入的字符在顶点数组中定位(LocateVex(Graph G, char *name),以便后 来的遍历操作,几乎和图的创建一样,图的顶点定义时加入int indegree,关键在于indegree 的计算,而最好的就是在创建的时候就算出入度,(没有采用书上的indegree。数组的方 法,那样会增加一个indegree算法,而是在创建的时候假如一句计数的代码 (G. vertices j. indegree) +;)最后调用拓扑排序的算法,得出拓扑序列。程序代码头文件:#paJina MAX_VHxTHX_NUM cO#paJina STAO为SIZH cO#paJina STAO为INOxHMHNT 10#paJina O 为I#paJina HxxOx°#paJinaINHHASIH 质 H#paJina OVHxH 质 OW<#paJina TxUH1#paJina HAJ贡SH0$AdapaJ in$ S$e$us:SAdapaJ in$ InJoTAda: $AdapaJ in$ S$e$us:SAdapaJ in$ SHIamT人da:/*定义弧的结构*/*该边所指向的顶点的位置*/*指向下一条边的指针*/*该弧相关信息的指针*/SAdapaJ s$t§uo$ AtioNopa in$ ep!vax: s$tiuo$ AtioNopa *nax$et§o: InJoTAda inJo:JArcNode;/*定义顶点的结构*/typedef struct VNodeint indegree;char data10;/*顶点信息*/ArcNode *firstarc;/*指向第一条依附该顶点的弧的指针*/VNodezAdjListMAX_VERTEX_NUM;/*定义图的结构*/ typedef struct Adj List vertices;/*图的当前顶点数和弧数*/*图的类型标志*/int vexnumzarcnum;int kind;Graph;/*定义栈的结构*/typedef struct(SEIemType *base;SEIemType *top;int stacksize;Stack;/*顶点定位*/int LocateVex(Graph G,char *name);/*创建有向图*/void CreateGra ph (Graph &G);/*拓扑排序*/StatusTopologicalSort(Graph G);/*初始化栈*/Status InitStack(Stack &s);/*判断空*/Status EmptyStack(Stack s);/*压栈*/Status Push(Stack &s,int e);/*出栈*/Status Pop(Stack &s,int &e);实现文件:include <stdio.h>#include,'malloc.h,#include "tuopupaixuhead.h"#include "stdlib.h"include "string.h"bool visitedMAX_VERTEX_NUM;/* 顶点定位,返回位序*/ int LocateVex(Graph G,char *name)(int i;for(i=l;i < =G.vexnum;i+)if(strcmp(name,G.verticesi.data)=O)返回数组的位置return i;return -1;/* 创建有向图* */void CreateGra ph (Graph &G) (ArcNode *p;char namel10,name210;int ijk;printf("请输入顶点数,按回车键结束:");scanf("d”,&Gvexnum);printf("请输入弧数,按回车键结束:");scanf("d”,&G.arcnum);printf("请挨次输入顶点名(用空格分开且字符小于10),按回车键结束:n)printf("");for(i=l;i<=G.vexnum;i+)初始化(scanf("%s”,G.verticesi.data);G.vertices i .fi rsta rc=NULL;G.verticesi.indegree=O;度数均初始化为 0)printf("nnnn");printf(" 输入小提示n");printfC &&&&1为避免输入遗漏,最好从选择任意一点,输入所有相邻边己);printf(” &&&&2输入边时格式(用空格分开,即格式为顶点(空格)顶点(空格) nM);printf("输入小提示nnnrT);for(k=0;k<G.arcnum;k+)printf(”请输入相邻的两个顶点,按回车键结束:");scanf("%s%s"/namel/name2);i=LocateVex(G,na mel);j 二 LocateVex(Gz na me2);(G.verticesj.indegree)+;每次作为弧的邻接点,则度数加1p=(ArcNode 判空*/Status EmptyStack(Stack s)malloc(sizeof(ArcNode);申请边节点p->adjvex=j;插入到邻接表中,注意此处为逆向插入到单链表中p->nextarc=G.verticesi.firstarc;G.verticesi.firsta rc=p;)/*初始化栈*IStatus InitStack(Stack &s)创建一个空栈( s.base=(i nt*) ma I loc(STAC KSIZE*sizeof (i nt);if(!s.base)return (OVERFLOW);s.top=s.base;s.stacksize=STACKSIZE;return OK; /*if(s.base=s.top) return 1;elsereturn 0;/* 压栈拓扑排序*IStatus Push(Stack &szint e) (if(s.top-s.base)> s.stacksize) s.base=(S 曰 emType*)realloc(s.base,(STACKSIZE+STACKINCREMENT)*sizeof(S日emTyp e);if(!s.base)return( OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCREMENT;)*s.top+=e;return OK; )/* 出栈*/Status Pop(Stack &sjnt &e) (e=*-s.top;return OK;)/*Status TopologicalSort(Graph G) ( int i,j,k,e;拓扑排序函数int count=0;Stack S;InitStack(S);for(i=l;i<=G.vexnum;+i)if(G.verticesi.indegree=O)置Push(SJ);while(!EmptyStack(S)(Pop(S,e);j=e;count+;printf("%s "zG.verticesj.data);用来统计顶点的个数定义一个栈,用来保存入度为0的顶点初始化栈若第i个顶点的入度为0 , i表示顶点在图中的位将第i个顶点入栈将为入度。的顶点位置出栈统计顶点的个数输出入度为0的顶点ArcNode *p;for(p=G.verticesj.firstarc; p ;p=p->nextarc) 找与第j个顶点的邻接顶点,并将其入度减1 (k=p->acljvex;(G.verticesk.indegree);if(G.verticesk.indegree=0)如果入度为 0,就入栈Push(Szk); )return OK;if(count<G.vexnum) “count小于顶点的个数时候,说明有环,不符合拓扑排序的要 求 (printf("n不是有向无环图!n)return ERROR;退出主文件:#include <stdio.h>#include"malloc.h"#include "tuopupaixuhead.h"#include "stdlib.h"#include"string.h"/*界面控制*Ivoid mainQGraph G;printfCXn#拓 扑 排 序#n“);printf(Hn$n*'); printf("n");CreateGraph(G);printf("各点入度分布如下:nn");for(int i=l;i<=G.vexnum;i+)输出顶点的度数printf("第d 个顶点s 的度数是dn”,i,G.verticesi.data,G.verticesi.indegree ); printf("nnn");printf("有向图所有顶点的拓扑排序:n)TopologicalSort(G);printfCXn");)实验数据与结果测试数据:$请请请MB底粗按里走神组束/会配展瑞知且字符小于 .按回车健结束,2 3 4 5 6 7椅M寸是示&&&虱为酒兔输入靖漏,最好从甑有邕一启,输入所有相邻边 &&8A2埼人时格式用空格分开.,即嵇或为顶点(至枢)顶点(空格) 输入不短小11456?23114-5J结结结结结结键键键键键键s±t±J回回回可回回Hi占苗X窖苫3点溜顶顶顶顶HJI)"T-11inin-£n-CnF-s.由谷令堀定名.TTt声k齐入入入入入入(ij>,LV.HuairMMH'-UH'UH-tt青青青青青青,实验结果2 0 A 1 1 1 1 数数数数数数散 度度度度度度度 lh,lhL ,尸、,卜、4MX" 12 3 4 5 6 7 点点点晨卡点会 顶顶顶顶顶顶顶 ATTTTTTT 12 3 4-567 >nr7gr>>nr?>np§r?§ ngr>有向图所有顶点的拓扑排序:3 2 14 6 5 7Peess any key to continue

    注意事项

    本文(数据结构拓扑排序实验报告.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开