完整word版广东工业大学数据结构二叉树课程设计.docx

上传人:b****3 文档编号:599146 上传时间:2022-10-11 格式:DOCX 页数:25 大小:184.21KB
下载 相关 举报
完整word版广东工业大学数据结构二叉树课程设计.docx_第1页
第1页 / 共25页
完整word版广东工业大学数据结构二叉树课程设计.docx_第2页
第2页 / 共25页
完整word版广东工业大学数据结构二叉树课程设计.docx_第3页
第3页 / 共25页
完整word版广东工业大学数据结构二叉树课程设计.docx_第4页
第4页 / 共25页
完整word版广东工业大学数据结构二叉树课程设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

完整word版广东工业大学数据结构二叉树课程设计.docx

《完整word版广东工业大学数据结构二叉树课程设计.docx》由会员分享,可在线阅读,更多相关《完整word版广东工业大学数据结构二叉树课程设计.docx(25页珍藏版)》请在冰豆网上搜索。

完整word版广东工业大学数据结构二叉树课程设计.docx

完整word版广东工业大学数据结构二叉树课程设计

数据结构实验报告

题目:

二叉树抽象数据类型

学院计算机学院

专业计算机科学与技术

年级班别

学号

学生姓名

指导教师

成绩____________________

 

2013年6月

一.实验概要

实验项目名称:

二叉树抽象数据类型的实现

实验项目性质:

设计性实验

所属课程名称:

数据结构

实验计划学时:

6

二.实验目的

1.了解二叉树的定义以及各项基本操作。

2.实现二叉树存储、遍历及其他基本功能

三.实验仪器设备和材料

硬件:

PC机

软件:

VisualC++6.0

四.实验的内容

1.二叉树类型定义以及各基本操作的简要描述;

