- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据的增删改查询算法
静态表查找类型 顺序查找 1 有序表的查找 2 静态最优查找树查找 3 次优查找树查找 4 索引顺序表查找 5 * 静态查找表 顺序查找:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字(数据元素或记录中某个数据项的值,用它可以标识一个数据元素或记录)和给定值比较相等则查找成功,找到所查记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明没有查找记录,查找不成功 int Search Seq(SSTable ST,KeyType key){ //在顺序表ST中顺序查找其关键字等于key的数据元素,若找到,则 //函数值为该元素在表中的位置,否则为0. ST.elem[0].key=key; //把key放在0位置 for(i=ST.length;!EQ(ST.elem[i].key,key) --i);//从后往前找 return i; //找不到时,i为0 } * 静态查找表 有序表的查找:先确定待查记录所在的范围(区间),然后缩小范围直到找到或找不到该记录为止,过程如下折半查找算法描述所示:当n较大时,平均查找长度近似为: * 静态表查找 静态最优查找树:即带权内路径长度之和PH值取最小的二叉树(构造静态查找树花费的时间代价较高,一般不用) 其中:n为二叉树上结点的个数(即有序表的长度);hi为第i个结点在二叉树上得层次数;节点的权 (i=1,2,...,n),其中pi为结点的查找概率,c为某个常量 * 次优查找树:即PH值在所有具有同样权值的二叉树中近似为最小,类似于折半查找。在查找概率不等时,可用次优查找树表示静态查找树,故又称静态树表,按有序表构造次优查找树的算法如下: 静态表查找 * 静态表查找 索引顺序表查找:Search函数可用分块查找来实现。此查找法,除表本身外还需建立一个“索引表”。如图所示,先将表分为几块,索引表中得是每块的起始地址和关键字,查找过程分两步,先确定待查记录所在的块,然后在块中顺序查找 动态查找表特点 ‘ ‘ 表结构本身是在查找过程中动态 生成的,即对于给定值key若表中存 在其关键字等于key的记录,则查找成 功返回,否则插入关键字等于key的记录 ‘ ‘ 动态表查找类型 二叉排序树查找 1 平衡二叉树查找 2 B-树查找 3 B+树查找 4 哈希查找 5 * 动态表查找(一) 二叉排序树查找:它的查找过程和次优二叉树类似。即当二叉排序树不空是,首先将给定值和根结点的关键字比较,若相等,则查找成功,否则将依据给定值和根结点的关键字之间的大小关系,分别在左子树或右子树上继续进行查找,查找过程如以下算法所描述 * 考虑到二叉排序树是一种动态数表,树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的结点时再进行插入,为此,需将算法改成如下: * 增(即插入数据) 二叉排序树在查找的过程中,当树中不存在关键字等于给定值的结点时进行插入,插入算法如下: * 删除数据 在二叉排序树上删去一个结点:假设在二叉排序树上被删结点为*p(指向结点的指针为p),其双亲结点为*f(结点指针为f),且不失一般性,可设*p是*f的左孩子,下边分3种情况进行讨论: 对于一般的二叉树来说,删去树中一个结点时没有意义的。因为它将使以被删结点为根的子树成为森林,破坏了整棵树的结构。然而对于二叉排序树来说,删去一个结点相当于删去有序序列中得一个记录,只要在删除某个结点之后依旧保持二叉排序树的特性即可。 * (3)若*p结点的左子树和右子树均不空。如图(b)在删去*p结点之前,序列为 ,在删去*p之后,为保持其他元素之间的相对位置不变,可以有两种做法:其一是令*p的左子树为*f的左子树,而*p的右子树为*s的右子树,如图(c)所示;其二是令*p的直接前驱(或直接后继)替代*p,然后再从二叉排序树中删去它的直接前驱(或直接后继),如图(d)所示,当以直接前驱*s替代*p时,由于*s只有左子树SL,则在删去*s之后,只要令SL为*s的双亲*q的右子树即可 * 二叉排序树删除算法 * 动态表查找(二) 平衡二叉树的查找过程和二叉排序树的过程相同 平 空树 衡 左、右子树都是平衡二叉树 二 具有以下两 叉 个性质的树 左子树和右子树的深度之差 树 (平衡因子)绝对值不超过1
文档评论(0)