云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 1009040130-贺程-实验5

1009040130-贺程-实验5

  • 62 次阅读
  • 3 次下载
  • 2025/5/23 21:34:48

《算法分析与设计》实验报告

实验五 基本检索与周游方法算法设计

姓名 贺程 学号 1009040130 班级 电子商务1002班

时间 2013/3/22 地点 文波机房 同 组 人 无 指导教师 朱少林

实验目的与要求

a) 掌握基本检索与周游方法算法设计的一般思想。

b) 掌握二元树、图的周游和检索算法。

c) 理解树、与或树、对策树周游与检索的思想和方法。

实验内容

d) 二元树周游 e) 图的周游

相关内容

一、 二元树周游

a)、

中根次序周游(LDR)

Procedure INORDER(T)

//T是一棵二元树。T的每个结点有三个信息段: LCHILD、DATA、RCHILD//

If T≠0 then call INORDER(LCHILD(T)) call VISIT(T)

call INORDER(RCHILD(T))

endif

endINORDER

b)、 先根次序周游(DLR)

Procedure PREORDER(T)

//T是一棵二元树。T的每个结点有三个信息段: LCHILD、DATA、RCHILD// If T≠0 then call VISIT(T)

call PREORDER(LCHILD(T))

call PREORDER(RCHILD(T))

endif

endPREORDER

c)、 后根次序周游(LRD)

Procedure POSTORDER(T)

//T是一棵二元树。T的每个结点有三个信息段: LCHILD、DATA、RCHILD//

If T≠0 then call POSTORDER(LCHILD(T))

call POSTORDER(RCHILD(T))

call VISIT(T) endif

endINORDER

d)、 中根次序周游的非递归算法

Procedure INORDER1(T) //T是一棵二元树,每个结点有三个信息段:LCHILD、DATA、RCHILD// 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

//使用大小为m的栈的一个非递归算法// integer i, m, STACK(M)

if T=0 then return endif //T为空// P←T; i←0 //周游T;i为栈顶//

Loop

While LCHILD(P)≠0 do //周游左子树// i←i+1

If i>m then print(‘stack overflow’) Stop Endif

STACK(i) ←P; P←LCHILD(P) Repeat

Loop

Call VISIT(P) //P的左子树周游完// P←RCHILD(P)

If P≠0 then exit endif //周游右子树// If i=0 then return endif P←STACK(i); i←i-1 Repeat //访问父结点// repeat

endINORDER1

二、 图的检索与周游

a) 图的宽度优先检索算法

Line procedure BFS(v)

//宽度优先检索G,它在结点v开始执行。所有已访问结点都

标上VISITED(i)=1。图G和数组VISITED是全程量。VISITED开始时都已置成0。//

1 VISITED(V) ←1; u←v

2 将Q初始化库空 //Q是未检测结点的队列//

3 Loop

4 For 邻接于u的所有结点w do

5 If VISITED(w)=0 then call ADDQ(w, Q)

//w未检测//

6 VISITED(w) ←1 7 Endif 8 Repeat

9 If Q为空 then return endif

//不再有还未检测的结点//

10 Call DELETEQ(u, Q) //从队中取一个未检测的结点// 11 Repeat 12 endBFS b) 图的宽度优先周游

Procedure BFT(G, n)

Declare VISITED(n)

For i←1 to n do //将所有结点标注为未访问// VISITED←0 Repeat

For i←1 to n do /反复调用BFS//

If VISITED(i)=0 then call BFS(i) endif Repeat endBFT

c) 图的深度优先检索算法

procedure DFS(v)

//已知一个n结点无向(或有向)图G=(V,E)以及初值已置为零的数组VISITED(1: n)。这个算法访问由v可以到达的所有结点。G和VISITED是全程量。// VISITED(V) ←1;

For 邻接于v的每个结点w do

If VISITED(w)=0 then call DFS(w) Endif Repeat endDFS

d) 图的深度优先周游算法

Procedure DFT(G, n) Declare VISITED(n)

For i←1 to n do //将所有结点标注为未访问// VISITED←0 Repeat For i←1 to n do /反复调用DFS//

If VISITED(i)=0 then call DFS(i) endif Repeat endDFT

实验步骤

f) 准备模拟二元树和模拟图的数据。

g) 用递归方法设计二元树周游和检索程序,调试通过。周游和检索的次序可以是先序、中序和后序。

h) 用非递归方法设计二元树周游和检索程序,调试通过。周游和检索的次序可以i) j)

是先序、中序和后序。

用递归方法设计图的周游程序,调试通过。周游的次序可以是深度优先,也可以是宽度优先。

用非递归方法设计图的周游程序,调试通过。周游的次序可以是深度优先,也可以是宽度优先。

附加实验与思考

设计一个图的D-Search检索和周游算法,上机调试通过,检验其结果。

实验步骤

1. 树的遍历和周游算法

为便于比较遍历结果,采用对一个二叉排序树进行遍历,首先需要构造二叉排序树,如果出现相同节点,则去掉该节点,否则将该节点插入到二叉排序树中。在该实验中对文件treeTest.txt中的数据进行操作。

treeTest.txt:

10

15 22 4 0 13 6 8 10 17 9

以文件treeTest.txt中给出的数据来构造一棵树。

程序代码: #include #include

typedef struct Node{ int data;

Node *leftchild; Node *rightchild;

}Node;

//初始化一棵二叉树排序树。

void InitBinaryTree(Node**root,int elem){

*root=(Node*)malloc(sizeof(Node)); if(!(*root)){ }

printf(\return;

(*root)->data=elem;

(*root)->leftchild=NULL;

(*root)->rightchild=NULL; }

//向二叉树排序树中插入结点。 void InsertNode(Node *root,int elem){

newnode=(Node*)malloc(sizeof(Node));

if(!newnode){ printf(\ return; Node *newnode=NULL;

Node *p=root,*last_p=NULL;

搜索更多关于: 1009040130-贺程-实验5 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

《算法分析与设计》实验报告 实验五 基本检索与周游方法算法设计 姓名 贺程 学号 1009040130 班级 电子商务1002班 时间 2013/3/22 地点 文波机房 同 组 人 无 指导教师 朱少林 实验目的与要求 a) 掌握基本检索与周游方法算法设计的一般思想。 b) 掌握二元树、图的周游和检索算法。 c) 理解树、与或树、对策树周游与检索的思想和方法。 实验内容 d) 二元树周游 e) 图的周游 相关内容 一、 二元树周游 a)、 中根次序周游(LDR) Procedure

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com