完整word版广东工业大学数据结构二叉树课程设计Word文档下载推荐.docx
- 文档编号:13525717
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:25
- 大小:184.21KB
完整word版广东工业大学数据结构二叉树课程设计Word文档下载推荐.docx
《完整word版广东工业大学数据结构二叉树课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整word版广东工业大学数据结构二叉树课程设计Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
三.实验仪器设备和材料
硬件:
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,<
root,x1>
∈H,且存在Dr上的关系Hr∈H;
H={<
,<
root,xr>
,H1,Hr};
(4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,是一棵符合本定义的二叉树,称为根的右子树。
基本操作P:
InitBiTree(&
T);
操作结果:
构造空二叉树T。
DestroyBiTree(&
初始条件:
二叉树T存在。
销毁二叉树T。
CreateBiTree(&
T,definition);
definition给出二叉树T的定义。
按definition构造二叉树T。
ClearBiTree(&
将二叉树T清为空树。
BiTreeEmpty(T);
若T为空二叉树,则返回TURE,否则FALSE。
BiTreeDepth(T);
返回T的深度。
Root(T);
返回T的根。
Value(T,e);
二叉树T存在,e是T中的某个结点。
返回e的值。
Assign(T,&
e,value);
初始条件:
操作结果:
结点e赋值为value。
Parent(T,e);
若e是T的非跟结点,则返回它的双亲,否则返回“空”。
LeftChild(T,e);
返回e的左孩子。
若e无左孩子,则返回“空”。
RightChild(T,e);
返回e的右孩子。
若e无右孩子,则返回“空”。
LeftSibling(T,e);
返回e的左兄弟。
若e无左孩子或无左兄弟,则返回“空”。
RightSibling(T,e);
返回e的右兄弟。
若e无右孩子或无右兄弟,则返回“空”。
}ADTBinaryTree
2.存储结构:
采用无头结点的链式存储结构实现
3.源代码:
头文件及存储结构:
#include<
stdio.h>
stdlib.h>
#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));
p)//存储分配失败
exit(OVERFLOW);
p->
data=e;
Q.rear->
next=p;
Q.rear=p;
intDeQueue(LinkQueue&
Q,QElemType&
e)//删除队头元素
if(Q.front==Q.rear)//队列为空队
returnERROR;
p=Q.front->
next;
e=p->
data;
next=p->
if(Q.rear==p)//判断删除队头元素后,队列是否为空队
Q.rear=Q.front;
free(p);
intQueueEmpty(LinkQueueQ)//判断队列是否为空队
if(Q.front==Q.rear)
returnTURE;
else
returnFALSE;
}
intInitBiTree(BiTree&
T)//构造空二叉树
T=NULL;
intDestroyTree(BiTree&
T)//销毁二叉树
T)
DestroyTree(T->
lchild);
rchild);
free(T);
T=NULL;
returnOK;
voidCreateBiTree(BiTree&
T)//用先序遍历的方式构建二叉树,以‘@’表示空结点。
TElemTypech;
scanf("
%c"
&
ch);
if(ch=='
@'
)
{
if(!
(T=(BiTree)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
//分配存储空间失败
T->
data=ch;
CreateBiTree(T->
//构造左子树
//构造右子树
}
intClearBiTree(BiTree&
T)//清空二叉树函数
ClearBiTree(T->
intBiTreeEmpty(BiTreeT)//判断二叉树是否为空
intBiTreeDepth(BiTreeT)//计算二叉树深度
intlcd,rcd;
return0;
lcd=BiTreeDepth(T->
rcd=BiTreeDepth(T->
return((lcd>
rcd?
lcd:
rcd)+1);
TElemTypeRoot(BiTreeT)//判断二叉树是否空,若非空返回其根
if(BiTreeEmpty(T))
returnNULL;
return(T->
data);
TElemTypeValue(BiTreeT,BiTreee)//返回e结点的值
returne->
intAssign(BiTreeT,BiTree&
e,TElemTypevalue)//将value的值给结点e
e->
data=value;
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&
rchild->
data==e)//找到e
returna->
//返回双亲的值
else
{
if(a->
lchild)
EnQueue(q,a->
//入队列左孩子
rchild)
//入队列右孩子
}
}
returnNULL;
BiTreePoint(BiTreeT,TElemTypes)//返回二叉树T中指向元素值为S的结点指针
QueueEmpty(q))
DeQueue(q,a);
data==s)
returna;
EnQueue(q,a->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 广东工业大学 数据结构 二叉 课程设计