计算机软件基础HDU报告Word文档格式.docx

上传人:b****8 文档编号:22510108 上传时间:2023-02-04 格式:DOCX 页数:13 大小:156.04KB
下载 相关 举报
计算机软件基础HDU报告Word文档格式.docx_第1页
第1页 / 共13页
计算机软件基础HDU报告Word文档格式.docx_第2页
第2页 / 共13页
计算机软件基础HDU报告Word文档格式.docx_第3页
第3页 / 共13页
计算机软件基础HDU报告Word文档格式.docx_第4页
第4页 / 共13页
计算机软件基础HDU报告Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

计算机软件基础HDU报告Word文档格式.docx

《计算机软件基础HDU报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机软件基础HDU报告Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

计算机软件基础HDU报告Word文档格式.docx

intdata;

structbitree*lchild;

structbitree*rchild;

};

bitree*create()//二叉树的建立

inta;

cin>

>

a;

if(a!

=0)

{

bitree*q=newbitree;

q->

data=a;

lchild=create();

rchild=create();

returnq;

}

else

returnNULL;

}

voidpreorde(bitree*root)//先序遍历

if(root!

=NULL)

cout<

<

root->

data<

"

"

;

preorde(root->

lchild);

rchild);

voidinorde(bitree*root)//中序遍历

inorde(root->

voidpostorde(bitree*root)//后序遍历

postorde(root->

voidmain()//主程序

bitree*head=NULL;

head=create();

preorde(head);

cout<

\n"

postorde(head);

四、实验结果:

实验二图的遍历

一、实验目的:

1.掌握图的存储结构及其构造方法。

2.掌握图的两种遍历算法及其执行过程。

二、实验内容:

以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现无向连通图的深度优先及广度优先搜索遍历,并输出遍历的结点序列。

提示:

首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先和广度优先遍历,并输出遍历的结果。

三、程序源代码:

#include<

#defineMaxVerNum50

structedgenode

intendver;

intinform;

structedgenode*edgenext;

structvexnode

charvertex;

structedgenode*edgelink;

structGraph

structvexnodeadjlists[MaxVerNum];

intvexnum;

intarcnum;

//队列的定义及相关函数的实现

structQueueNode

intnData;

structQueueNode*next;

structQueueList

structQueueNode*front;

structQueueNode*rear;

voidEnQueue(structQueueList*Q,inte)

structQueueNode*q=newstructQueueNode;

q->

nData=e;

next=NULL;

if(Q==NULL)

return;

if(Q->

rear==NULL)

Q->

front=Q->

rear=q;

else

rear->

next=q;

rear=Q->

next;

voidDeQueue(QueueList*Q,int*e)

if(Q==NULL)

if(Q->

front==Q->

rear)

*e=Q->

front->

nData;

rear=NULL;

voidCreatAdjList(Graph*G)//创建图

inti,j,k;

edgenode*p1;

edgenode*p2;

请输入顶点数和边数:

endl;

G->

vexnum>

arcnum;

开始输入顶点表:

for(i=0;

i<

vexnum;

i++)

cin>

adjlists[i].vertex;

G->

adjlists[i].edgelink=NULL;

开始输入边表信息:

for(k=0;

k<

k++)

请输入边<

Vi,Vj>

对应的顶点:

i>

j;

p1=newedgenode;

p1->

endver=j;

edgenext=G->

adjlists[i].edgelink;

adjlists[i].edgelink=p1;

p2=newedgenode;

p2->

endver=i;

adjlists[j].edgelink;

adjlists[j].edgelink=p2;

//因为是无向图,所以有两次建立边表的过程

voidDFS(Graph*G,inti,intvisit[])

adjlists[i].vertex<

visit[i]=1;

edgenode*p=newedgenode;

p=G->

if(G->

adjlists[i].edgelink&

&

!

visit[p->

endver])

{

DFS(G,p->

endver,visit);

voidDFStraversal(Graph*G,charc)//深度优先遍历

该图的深度优先遍历结果为:

intvisit[MaxVerNum];

for(inti=0;

visit[i]=0;

//全部初始化为0,即未访问状态

intm;

if(G->

adjlists[i].vertex==c)//根据字符查找序号

{

m=i;

DFS(G,i,visit);

break;

}

//继续访问未被访问的结点

for(i=0;

if(visit[i]==0)

voidBFS(Graph*G,intv,intvisit[])

QueueList*Q=newQueueList;

Q->

EnQueue(Q,v);

while(Q->

rear!

=NULL)

inte=0;

DeQueue(Q,&

e);

adjlists[e].vertex<

visit[e]=1;

edgenode*p=newedgenode;

p=G->

adjlists[e].edgelink;

if(p)

intm=p->

endver;

if(m==0)

{

EnQueue(Q,m);

while(visit[m]==0)

{

p=p->

edgenext;

if(p==NULL)

break;

m=p->

EnQueue(Q,m);

}

}

voidBFStraversal(Graph*G,charc)

该图的广度优先遍历结果为:

intvisited[MaxVerNum];

for(inti=0;

visited[i]=0;

adjlists[i].vertex==c)

BFS(G,i,visited);

if(visited[i]==0)

voidmain()//主函数

Graph*G=newGraph;

CreatAdjList(G);

charch;

请输入开始遍历的顶点:

ch;

DFStraversal(G,ch);

BFStraversal(G,ch);

实验心得

首先关于二叉树的建立、遍历,本次实验最大的收获就是对先序、中序、后序三种遍历方式有了更深的理解,由于之前学过相关数据结构的教材,所以感觉相对还是比较简单的。

主要的知识点还是在其递归的部分,这点认识透彻后问题就不大了。

而对于图的认识,遍历规则是较容易理解的,但是转换成语言编程的过程中出现了不少问题,尤其是在其节点通过队列形式实现的过程中,存在一些技巧性。

综合而言,这次试验让我有了一些自己的想法,即存在更优的算法,让其综合性能再度提高。

或许针对不同的数据结构类型采用不同的遍历方法,这才是最好的策略。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

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

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