晓庄-数据结构(C语言版)实验报告

内容发布更新时间 : 2025/2/27 14:57:40星期一 下面是文章的全部内容请认真阅读。

实验四 二叉树的遍历

1. 实验目的

(1) 进一步掌握指针变量的用途和程序设计方法。

(2) 掌握二叉树的结构特征,以及链式存储结构的特点及程序设计方法。 (3) 掌握构造二叉树的基本方法。 (4) 掌握二叉树遍历算法的设计方法。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 利用二叉链表建立一棵二叉树,分别采用先序、中序和后序遍历该二叉树,并输出遍历的序列。

(3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3. 程序代码

#include #include #define MAX 100

typedef struct BiTNode{ //定义二叉树 char data;

struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;

void CreateBiTree(BiTree *T){ char data;

//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 scanf(\ if(data == '#'){ *T = NULL; } else{

*T = (BiTree)malloc(sizeof(BiTNode));

//生成根结点

(*T)->data = data; //构造左子树

CreateBiTree(&(*T)->lchild); //构造右子树

CreateBiTree(&(*T)->rchild); } }

void Visit(BiTree T){ //输出

if(T->data != '#'){

printf(\ } }

void PreOrder(BiTree T){ //先序遍历

if(T != NULL){ //访问根节点 Visit(T);

//访问左子结点

PreOrder(T->lchild); //访问右子结点

PreOrder(T->rchild); } }

void InOrder(BiTree T){ //中序遍历

if(T != NULL){

//访问左子结点

InOrder(T->lchild); //访问根节点 Visit(T);

//访问右子结点

InOrder(T->rchild); }

}

void PostOrder(BiTree T){ //后序遍历

if(T != NULL){

//访问左子结点

PostOrder(T->lchild); //访问右子结点

PostOrder(T->rchild); //访问根节点 Visit(T); } }

int main() {

BiTree T;

printf(\以#代表空先序遍历\\n输入二叉树:\ CreateBiTree(&T);

printf(\先序遍历:\\n\ PreOrder(T);

printf(\

printf(\中序遍历:\\n\ InOrder(T);

printf(\

printf(\后序遍历:\\n\ PostOrder(T);

return 0; }

4. 实验结果

以#代表空先序遍历 输入二叉树:ab##c##

先序遍历: a b c

中序遍历: b a c

后序遍历: b c a

--------------------------------

Process exited after 10.89 seconds with return value 0 请按任意键继续. . .

5. 心得体会

这次的试验让我对二叉树有了更进一步的理解,对二叉树的操作也更加熟悉。本次试验是对二叉树进行建立,并掌握先序遍历,中序遍历和后续遍历,虽然用的是递归的方法相对简单一点,但是理解起来还是有点困难。二叉树是数据结构中很重要的一部分知识,也是数据结构的重难点,我相信在以后的学习中还会遇到,而我更要进行更深入的学习。

实验五 图的遍历

1. 实验目的

(1)加深理解图的非线性结构特点,灵活运用图的存储结构、图的深度优先搜索和广度优先搜索来解决有关应用问题。 (2)加深递归程序设计的训练。

(3)注重提高关于模型选择、算法设计和分析方面的能力。

2. 实验要求

(1) 认真阅读和掌握和本实验相关的教材内容。

(2) 利用邻接矩阵或邻接表存储一张图,分别采用图的深度优先搜索和广度优先搜索遍历该图,并输出遍历结果。 (3) 上机运行程序。

(4) 保存和打印出程序的运行结果,并结合程序进行分析。

3. 程序代码

#include #include

#define MAXVEX 100 //最大顶点数

#define INFINITY 65535 //用65535来代表无穷大

int visited[MAXVEX]={0};

typedef struct {

char vexs[MAXVEX]; //顶点表

int arc[MAXVEX][MAXVEX]; //邻接矩阵,可看作边 int numVertexes, numEdges; //图中当前的顶点数和边数 }Graph;

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi