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

[IT认证]数据结构基本知识.ppt

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

数据结构基础知识 熟识数据结构相关的概念、知识内容 熟记数据结构的基本操作及相应的代码实现 理解数据结构的逻辑结构,能根据题目要求选择合适的数据结构 掌握基本操作及数据结构的基本应用,熟练基本应用的程序设计 ⑶后序遍历 后序遍历的规则如下: 若二叉树为空,则退出;否则 ⑴后序遍历左子树; ⑵后序遍历右子树; ⑶访问处理根结点; 若后序遍历上图中的二叉树,可以得到如下的后序序列 d h i e b f g c a 五)、由二叉树的两种遍历顺序确定树结构 遍历二叉树(如下图)有三种规则: 前序遍历:根—左子树—右子树; 中序遍历:左子树—根—右子树; 后序遍历:左子树—右子树—根; 2、(NOIP7)已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为: 中序遍历:CBGEAFHDIJ 后序遍历:CGEBHFJIDA 求该二叉树的先序遍历的顺序为: 1、给出一棵二叉树的 先序遍历:ABCDEFGH 中序遍历:CBEDAGHF 画出此二叉树并写出后序遍历结果。 [石子合并问题] 有n堆石子,每堆有一个重量,每次把2堆石子合并成1堆,付出的代价为这两堆石子的重量之和,如果把这n堆石子最后合并成1堆石子,怎样合并才能使付出的代价最小,求出最小的代价. 六)、最优二叉树(哈夫曼树) 显然图(D)所示的合并方法付出的代价最小:54 5*2+(2+4)*3+(6+7)*2=54 例如n=5,重量 分别为7、5、2、4、6。 2 4 6 5 11 6 7 13 24 (D) L=6+11+13+24=54 1、最优二叉树的定义 在具有n个带权叶结点的二叉树中,使所有叶结点的带权路径长度之和(即二叉树的带权路径长度)为最小的二叉树,称为最优二叉树(又称最优搜索树或哈夫曼树),即最优二叉树使 (wk—第k个叶结点的权值;pk—第k个叶结点的带权路径长度)达到最小。 2、最优二叉树的构造方法 假定给出n个结点ki(i=1‥n),其权值分别为wi(i=1‥n)。要构造以此n个结点为叶结点的最优二叉树,其构造方法如下: 首先,将给定的n个结点构成n棵二叉树的集合F={T1,T2,……,Tn}。其中每棵二叉树Ti中只有一个权值为wi的根结点ki,其左、右子树均为空。然后做以下两步 ⑴在F中选取根结点权值最小的两棵二叉树作为左右子树,构造一棵新的二叉树,并且置新的二叉树的根结点的权值为其左、右子树根结点的权值之和; ⑵在F中删除这两棵二叉树,同时将新得到的二叉树加入F中; 重复⑴、⑵,直到在F中只含有一棵二叉树为止。这棵二叉树便是最优二叉树。 ?以上构造最优二叉树的方法称为哈夫曼(huffmann)算法。 例如:给定五个结点k1,k2,k3,k4,k5,其权值分别为16、2、18、16、23。构造最优二叉树的过程如下: ⑴构造初始集合F,F中各二叉树根结点的权值分别为16,2,18,16,23(如下图): ⑵以具有权值16及2的根结点的两棵二叉树为左、右子树,构造一棵根权值为18的新二叉树,并从F中删去这两棵二叉树(如下图): ⑶以同样的方法,得到一个新二叉树的集合F,其根结点的权值分别为23,18,34(如下图): ⑷ 又得到一个新二叉树的集合F,其根结点的权值分别为34,41(如下图): * * 一、栈 1、栈的定义 栈是一种线性表,对它的插入和删除都限制地表的同一端进行。这一端叫做栈的“顶”,另一端则叫做栈的“底”。 特点:后进先出(LIFO)、或者先进后出(FILO) 通常栈可以用顺序的方式存储(数组),分配一块连续的存储区域存放栈中的表目,并用一个变量t指向当前栈顶(如下图)。   假设栈中表目数的上限为m,所有表目都具有同一类型stype,则可以用下列方式定义栈: Const m=栈表目数的上限;  Var  s: array[1‥m] of stype ;{栈}    t: integer; {栈顶指针,初始值为0}  注意:不一定进栈结束后才出栈,进出栈可交叉进行。 2、栈的基本操作 栈的基本操作包括初始化(init)、进栈(push)、出栈(pop)和读取栈顶元素(top)四种。 1) 过程init(s,t) procedure init; begin t:=0; end; 2)、过程push(x)—往栈s中压入一个值为x的数据: procedure push( x:stype)

文档评论(0)

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

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

1亿VIP精品文档

相关文档