网站大量收购独家精品文档,联系QQ:2885784924

数据结构说明书数据构说明书.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构说明书数据构说明书

目 录 引言 1 一、设计要求 2 二、算法原理及思想 2 1、遍历概念 2 2、遍历方案 2 2.1 遍历方案 2 2.2三种遍历的命名 2 3、二叉树的链式存储结构 3 3.1、结点的结构 3 3.2、结点的类型说明 3 3.3、二叉链表 3 4、二叉树的非递归遍历(用栈实现) 4 4.1先序非递归算法 4 4.2中序非递归算法 6 4.3后序非递归算法 7 三、遍历过程 8 四、程序测试 9 五、实验总结 9 六、参考文献 9 附录:源代码 9 1 选题背景 《数据结构》在计算机科学中是一门综合性的专业基础课.数据结构的研究不仅涉及到计算机的硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着更密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题.在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素更为方面.因此,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程.在计算机科学中,数据结构不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。满二叉树,完全二叉树,排序二叉树。 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。此程序主要实现二叉树的遍历并且是基于栈的非递归遍历方法。 2 方案论证 2.1遍历概念 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。 ??? 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。 2.2遍历方案 2.2.1 遍历方案 ???从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作: ???  (1)访问结点本身(N), ???  (2)遍历该结点的左子树(L), ???  (3)遍历该结点的右子树(R)。 以上三种操作有六种执行次序: ???  NLR、LNR、LRN、NRL、RNL、RLN。?? 2.2.2三种遍历的命名 ???  根据访问结点操作发生位置命名:   ① NLR:前序遍历(亦称(PreOrderTree先序遍历)) ???????? ——访问结点的操作发生在遍历其左右子树之前。   ② LNR:中序遍历(InOrderTree) ??????? ——访问结点的操作发生在遍历其左右子树之中(间)。 ?  ③ LRN:后序遍历(PostOrderTree l) ??????? ——访问结点的操作发生在遍历其左右子树之后。 2.3二叉树的链式存储结构 2.3.1结点的结构 二叉树的每个结点最多有两个孩子。用链接方式存储二叉树时,每个结点除了存储结点本身的数据外,还应设置两个指针域lchild和rchild,分别指向该结点的左孩子和右孩子。结点的结构为: 图1 链式存储结点结构 2.3.2 结点的类型说明 typedef struct BiNode { DataType data; //数据域 struct BiNode *LChild; //左孩子 struct BiNode *RChild; //右孩子 }BiTNode,*BiTree; 2.3.3 二叉链表 在一棵二叉树中,所有类型为BinTNode的结点,再加上一个指向开始结点(即根结点)的BinTree型头指针(即根指针)root,就构成了二叉树的链式存储结构,并将其称为二叉链表。如图2所示: 图2 二叉链表存储的二叉树 注意:  ① 一个二叉链表由根指针root惟一确定。若二叉树为空,则root=NULL;若结点的某个孩子不存在,则相应的指针为空。 ???② 具有n个结点的二叉链表中,共有2n个指针域。其中只有n-1个用来指示结点的左、右孩子,其余的n+1个指针域为空。 //建立二叉树的二叉链表存贮结构 void CreateBiTree(

您可能关注的文档

文档评论(0)

cduutang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档