ADTBinaryTree{

数据对象D:

D是具有相同特性的数据元素的集合.

数据关系R:

若D=∅,则R=,称BinaryTree为空二叉树;

若D≠,则R={H},H是如下二元关系:

(1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱;

(2)若D-{root}≠∅,则存在D-{root}={D1,Dr},且D1∩Dr=∅;

(3)若D1≠∅,则D1中存在惟一的元素x1,∈H,且存在Dr上的关系Hr∈H;H={,H1,Hr};

(4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,是一棵符合本定义的二叉树,称为根的右子树。

基本操作P:

InitBiTree(&T);

操作结果:

构造空二叉树T。

DestroyBiTree(&T);

初始条件:

二叉树T存在。

操作结果:

销毁二叉树T。

CreateBiTree(&T,definition);

初始条件:

definition给出二叉树T的定义。

操作结果:

按definition构造二叉树T。

ClearBiTree(&T);

初始条件:

二叉树T存在。

操作结果:

将二叉树T清为空树。

BiTreeEmpty(T);

初始条件:

二叉树T存在。

操作结果:

若T为空二叉树,则返回TURE,否则FALSE。

BiTreeDepth(T);

初始条件:

二叉树T存在。

操作结果:

返回T的深度。

Root(T);

初始条件:

二叉树T存在。

操作结果:

返回T的根。

Value(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

返回e的值。

Assign(T,&e,value);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

结点e赋值为value。

Parent(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

若e是T的非跟结点,则返回它的双亲,否则返回“空”。

LeftChild(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

返回e的左孩子。

若e无左孩子,则返回“空”。

RightChild(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

返回e的右孩子。

若e无右孩子,则返回“空”。

LeftSibling(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

返回e的左兄弟。

若e无左孩子或无左兄弟,则返回“空”。

RightSibling(T,e);

初始条件:

二叉树T存在,e是T中的某个结点。

操作结果:

返回e的右兄弟。

若e无右孩子或无右兄弟,则返回“空”。

}ADTBinaryTree

2.存储结构:

采用无头结点的链式存储结构实现

3.源代码:

头文件及存储结构:

#include

#include

#defineTURE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineOVERFLOW0

#defineMAXQSIZE100//最大队列长度

typedefcharTElemType;

typedefstructBiTNode//二叉树结构体

{

TElemTypedata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

typedefBiTreeQElemType;

typedefstructQNode

{

QElemTypedata;

structQNode*next;

}QNode,*QueuePtr;//结点结构体

typedefstruct

{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;//链队列结构体

算法设计:

intInitQueue(LinkQueue&Q)//构造空队列

{

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!

Q.front)//存储分配失败

exit(OVERFLOW);

Q.front->next=NULL;

returnOK;

}

intEnQueue(LinkQueue&Q,QElemTypee)//新元素入队尾

{

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)//存储分配失败

exit(OVERFLOW);

p->data=e;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

returnOK;

}

intDeQueue(LinkQueue&Q,QElemType&e)//删除队头元素

{

QueuePtrp;

if(Q.front==Q.rear)//队列为空队

returnERROR;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)//判断删除队头元素后,队列是否为空队

Q.rear=Q.front;

free(p);

returnOK;

}

intQueueEmpty(LinkQueueQ)//判断队列是否为空队

{

if(Q.front==Q.rear)

returnTURE;

else

returnFALSE;

}

intInitBiTree(BiTree&T)//构造空二叉树

{

T=NULL;

returnOK;

}

intDestroyTree(BiTree&T)//销毁二叉树

{

if(!

T)

returnERROR;

else

DestroyTree(T->lchild);

DestroyTree(T->rchild);

free(T);

T=NULL;

returnOK;

}

voidCreateBiTree(BiTree&T)//用先序遍历的方式构建二叉树,以‘@’表示空结点。

{

TElemTypech;

scanf("%c",&ch);

if(ch=='@')

T=NULL;

else

{

if(!

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

exit(OVERFLOW);//分配存储空间失败

T->data=ch;

CreateBiTree(T->lchild);//构造左子树

CreateBiTree(T->rchild);//构造右子树

}

}

intClearBiTree(BiTree&T)//清空二叉树函数

{

if(!

T)

returnERROR;

else

{

ClearBiTree(T->lchild);

ClearBiTree(T->rchild);

free(T);

T=NULL;

returnOK;

}

}

intBiTreeEmpty(BiTreeT)//判断二叉树是否为空

{

if(!

T)

returnTURE;

else

returnFALSE;

}

intBiTreeDepth(BiTreeT)//计算二叉树深度

{

intlcd,rcd;

if(!

T)

return0;

lcd=BiTreeDepth(T->lchild);

rcd=BiTreeDepth(T->rchild);

return((lcd>rcd?

lcd:

rcd)+1);

}

TElemTypeRoot(BiTreeT)//判断二叉树是否空,若非空返回其根

{

if(BiTreeEmpty(T))

returnNULL;

else

return(T->data);

}

TElemTypeValue(BiTreeT,BiTreee)//返回e结点的值

{

returne->data;

}

intAssign(BiTreeT,BiTree&e,TElemTypevalue)//将value的值给结点e

{

e->data=value;

returnOK;

}

TElemTypeParent(BiTreeT,TElemTypee)

{//返回双亲

LinkQueueq;

QElemTypea;

if(T)

{

InitQueue(q);

EnQueue(q,T);//树根入队列

while(!

QueueEmpty(q))//队不空

{

DeQueue(q,a);//出队,队列元素赋给a

if(a->lchild&&a->lchild->data==e||a->rchild&&a->rchild->data==e)//找到e

returna->data;//返回双亲的值

else

{

if(a->lchild)

EnQueue(q,a->lchild);//入队列左孩子

if(a->rchild)

EnQueue(q,a->rchild);//入队列右孩子

}

}

}

returnNULL;

}

BiTreePoint(BiTreeT,TElemTypes)//返回二叉树T中指向元素值为S的结点指针

{

LinkQueueq;

QElemTypea;

if(T)

{

InitQueue(q);

EnQueue(q,T);

while(!

QueueEmpty(q))

{

DeQueue(q,a);

if(a->data==s)

{

returna;

}

if(a->lchild)

{

EnQueue(q,a->lchild);

}

if(a->rchild)

{

EnQueue(q,a->rchild);

}

}

}

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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