- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机与软件学院
《数据结构课程设计》报告
题目: 学生通讯录管理系统
学院: 计算机与软件学院
专业: 软工移动设备应用开发
一、课程设计概述
目的
1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。
2.掌握用指针类型描述、访问和处理二叉树的运算。
3.掌握二叉树的先序,中序,后序,层序遍历,并运用到实际生活中。
4.掌握二叉树的图形输出,培养空间想象能力和思维。
5.运用递归的思想,多语句分支结构进行程序的编写。
需求描述
二叉树系统是一个与现实生活各个领域联系的小型系统(算法)。二叉树可以简单明了的表示很多繁琐的信息数据。同时,二叉树在有很多方面有具体的应用。通过搜集各方面的资料发现,越来越多领域开始选择使用二叉树模型来进行设计投资决策,并以此为平台,实现多功能,本文结合了多领域的知识,给出了在生活方面,学习方面,以及投资方面的多种实例,并且加以概括和介绍。
二叉树几种遍历
1.前序遍历(根左右)
递归定义;访问根节点,前序遍历根节点的左子树,前序遍历根节点的右子树
2.中序遍历(左根右)
递归定义;中序遍历根节点的左孩子,访问根节点,中序遍历根节点的右孩子
3.后序遍历(左右根)
递归定义;后序遍历根节点的左子树,后序遍历根节点的右子树,访问根节点
4.层次遍历
对整棵二叉树按从上到下,对每一层按从左到右的顺序进行遍历。这里我们需要借助队列:先访问节点的孩子节点也应比后访问节点的孩子节点先访问。故这就类似于队列先进先出的性质,每访问一个节点时,它的孩子节点(如果存在)就随着入队。
先序遍历创建二叉树 递归实现 :void createBiTree(BiTree T)
先序遍历二叉树函数:利用先序遍历的方法遍历整棵树
void FirstOrderTraverse(BiTree T)
中序遍历二叉树函数:利用中序遍历的方法遍历整棵树
void InOrderTraverse(BiTree T)
后序遍历二叉树函数:利用后序遍历的方法遍历整棵树
void LastOrderTraverse(BiTree T)
层序遍历二叉树函数:利用层序遍历方法遍历整棵树
void LevelTraverse(BiTree T)
打印二叉树函数:利用递归的方法打印整棵树
void PrintTree(BiTree T,int nLayer)
菜单界面:运用switch——case和while函数实现
void menu()
二、编码实现
头文件
关键代码
void createBiTree(BiTree T){ //先序遍历创建二叉树 递归实现
char ch;
cinch;
if(ch==#)T=NULL; //递归出口
else{
T=new BiTNode;
T-data=ch;
createBiTree(T-lchild); //创建左子树
createBiTree(T-rchild); //创建右子树
}
}
void FirstOrderTraverse(BiTree T){ //先序遍历二叉树,递归实现
if(T){
coutT-data;
FirstOrderTraverse(T-lchild);
FirstOrderTraverse(T-rchild);}
}
void InOrderTraverse(BiTree T){ //中序遍历二叉树,递归实现
if(T){
InOrderTraverse(T-lchild);
coutT-data;
InOrderTraverse(T-rchild);
}
}
void LastOrderTraverse(BiTree T){ //后序遍历二叉树,递归实现
if(T){
LastOrderTraverse(T-lchild);
LastOrderTraverse(T-rchild);
coutT-data;
}
} void LevelTraverse(BiTree T)
{
queueBiTree q;// 建队
q.push(T);// 根节点入队
BiTree p;
while(!q.empty())(队列循环)
{
p=q.front(); // 获取行列的首元素
q.pop(); // 首元素出队
coutp-data ; // 输出结点的值
if(p-lchild!=NULL) // 若结点的左孩子不空
{
q.push(p-lchild);}(指向右孩子)
if(p-rchild!=NULL)// 若结点的右孩子不空
{
q.push(p-rchild);(指向左孩子)
}
}
}
int Depth(Bi
您可能关注的文档
本人专注于k12教育,英语四级考试培训,本人是大学本科计算机专业毕业生,专注软件工程计算机专业,也可承接计算机专业的C语言程序设计,Java开发,Python程序开发。
原创力文档


文档评论(0)