数据结构实验报告 (800字)

  • 格式:doc
  • 大小:3.23 KB
  • 文档页数:3

数据结构及应用算法教程

(实验报告)

专 业 名 称 计算机

班 级计算机1002

姓 名 张星宇

学 号 3101110041

指 导 教 师 王新宇

2011年11月4日

实验目的:

1.进一步掌握指针变量的使用;

2.掌握二叉树的结构特征以及各种存储结构的特点及使用范围。

3.掌握用指针类型描述、访问和处理二叉树的运算;

4.掌握栈或队列的使用。

实验能容:

二叉树的建立,二叉树的遍历。

实验题目:

本实验要求实现以下功能:

1.按前序次序建立一颗二叉树,以‘#’表示空。

2.中序、后序遍历该二叉树,输出遍历序列。

3.求出该二叉树的深度并输出,或求出该二叉树的叶子数目并输出。

[测试数据]:

输入以下字符串,建立二叉树:abc##de#g##f###

输出中序遍历序列应为:cbegdfa

输出后序遍历序列应为:cgefdba

输出二叉树的深度应为:5

输出二叉树的叶子数目应为:3

实验原理: # include <stdio.h> # include <stdlib.h> # define ok 1 #

define error -1

# define overflow -1 typedef int elemtype;

typedef int status;typedef struct bitnode {

elemtype data;//此处elem type 根据数据类型实际情况而定 struct bitnode

*lchild,*rchild;//定义左右孩子指针 }bitnode,*bitree;

status createtree(bitree &t)//先序输入二叉树中节点 { char ch;

ch=getchar();

if(ch==#) t=null;

else {

if(!(t=(bitnode *)malloc(sizeof(bitnode))))

exit(overflow);

t->data=ch;

createtree(t->lchild);

createtree(t->rchild); } return ok; } status midtraverse(bitree t)// {

if(t)

{

midtraverse(t->lchild); printf(%c,t->data);}

return ok;

} status posttraverse(bitree t) {

if(t)

{

posttraverse(t->lchild);

posttraverse(t->rchild);

printf(%c,t->data);

}

return ok; }

status countleaf(bitree t,int &count) {

if(t)

{

if((!t->lchild)&&(!t->rchild)) count++;

countleaf(t->lchild,count); countleaf(t->rchild,count);

}

return ok; } int depth(bitree t) {

int depthval=0,depthleft=0,depthright=0;depthval=0;

else

{

depthleft=depth(t->lchild); depthright=depth(t->rchild);

depthval=1+(depthleft>depthright?depthleft:depthright); }

return depthval;

} int main() {

bitree t;

int count=0;//统计叶子数

printf(输入以下字符串,建立二叉树:);

createtree(t); printf(\n);

printf(\n输出中序遍历序列应为:);

midtraverse(t);

printf(\n);

printf(\n输出后序遍历序列应为:);

posttraverse(t);

printf(\n\n);

printf(输出二叉树的叶子数目应为:);

countleaf(t,count);

printf(%d,count);

printf(\n\n);

printf(输出二叉树的深度应为:);printf(%d,depth(t));

printf(\n\n);

return ok;

}

实验总结:

这次的程序实设计实验是对我们学习c++6.0程序设计结果的一次检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机 运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学 习能够解决好它们。但是,收获还是不小的,我不仅对c++6.0的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。还有一点体会就是,书上和老师教的内容是有限的,我们需要不断地靠自己去学习, 向他人请教,了解和掌握更多的知识,这样我们才能编出更好的c++6.0程序。最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和朋友们 对我的帮助与支持。

vi