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

    课程设计3树图及其应用.docx

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

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

    课程设计3树图及其应用.docx

    1、课程设计3树图及其应用题目:树、图及其应用 日期:2012年5月11日星期五 姓名: 学号:1、二叉树的建立和遍历的演示一实习目的1学会实现二叉树结点结构和对二叉树的基本操作。2掌握对二叉树每种操作的具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。二问题描述建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。三需求分析1编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历。2 .编写程序生成下面所示的二叉树,并采用先序遍历的递归算法对此二叉树进行遍历。 四概要设计从键盘输入二叉树的扩展先序

    2、序列,建立二叉树的二叉链表存储结构,然后采用递归算法对其进行遍历(先序、中序、后序),并将遍历结果打印输出五详细设计(给出算法的伪码描述)六测试分析白盒测试:查看代码完整性 黑盒测试:结构是否完整七使用说明八附录:测试数据测试内容测试结果输入扩展先序序列: L(G(W,C(X,M).J(H)正确先序遍历为:L G W C X M J H正确中序遍历为:WGXCMLHJ正确后序遍历为:W X M C G H J L正确九附C语言实现源码 #include #include #include #define MaxNode 100typedef int ElemType;typedef struc

    3、t node ElemType data; struct node *lchild; struct node *rchild;BTNode;void CreateTree(BTNode *&b,char *str)/建立二叉树 BTNode *St100; BTNode *p=NULL; int top=-1,k,j=0; char ch; b=NULL; ch=strj; while(ch!=0) switch(ch) case (:top+;Sttop=p;k=1;break; case ):top-;break; case ,:k=2;break; default:p=(BTNode *

    4、)malloc(sizeof(BTNode); p-data=ch; p-lchild=p-rchild=NULL; if(b=NULL) b=p; else switch(k) case 1:Sttop-lchild=p;break; case 2:Sttop-rchild=p;break; j+; ch=strj; void PreOrder(BTNode *b)/前序遍历 if(b!=NULL) printf(%c ,b-data); PreOrder(b-lchild); PreOrder(b-rchild); void InOrder(BTNode *b)/中序遍历 BTNode *

    5、p,*stackMaxNode; int top=0; if(b=NULL) return; p=b; while(!(p = NULL & top = 0) while(p!=NULL) if(toplchild; if(topdata); p=p-rchild; void LaOrder(BTNode *b)/后序遍历 if(b!=NULL) LaOrder(b-lchild); LaOrder(b-rchild); printf(%c ,b-data); void main() int number; BTNode *b=NULL; cout 1 创建树endl; cout 2 先序遍历

    6、树endl; cout 3 中序遍历树endl; cout 4 后序遍历树endl; cout 5 退出endlendl; cout 请您的选择number; while(number!=5) if(number=1) char str100; printf(请输入:); scanf(%s,&str); CreateTree(b,str); printf(树创建成功!n); else if(number=2) if(b=NULL) printf(对不起,您还没有创建树!n); else printf(先序遍历树为:); PreOrder(b); printf(n); printf(n); el

    7、se if(number=3) if(b=NULL) printf(对不起,您还没有创建树!n); else printf(中序遍历树为:); InOrder(b); printf(n); printf(n); else if(number=4) if(b=NULL) printf(对不起,您还没有创建树!n); else printf(后序遍历树为:); LaOrder(b); printf(n); printf(n); printf(请您选择: n); /1:创建树;2:先序遍历;3:中序遍历;4:后序遍历;5:退出 scanf(%d,&number); 十附程序运行结果截图创建树:先序遍

    8、历结果:中序遍历结果:后序遍历结果:2、图遍历的演示一实习目的学会以图的遍历操作为基础的,试写一个程序,演示无向图的遍历操作二问题描述很多涉及图上操作的算法都是以图的遍历操作为基础的。试写一个程序,演示无向图的遍历操作,要求以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。三需求分析1. 以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。2. 每个结点用一个编号表示(如果一个图有n个结点,则它们的编号分别为1,2,n)。通过

    9、输入图的全部边输入一个图,每个边为一个数对,可以对边的输入顺序作出某种限制。注意,生成树的边是有向边,端点顺序不能颠倒。3. (1) 建立无向图G的邻接表表示。按照用户输入顶点数,弧数. 各边(弧尾, 弧头) (2) 输出图中边的表示。用(A,B)表示 (3) 实现无向图的深度优先搜索遍历。实现无向图的广度优先搜索遍历,使用辅助队列q以存储已经被访问的路径长度为1,2,的顶点,并且访问标志数组visited,实现对图的遍历。四概要设计六 详细设计(给出算法的伪码描述)六测试分析测试数据:输入图的顶点数和弧数:格式:顶点数,弧数; 输入图的顶点数:6; 输入图的弧数:9; 接着输入各顶点:1*2

    10、*3*4*5*6(*代表“回车键”); 接着输入各条弧(边):1*2*1*3*1*6*2*3*3*4*3*5*3*6*4*5*5*6 (*代表“回车键”); 七使用说明顶点数和弧数固定好后,必须按所对应的边输入顶点到顶点的边名。八附录:测试数据输入图的顶点数:6个,弧数:9条,各顶点为1、2、3、4、5、6,各边为:12,13,16,23,34,35,36,45,56如图:九附C语言实现源码 #define MAX_VERTEX_NUM 2000#include#includetypedef struct arcnode/弧int adjvex;struct arcnode *nextarc;

    11、int info;arcnode;typedef struct vnode/结点char data;arcnode *firstarc;int mark;vnode,adjlistMAX_VERTEX_NUM;typedef struct/图adjlist vertices;int vexnum,arcnum;algraph;typedef struct csnode/树vnode *data;struct csnode *firstchild,*nextsibling;csnode;typedef struct queue/队列vnode *data;struct queue *next;

    12、queue;/队列main()void bulidalgraph(algraph *g);/创建图void dfstree(algraph *g,int i,csnode *t);/深度优先遍历生成树void bfstree(algraph *g,int i,csnode *t);/广度优先遍历生成树void preordertraverse(csnode *t);/树的遍历int preordertraverse1(int i,char a4023,csnode *t,int j);/将二叉树的图对应输入到数组中void preordertraverse3(csnode *t);/输出树的边

    13、集 algraph g;arcnode *p;csnode *tree1,*tree2;int i,j,m,n,flag1=1,flag2=1;char b4023,ch;/留作输出树的图tree1=tree2=NULL;bulidalgraph(&g);system(cls);for(i=0;inextarc) printf(%c,%c ,g.verticesi.data,g.verticesp-adjvex.data); printf(n);printf(n请输入要进行遍历的模式:nn1.深度优先遍历并生成树n2.广度优先遍历并生成树nn);fflush(stdin);scanf(%d,&

    14、j);if(j=1)/深度优先遍历 for(i=0;idata=g.vertices+i; tree1-firstchild=tree1-nextsibling=NULL; if(!tree2)tree2=tree1; else tree2-nextsibling=tree1; tree2=tree1; dfstree(&g,i,tree1); printf(恭喜你深度优先遍历操作完成,请进行下一步操作n1.输出树n2.输出树图n3.输出树的边集n其他输入为退出本程序n);else if(j=2)/广度优先遍历并生成树 for(i=0;ig.vexnum;i+) g.verticesi.mar

    15、k=0; for(i=0;idata=g.vertices+i; tree1-firstchild=tree1-nextsibling=NULL; if(!tree2)tree2=tree1; else tree2-nextsibling=tree1; tree2=tree1; bfstree(&g,i,tree1); printf(恭喜你广度优先遍历操作完成,请进行下一步操作n1.输出树n2.输出树图n3.输出树的边集n其他输入为退出本程序n);else printf(输入错误,程序退出n); exit(1);while(flag1) fflush(stdin); scanf(%d,&j);

    16、 if(j=1) preordertraverse(tree1); else if(j=2) for(m=0;m40;m+) for(n=0;n23;n+) bmn=#; preordertraverse1(0,b,tree1,0); system(cls); printf(树的图为n); for(n=0;n=0;m-) if(bmn=#) printf( ); else printf(%c,bmn); printf(n); else if(j=3) preordertraverse3(tree1); else exit(1); flag2=1; printf(是否还需要进行其他操作?(y/n

    17、)n); while(flag2) fflush(stdin); scanf(%c,&ch); if(ch=n|ch=N) exit(1); else if(ch=y|ch=Y) flag2=0;system(cls);printf(1.输出树n2.输出树图n3.输出树的边集n其他输入为退出本程序n); else printf(输入错误请重新输入n); void initalgraph(algraph *g)/初始化图int i;for(i=0;iverticesi.firstarc=NULL;int locatvex(algraph *g,char ch)int i;for(i=0;ivex

    18、num;i+) if(g-verticesi.data=ch) return(i); return(-1);void bulidalgraph(algraph *g)int i,m,n;char ch1,ch2;arcnode *p,*q;initalgraph(g);printf(请输入顶点数n);fflush(stdin);scanf(%d,&g-vexnum);printf(请输入弧数n);fflush(stdin);scanf(%d,&g-arcnum);printf(请输入各个顶点的值n);for(i=0;ivexnum;i+) fflush(stdin); scanf(%c,&g-

    19、verticesi.data); g-verticesi.mark=0;for(i=0;iarcnum;i+) printf(请输入第%d条弧n,i+1); fflush(stdin); ch1=getchar(); fflush(stdin); ch2=getchar(); if(m=locatvex(g,ch1)0)exit(1); if(n=locatvex(g,ch2)adjvex=n; p-nextarc=NULL; if(!g-verticesm.firstarc)g-verticesm.firstarc=p; else for(q=g-verticesm.firstarc;q-n

    20、extarc;q=q-nextarc); q-nextarc=p; if(!(p=(arcnode*)malloc(sizeof(arcnode)exit(1); p-adjvex=m; p-nextarc=NULL; if(!g-verticesn.firstarc)g-verticesn.firstarc=p; else for(q=g-verticesn.firstarc;q-nextarc;q=q-nextarc); q-nextarc=p; void dfstree(algraph *g,int i,csnode *t)/深度优先遍历生成树csnode *tree1,*tree2;a

    21、rcnode *p;if(!g-verticesi.mark)/如果这个结点没有遍历过 g-verticesi.mark=1;/记录以防重新遍历 for(p=g-verticesi.firstarc;p;p=p-nextarc)/对该节点的邻接点进行遍历 if(!g-verticesp-adjvex.mark) if(!(tree1=(csnode *)malloc(sizeof(csnode)exit(1);/开辟空间 tree1-data=g-vertices+p-adjvex; tree1-firstchild=tree1-nextsibling=NULL; if(!t-firstchi

    22、ld)/如果这是第一次那么应该是t的孩子 t-firstchild=tree1; else/应该是tree2的兄弟 tree2-nextsibling=tree1; tree2=tree1;/以便下一次操作 dfstree(g,p-adjvex,tree2);/递归 void preordertraverse(csnode *t)if(t) printf(%c,t-data-data); preordertraverse(t-firstchild); preordertraverse(t-nextsibling);else printf(0);int preordertraverse1(int

    23、 i,char a4023,csnode *t,int j)/将二叉树的图对应输入到数组中int k,m,n;m=n=0;if(t) m=preordertraverse1(i+1,a,t-nextsibling,j); k=m+j; n=preordertraverse1(i+1,a,t-firstchild,k+1); aki=t-data-data; return(m+n+1);else return(0);void preordertraverse3(csnode *t)/输出树的边集if(t) if(t-firstchild) printf(%c,%c) ,t-data-data,t

    24、-firstchild-data-data); preordertraverse3(t-firstchild); if(t-nextsibling) printf(%c,%c) ,t-data-data,t-nextsibling-data-data); preordertraverse3(t-nextsibling); void bfstree(algraph *g,int i,csnode *t)/深度优先遍历生成树arcnode *p;queue *qu1,*qu2,*head,*trail;csnode *tree1,*tree2;int j;tree1=tree2=NULL;trai

    25、l=qu1=qu2=head=NULL;p=NULL;if(!(head=(queue *)malloc(sizeof(queue)exit(1);if(!(trail=(queue *)malloc(sizeof(queue)exit(1);trail-data=g-vertices+i;trail-next=NULL;head-next=trail;if(trail-data-firstarc) while(head!=trail) head-next-data-mark=1; p=head-next-data-firstarc; j=0; while(p) if(!g-verticesp-adjvex.mark)/如果这个结点未遍历过 j=1; g-verticesp-adjvex.mark=1; if(!(tree1=(csnode *)malloc(sizeof(csnode)exit(1); if(!(qu1=(queue *)malloc(sizeof(qu


    注意事项

    本文(课程设计3树图及其应用.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




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

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开