专利名称:一种有序链表节点的快速搜索方法及装置的制作方法
技术领域:
本发明涉及有序链表节点的搜索技术,尤其是指一种有序链表节点的快速 搜索方法及装置。
背景技术:
在计算机软件设计中,有序链表是一种经常使用的数据存储结构,这种数 据结构相对于查询效率更高的二叉树、三叉树等具有编程简单、调试方便等特 点,受到广大开发人员的喜欢,有序链表的查询、插入、删除都涉及到大量的 关键值(即排序关键域的值)在有序链表中进行搜索的操作。
图1为现有技术中有序链表节点的搜索方法示意图,如图所示从一个节 点(一般为有序链表的头节点)开始,将目标节点的关键值与有序链表中各节 点的关键值逐一地进行比较,最终在有序链表中搜索到合适的节点,即目标节 点,完成在有序链表中的搜索过程。
这种搜索方法由于需要将目标节点的关键值与各节点的关键值逐一进行比 较,因此处理速度非常慢,影响了CPU的性能,尤其是在嵌入式系统中,CPU 性能一般较差,内存也相当匮乏,寻找一种快速、高效,且占用额外内存小的 目标节点搜索方法显得尤为重要。
发明内容
有鉴于此,本发明的主要目的在于提供一种有序链表节点的快速搜索方法 及装置,利用本方法及装置,可以快速、高效地在有序链表中搜索到目标节点。 为达到上述目的,本发明的技术方案是这样实现的 一种有序链表节点的快速搜索方法,该方法主要包括以下步骤 A、按照设定规则在有序链表中选取节点,把所述节点作为索引节点,建
立索引表;B、 在索引表中搜索到目标索引节点;C、 通过目标索引节点在有序链表中搜索目标节点。其中,所述索引节点的数目与有序链表中所有节点的数目比值为1: 100。 所述索引表中至少包括所述索引节点指向所述有序链表的节点的指针、所 述索引节点的关键值。所述索引表中索引节点的排列顺序与有序链表中节点的排列顺序一致。 所述索引表是数组或链表。进一步地,所述步骤B为将目标节点的关键:值与各索引节点的关键值进 行逐一比较搜索到目标索引节点。较佳地,所述步骤C为通过目标索引节点指向有序链表节点的指针确定 索引节点在有序链表中的位置,然后在有序链表中将目标节点的关键值与所述 位置附近的各节点的关键值进行逐一比较搜索到目标节点。在有序链表中节点插入、删除时,更新索引表使其与有序链表保持同步。一种有序链表节点的快速搜索装置,该装置包括建立索引单元和搜索单元, 其中,建立索引单元,用来从有序链表中选取节点,并把所述节点顺序作为索引 节点,建立索引表;搜索单元,用来依次在索引表和有序链表中进行搜索,最终搜索到目标节点。进一步地,所述搜索单元包括索引节点搜索模块和节点搜索模块,其中, 索引节点搜索模块,用来在索引表中将目标节点的关键值与各索引节点的关键值进行逐一比较搜索到目标索引节点,并把目标索引节点发送到节点搜索模块;节点搜索模块,用来根据所述目标索引节点指向有序#节点的指针确定 索引节点在有序链表中的位置,然后在有序链表中将目标节点的关键值与该位 置附近的各节点的关4定值进行逐一比较搜索到目标节点。 利用本发明,有以下的特点和优点1 、搜索的时候首先在索引表中将目标节点的关4t值与各索引节点的关键值 进行逐一比较搜索到离可以搜索到目标节点最近的索引节点,即目标索引节点, 再通过目标索引节点指向的有序链表节点的指针在有序链表中确定索引节点在 有序链表中的位置,然后在有序链表中将目标节点的关键值与该位置附近的各 节点的关键值进行逐一比较搜索到目标节点,整个搜索过程快速、高效。2、当索引表中索引节点的数目与有序链表中的节点数目的比值很小时,增 加索引表所占用的内存将很小,这样就可以在占用额外内存很小的情况下获得 很高的搜索速度,很适合CPU性能较差、内存也相当匮乏的嵌入式系统。
图1为现有技术中有序链表节点的搜索方法示意图; 图2为本发明中有序链表节点的快速搜索方法示意图; 图3为本发明中有序链表节点的搜索方法流程示意图。
具体实施方式
下面结合附图对本发明作进一步详细的说明图2为本发明中有序链表节点的快速搜索方法示意图,图3为本发明中有 序链表节点的搜索方法流程示意图,如图2、图3所示, 本发明的实现主要分为两大部分 第一部分建立索引表。 步骤301、建立索引表。按照设定规则在有序链表中选取少量节点,把选取的这些节点作为索引节 点,建立索引表(可以是数组、链表等),则该索引节点应该至少包含指向有序 链表节点的指针和该索引节点的关键值。索引节点的关4A值指有序链表中节点 从大到小或者从小到大排序的排序关键域的值,比如一个按年龄排序的链表, 每个人的年龄就是该有序链表节点的关键值。索引表和有序链表是相互独立的。
这里,设定规则是指,既可以从头节点开始在有序链表中等间隔地选取索 引节点,也可以从头节点开始在有序链表中不等间隔地选取索引节点。 其中,索引表必须是有序的,即与有序链表的升降顺序保持一致。 且为了提高查询效率,从有序链表中选取的索引节点应该尽量平均分布在 有序链表中,并且选取的索引节点的数目(N)应该远远小于有序链表的节点数目(M)。这样既提高了查询效率,又减少了索引节点占用的内存,在内存紧 张的嵌入系统中尤为重要,N: M的比值建议大于l: 100,索引表中索引节点 的数目与有序链表中的节点数目的比值越小,索引表所占用的额外内存越小, 且搜索效率越高,这样就可以在占用额外内存很小的情况下获得很高的搜索速 度,很适合CPU性能较差、内存也相当匮乏的嵌入式系统。另外,从有序链表中选择索引节点的规则可以根据情况具体分析。例如, 有序链表中节点的关键值取值范围分为间隔不等的几组时,可以在这几个组中 选取各组中一个关键值最小的节点建立索引表;当有序链表中节点的关键值取 值范围分为间隔相等的几组时,也可以在这几个组中选取各组中一个关键值最小的节点建立索引表。第二部分快速搜索。步骤302、在索引表中将目标节点的关键值与各索引节点的关键值进行逐 一比较搜索到目标索引节点。在索引表中将目标节点的关键值与各索引节点的关4建值进行逐一 比较,搜 索到离可以搜索到目标节点最近的索引节点,即目标索引节点。步骤303、通过目标索引节点指向有序链表节点的指针确定索引节点在有 序链表中的位置,然后在有序链表中将目标节点的关4建值与该位置附近的各节 点的关键值进行逐一比较搜索到目标节点。整个搜索过程较现有技术,不需要将目标节点的关键值与各节点的关键值 进行逐一比较,而是先在索引表中搜索到离可以搜索到目标节点最近的索引节 点,即目标索引节点,然后通过目标索引节点指向有序链表节点的指针确定索 引节点在有序链表中的位置,然后在有序链表中搜索到目标节点,由此可见, 搜索速度很快,且效率有很大的提高。在有序链表中节点插入、删除的时候要根据实际情况更新索引表使其与有 序链表保持同步。例如,当增加或者删除N次后,将索引表部分或者全部更新 一次。或者,如果删除的节点刚好是索引节点,需要把本节点的上一节点或者 下一节点作为索引节点,并将其指针、索引节点的关4建值等信息更新到索引表 中。为实现上述方法,本发明采用如下装置,该装置包括建立索引单元和搜索 单元,其中,建立索引单元,用来从有序链表中选取节点,并把所述节点顺序作为索引节点,建立索引表;搜索单元,用来依次在索引表和有序链表中进行搜索,最终搜索到目标节点。且所述搜索单元又包括索引节点搜索模块和节点搜索模块,其中, 索引节点搜索模块,用来在索引表中将目标节点的关键值与各索引节点的关键值进行逐一比较搜索到目标索引节点,并把目标索引节点发送到节点搜索模块;节点搜索模块,用来接收索引节点搜索模块发送过来的目标索引节点,并 通过目标索引节点指向有序链表节点的指针确定索引节点在有序链表中的位 置,然后在有序链表中将目标节点的关键值与该位置附近的各节点的关键值进 行逐一比较搜索到目标节点。下面结合具体的实施例对本发明的实现作进一步详细的说明 第一实施例比如有一个有序链表的关键值取值范围分为A (0~ 1000),B (4000 ~ 6000 ), C ( 8000 ~ 10000)三个组,在这三个组中选取各组一个关键值最小的节点建立索引表,即在有序链表中选取0、 4000、 8000这些关键值所对应的节点作为索引节点,建立索引表。第二实施例在有序链表中选取序号为0, K,2K,。。。。。。, nK的节点作为索引节点,建立索引表(其中K-M/N)。
假定一个有序链表共有5000个节点,需要搜索序号为2030的节点。按照 传统的从有序链表表头逐一比较的办法,需要进行2030次比较才能查找到需要 的节点。假定我们为链表序号O, 100, 200,。。。。。。, n*100的节点建立了索引,即 选取K为100,则查找到需要的序号为2030的节点需要进行的比较次数为 (2000/100+30)=50次。可以看出利用本发明使有序链表节点的搜索效率有了巨 大的提高,此处提高了约40倍。当K的值,即M/N的比值增大时,搜索效率 将会更高。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种有序链表节点的快速搜索方法,其特征在于,该方法主要包括以下步骤A、按照设定规则在有序链表中选取节点,把所述节点作为索引节点,建立索引表;B、在索引表中搜索到目标索引节点;C、通过目标索引节点在有序链表中搜索目标节点。
2、 根据权利要求1所述的方法,其特征在于,所述索引节点的数目与有序 链表中所有节点的数目比值为1: 100。
3、 根据权利要求1所述的方法,其特征在于,所述索引表中至少包括所述索引节点指向所述有序链表的节点的指针、所述索引节点的关键:值。
4、 根据权利要求l所述的方法,其特征在于,所述索引表中索引节点的排 列顺序与有序链表中节点的排列顺序一致。
5、 根据权利要求1所述的方法,其特征在于,所述索引表是数组或链表。
6、 根据权利要求1所述的方法,其特征在于,所述步骤B为将目标节 点的关键值与各索引节点的关键值进行逐一 比较搜索到目标索引节点。
7、 根据权利要求1至6任一所述的方法,其特征在于,所述步骤C为 通过目标索引节点指向有序链表节点的指针确定索引节点在有序链表中的位 置,然后在有序链表中将目标节点的关键值与所述位置附近的各节点的关键值 进行逐一比较搜索到目标节点。
8、 根据权利要求1所述的方法,其特征在于,该方法进一步包括在有序 链表中节点插入、删除时,更新索引表使其与有序链表保持同步。
9、 一种有序链表节点的快速搜索装置,其特征在于,该装置包括建立索引 单元和搜索单元,其中,建立索引单元,用来从有序链表中选取节点,并把所述节点顺序作为索引 节点,建立索引表; 搜索单元,用来依次在索引表和有序链表中进行搜索,最终搜索到目标节点。
10、根据权利要求9所述的装置,其特征在于,所述搜索单元包括索引节 点搜索模块和节点搜索模块,其中,索引节点搜索模块,用来在索引表中将目标节点的关键值与各索引节点的 关键值进行逐一比较搜索到目标索引节点,并把目标索引节点发送到节点搜索模块;节点搜索模块,用来根据所述目标索引节点指向有序链表节点的指针确定 索引节点在有序链表中的位置,然后在有序链表中将目标节点的关键值与该位 置附近的各节点的关键值进行逐一比较搜索到目标节点。
全文摘要
一种有序链表节点的快速搜索方法及装置,该方法主要包括以下步骤首先按照一定的规则在有序链表中选取少量节点,把选取的这些节点作为索引节点,建立索引表,然后在索引表中将目标节点的关键值与各索引节点的关键值进行逐一比较搜索到目标索引节点,最后通过目标索引节点指向的有序链表节点的指针确定索引节点在有序链表中的位置,然后在有序链表中将目标节点的关键值与所述位置附近的各节点的关键值进行逐一比较搜索到目标节点,利用本方法和装置,可以快速、高效地在有序链表中搜索到目标节点。
文档编号G06F17/30GK101127052SQ200710161509
公开日2008年2月20日 申请日期2007年9月24日 优先权日2007年9月24日
发明者伍慧敏, 张兆元, 张纪金, 敏 蒋 申请人:中兴通讯股份有限公司