解放军信息工程大学班数据结构考研课件ppt-数据结构.pptVIP

解放军信息工程大学班数据结构考研课件ppt-数据结构.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解放军信息工程大学班数据结构考研课件ppt-数据结构.ppt

数据结构 4链栈上基本运算的实现: 1) 进栈 PUSHLSTACK(top,x) 解决“假上溢”的方法有两种: 第八章 排序 例1:(p41 2.9)假设在长度大于1的单循环链表中,既无头结点也无头指针,S为指向链表中某个结点的指针,试编写算法删除结点*S的直接前趋结点。 例2:(p41 2.11) 设有一个双循环链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被启用之前,其值均初始化为零。每当在链表进行一次LOCATE(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度递减的顺序排列,以便使频繁访问的结点总是靠近表头。试编写实现符合上述要求的LOCATE运算的算法。 typedef struct dnode { datatype data; int freq; struct dnode *prior, *next; }dlklist; 1)分块查找要求: 按索引方式存储线性表: i)线性表中的结点被均分为b块,前b-1块中结点的个数 为S=? n/b ?,第b块的结点数小于等于S; ii)每一块中结点的关键字不要求有序。 iii)但前一块中结点的最大关键字应小于后一块中结点的 最小关键字;即要求表是“分块有序”; iv)抽取每一块中结点的最大关键字及该块的起始位置构成一个索引表ID[b],即ID[i](0=ib)存放着第i块的最大关键字及该块在表R中的起始位置;由于R表是分块有序的, 很显然该索引表是递增有序的。 下标 键值 0 1 2 3 4 5 6 7 8 9 14 7 3 29 55 31 67 79 93 80 b=3 addr key 0 4 8 29 79 93 索引表 2)分块查找的基本思想: a)先采用二分或顺序查找方法查找索引表,确定待查结点所处的块. b)在确定的块中进行顺序查找。 说明:即使对索引表和块均采用顺序查找方法进行查找,分块查找方法仍较简单顺序查找方法快。 举例: 分块查找的平均查找长度由两部分构成:查找块的平均查找长度和块内的平均查找长度。 若采用二分法查找块,则 ASLblk=ASLbn+ASLsq ? log2(b+1)-1+(s+1)/2 ? log2(n/s+1)+s/2 查找过程: 索引表的二分查找 块内顺序查找 4)算法分析 若顺序查找确定块,则 ASL’blk=(b+1)/2+(s+1)/2=(s2+2s+n)/2s (当s=n 1/2时,取最小值n 1/2+1) 9.3 树 表 的 查 找 当表采用二叉树实现存储时,这样的表称为树表。 9.3.1 二 叉 排 序 树 1.二叉排序树(或称为二叉查找树)的定义: 二叉排序树或者是一棵空树,或者是具有如下性质的二叉树: (1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。 (2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值。 (3) 左、右子树本身又各是一棵二叉排序树。 由二叉排序树的定义可知,中序遍历二叉排序树将得到一个升序的遍历序列。 23 18 43 8 21 32 二叉排序树 中序遍历的键值序列为:8 18 21 23 32 43 2.二叉排序树存储结构: typedef struct node { keytype key ; datatype other ; struct node *lchild,*rchild ; } bstnode 1).二叉排序树的结点的插入 3.二叉排序树上的操作 插入结点运算实现的基本思想: 1)若二叉排序树空,则待插结点*s作为根结点插入到空树中; 2)如二叉排序树非空,将待插结点的关键字s?key与树根的关键字t ?key比较:若s ?key=t ?key则说明树中已有此结点,无须插入。若s?keyt ?key,则将待插结点*s插入到根的左子树中,否则将*s插入到根的右子树中。 3)将结点插入到子树中与插入到树中的过程一样. 生成二叉排序树的思想:可通过多次调用插入过程来生成 如:插入序列为2,1,7,8,5 2).二叉排序树的生成 3).二叉排序树的删除 二叉排序树的删除过程: (a)查找(即定位)将被删除的结点。 (b)在删除了相应的结点后,对二叉树要进行调整,使其仍为二叉排序树。     12  次序2:

文档评论(0)

uqxw + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档