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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验参考源代码 实验36.docx

1、数据结构实验参考源代码 实验36实验三 树形结构以下为部分参考程序:/递归实现二叉树的3种遍历#includetypedef char elemtype;struct bitree定义二叉树数据类型elemtype data; /结点信息bitree *lchild,*rchild; /左右孩子;bitree *create() /建立二叉链表 bitree *root, *s,*q100; /q为队列,最大空间为100int front=l,rear=0; /队列头、尾指针char ch;root=NULL;cout”请输入结点值(,为虚结点,#结束):”ch;while(ch!=#)s=N

2、ULL;if(ch!=,) s=new bitree; s-data=ch; s-lchild=NULL; s-rchild=NULL; rear+; qrear=s; /进队 if(rear=1) root=s;elseif(s!=NULL)&(qfront!=NULL) if(rear%2=0) qfront-lchild=s; else qfront-rchid=s;if(rear2=1)front+; /出队cinch;return root:void preorder(bitree *root) /先序遍历bitree *p;p=root;if(p!=NULL)coutdatalch

3、ild); preorder(p-rchild);void inorderl(bitree *root) /中序遍历bitree*p;p=root;if(p!=NULL) inorder(p-lchild); coutdatarchild);void postorder( bitree *root) /后序遍历 bitree *p;p=root;if(p!=NULL) postorder(p-lchild); postorder(p-rchild);coutdata“”; void main()bitree *root;root=create(); /建立二叉链表cout”先序遍历的结果”en

4、dl; preorder(root);coutendl; cout”中序遍历的结果”endl;inorder(root);coutendl:cout”后序遍历的结果”endl;postorder(root);cout0) while(p!=NULL) coutdatalchild; p=stop-; /退栈p=p-rchild; void inorderl(bitree*root) /中序遍历bitree*p,*s100; int top=0; p=root; while(p!=NULL)Il(topO) while(p!=NULL) s+top=p;p=p-lchild; p=stop-;

5、coutdatarchild; void postorderl( bitree *root) /后序遍历(bitree *p *sl100; int s2100,top=0,b; p=root; do while(p!=NULL) s1top=p;s2top+=0; p=p-lchild;) if(top0) (b=s2-top; p=s1top; if(b=0) sltop=p;s2top+=l; p=p-rchild; elsecoutdata0);/ /建立二叉链表参考前述程序/按照层次遍历二叉链表#includetypedef char elemtype;struct bitree e

6、lemtype data; /结点信息bitree *lchild,*rchild; /左右孩子;/按层次遍历二叉树(建立二叉链表同前)void lorder(bitree *t) bitree q100,*p; /q代表队列int f,r; /f,r类似于队列头、尾指针q1=t; f=r=l;cout”按层次遍历二叉树的结果为:”;while if=r) p=qf; f+; /出队 coutdatalchild!=NULL) r+;qr=p-lchild; /入队 if p-rchild!=NULLl r+; qr=p-rchild; /入队 coutlchild); leftOright(

7、root-rchild); bitree *t=root-lchild; root-lchild=root-rchild; root-rchild=t;/主函数 void main()bitree *root;root=create(); /建立二叉链表coutendlendl”左右子树交换前的遍历结果”endl;cout”先序遍历的结果”endl; preorder(root);coutendl; cout”中序遍历的结果”endl;inorder(root);coutendl:cout”后序遍历的结果”endl;postorder(root);coutendl;leftTOright(ro

8、ot);coutendlendl”左右子树交换后的遍历结果”endl;cout”先序遍历的结果”endl;preorder(root);coutendl;cout”中序遍历的结果”endl;inorder(root);coutendl;cout”后序遍历的结果”endl;postorder(root);coutarcsvw.adj=l; return; void del_arc(graph *g,int v,int w) g-arcvw.adj=0; retum; /内容1参考程序 #define maxnode 40 #define null 0 #include typedef struc

9、t st_arc int adjvex; int weight; struct st_arc *nextrac;arcnode; typedef struct int vertex; struct st_arc *firstarc;vernode; typedef vernode adjlistmaxnode; void del_arc(vernode g,int v,int w) /删除从顶点v到顶点w的边 arcnode *rl,*r2; rl=gvfrrstarc;r2=rl;while(r1!=null&r1-adjvex!=w)r2=rl;rl=rl-nextarc;if (rl=n

10、ull)printf(”no edge v-w”);return;elseif(r1=r2) /当只有一个边结点时gv.firstarc=r1-nextarc;else r2-nextarc=r1-nextarc; /有多个边结点时rl=gw.firstarc;r2=rl;while(r1!=null&r1-adjvex!=v) /在以v为头结点的链表中,删除相应的 /边结点r2=rl;rlrl-nextarc;if (rl=null)printf(”no edge v-w.”);return;elseif(r1=r2)gw.firstarc=rl-nextarc;elser2-nextarc

11、=r1-nextarc;void print(vernode g,int n) /打印图中各结点的结构arcnode *q;int i;printf(”adjacency list of the graph:n”);for(i=0;iadjvex);printf(”%dt”,q-weight);q=q-nextarc; printf(”n”); main() int i,j,n,k,w,v; arcnode *p,*q; adjlist g; printf(”Input node: ”); /输入图中顶点个数 scanf(”%d”,&n); for(k=0;kadjvex=j; q-weigh

12、t=w; q-nextarc=gi.firstarc; /头指针指向新的边结点 gi.firstarc=q; p=(arcnode*)malloc(sizeof(arcnode); p-nextarc=gi.firstarc; gi.firstarc=q; p=(arcnode*)malloc(sizeof(arcnode); p-adjvex=i; p-weight=w; p-nextarc=gj.firstarc; gj.firstarc=p; print(g,n); printf(”Delete edge V-w:”);scanf(”%d%d”,v,&w);del_arc(g,v,w);

13、print(g,n);1 内容2的知识要点:构造有向图链接表与无向图链接表的算法区别是:无向图两结点无向对偶,因而邻接表有一定的对偶性;有向图两结点间有向无对偶关系,因而建立邻接表时应根据输入的顶点及边的有向关系建立(当箭头方向离开结点为有关,当箭头方向指向结点为无关)。/内容2的参考程序/有向图链表的存储结构为:typedef struct st_arc int aajvex; /存放依附于该边的另一顶点在一维数组中的序号int weight; /存放和该边有关的信息,如权值等struct st_arc *nextarc; /依附于该顶点的下一个边结点的指针arcnode;typedef s

14、tructint vertex; /存放与顶点有关的信息struct st_arc*firstarc;vernode; /存储顶点信息typedef vernode adjlistmaxnode;/参考程序见内容12 内容3的知识要点:深度优先搜索遍历图的算法:首先访问指定的起始顶点v0,从vo出发,访问vo的一个未被访问过的邻接顶点w1,再从w1出发,访问w1的一个未被访问的顶点w2,然后从w2出发,访问w2的一个未被访问的邻接顶点w3,依此类推,直到一个所有邻接点都被访问过为止。图采用邻接表作存储结构,图的深度优先遍历次序为 参考程序运行过程中,深度优先遍历时指针p的移动方向示意如图下所示

15、,图中p1、p2、p3、p4、p5和p6为深度优先遍历图的各结点时,指针p的移动次序。/内容3的参考程序#define maxnode 40#define null 0#includetypedef struct st_arc /定义结构体 int adivex; int weigh; struct st_arc *nextarc; arcnode;typedef structint vertex;struct st_arc *firstarc;vernode;typedef vernode adjlistmaxnode;void trave(adjlist g,int n) /采用邻接表作存

16、储结构的/深度优先遍历int i,visitedmaxnode; /数组visited标志图中的定点是否已被访问void dfs();for(i=0;in;i+)visitedi=0; /数组初始化for(i=0;iadjvex; if(visitedw=0) dfs(g,w,visited); p=p-nextarc; main()int i,j,n,k,v;arcnode *p,*q;adjlist g;printf(“Input node:”);scanf(“%d”,n);for(k=0;kadjvex=j; q-nextarc=gi.firstarc; gifirstarc=q; p=

17、(arcnode*)malloc(sizeof(arcnode); p-adjvex=i; p-nextarc=gi.firstarc; gi_firstarc=p; printf(“dfs:”); trave(g,n); /深度优先遍历图。 printf(“n”);3 内容4的知识要点:广度优先遍历图的算法:首先访问指定的起始顶点v0,从v0出发,访问v0的所有未被访问的邻接顶点w1,w2,wk,然后再依次从w1,w2,wk出发,访问所有未被访问过的邻接顶点,依此类推,直到图中所有未被访问过的邻接顶点都被访问过为止。 根据广度优点遍历的规则,在其算法实现中,借助一个队列gqueue来存放已被

18、访问过的顶点。从指定顶点开始,每访问一个顶点,就将它入队并排在队尾,然后从队头取出一个顶点,访问该顶点的所有未被访问的邻接点,依此类推,直至队列为空且图中结点均被访问过为止。 图的广度优先遍历次序为: 参考程序运行过程中,广度优先搜索时指针p的移动示意如下图所示,图中片p1、p2、p3、p4、p5和p6为广度优先遍历图的各结点指针p的移动次序。 /内容4的参考程序#define maxnode 40#define null 0#includetypedef struct st_arc /定义结构体 int adivex; int weigh; struct st_arc *nextarc; a

19、rcnode;typedef structint vertex;struct st_arc *firstarc;vernode;typedef vernode adjlistmaxnode;typedef struct int queuemaxnode;int front;int rear;qqtype;void intiate(qqtype *q) /初始化队列 q-front=-1; q-rear=-1; int enter(qqtype *q,int x) /将X入队if(q-rear=maxnode-1) return(-1); else q-rear+;q-queueq-rear=x

20、;return(0);int delete(qqtype *q) /出队if(q-front=q-rear) return(null); else q-front+;return(q-queueq-front); int emtype(qqtype *q)if(q-front=q-rear)return(-1);return(0);void bfs(adjlist g,int k,int visited) /从顶点k出发进行广度优先遍历arcnode *p;int w;intiate(g);visitedk=1; /访问点从k开始,并把它入队。printf(“%d”,gp-adjvex.ver

21、tex);enter(g,k); while(emptye(g)=0) w=delete(g); p=gw.firstarc; while(p!=null) if(visitedp-adjves=0) printf(“%d”,gp-adjvex.verte); visitedp-adjvex=1; enter(g.p-adjvex); p=p-nextarc; void trave(adjlist g,int n) /图采用邻接表存储的广度优先遍历int i,visitedmaxnode; /数组visited标志图中的定点是否已被访问。 for(i=0;in;i+)visitedi=0; /

22、数组初始化for(i=0;in;i+)if(visitedi=0)bfs(g,i,visted);main()int i,j,n,k,v;arcnode *p,*q;adjlist g;printf(“Input node:”);scanf(“%d”,n);for(k=0;kadjvex=j; q-nextarc=gi.firstarc; gifirstarc=q; p=(arcnode*)malloc(sizeof(arcnode); p-adjvex=i; p-nextarc=gi.firstarc; gi_firstarc=p; printf(“bfs:”); trave(g,n); /广度优先遍历图。 printf(“n”);实验五 查找以下为部分参考程序:/参考程序#include #define KEYTYPE

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

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