一种优先级队列的数据存取方法技术

技术编号:33530593 阅读:13 留言:0更新日期:2022-05-19 02:00
本发明专利技术涉及数据结构的数据存取相关领域,具体为一种优先级队列的数据存取方法,本发明专利技术提供了一种优先级队列的数据存取方法解决优先级队列在数据数远大于优先级时,其出队效率和按优先级效率性能差的问题,此结构同时能统计优先级范围,对于优先级少数据量大的使用场景能显著提升效率;且此算法的优势是提出一种新的数据结构,结合跳表和多个单链表的优势,提供一种高效的优先级队列的数据存取方法,提高了执行效率和提供了实用功能。高了执行效率和提供了实用功能。高了执行效率和提供了实用功能。

【技术实现步骤摘要】
一种优先级队列的数据存取方法


[0001]本专利技术涉及数据结构的数据存取相关领域,具体为一种优先级队列的数据存取方法。

技术介绍

[0002]现有的计算机使用过程中,计算机程序通过构建数据结构存取对应的数据,不同的数据结构具有不同的功能。队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。而优先级队列是一种带元素优先级的队列,增加元素的时候按优先级把元素放置于合适的位置,删除元素的时候从队列头删除。
[0003]优先级队列通常采用大顶堆或小顶堆实现,这种数据结构在出队删除的时候面临堆调整,且要统计相同优先级的元素个数,需要遍历整个数据集。堆数据结构不利于元素数远大于优先级个数的场景,在一些按优先级(优先级较少)处理任务(任务数很多)的应用中,删除和统计数据个数的性能会受影响。因此现提供一种优先级队列的数据存取方法。

技术实现思路

[0004]本专利技术的目的在于提供一种优先级队列的数据存取方法,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:一种优先级队列的数据存取方法,包括以下步骤:
[0006]步骤S1、构建跳跃列表,跳跃列表由设置多层稀疏子序列的链表,且每层稀疏子序列的链表由多个带箭头框表示,跳跃列表最底层设置有表示优先级的数字框;
[0007]步骤S2、对步骤S1中稀疏子序列的链表插入优先级元素e,其中,需确认前后索引点,具体为找到恰好大于元素e的节点,且该节点的后向节点都比元素e大,还有刚好小于该元素的节点,且该节点的前向节点都比元素e小,元素e直接插入前后索引点中;
[0008]步骤S3、在需要查找优先级元素e时,算法首先在最稀疏的稀疏子序列的链表层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间,这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的优先级元素e为止;
[0009]步骤S4、在需要删除优先级元素e时,优先级元素e在索引中出现,先删除原始链表中的结点,再删除索引中的节点。
[0010]优选的,所述步骤S1的多层稀疏子序列的链表中的每一层链表中的元素是前一层链表元素的子集。
[0011]优选的,所述步骤S1中每层的稀疏子序列的链表的采用双向链表,保存头节点和末尾节点,头节点和末节点便于获知该跳表数据范围,头节点为该层最小的节点,尾节点为该层最大的节点。
[0012]优选的,所述步骤S2中在元素e直接插入前后索引点中,会造成两个索引点之间的结点过多,此时,设置跳跃列表高度height,通过一个随机函数随机生成[1,height]之间的
随机整数α,来维护索引与原始链表的大小平衡,该随机数决定新加入元素索引的高度,对于每层β,在每层建立对应的新元素索引,1≤β≤α,若随机数α=height,这时在跳表最顶层再增加一个空白层,此层初始无索引,跳表高度增加1,此时索引和达到平衡。
[0013]优选的,所述步骤S2中优先级元素e内关联一个单链表以及一个数字count,用于记录单链表内数据数。
[0014]优选的,所述单链表具有如下特点:
[0015]a、单链表含有头节点、尾节点。
[0016]b、优先级元素e数据入队方法:根据优先级找到对应的单链表,然后在单链表末尾增加一个元素数据,并调整尾指针,以及count加1;
[0017]c、优先级元素e数据出队方法:找到跳跃列表head对应的单链表,单链表首个数据元素出队,调整单链表头指针,以及count减1;若此数据元素为此链表的最后一个元素,则删除该链表和对应的调表的优先级
[0018]与现有技术相比,本专利技术的有益效果是:本专利技术提供了一种优先级队列的数据存取方法解决优先级队列在数据数远大于优先级时,其出队效率和按优先级效率性能差的问题,此结构同时能统计优先级范围,对于优先级少数据量大的使用场景能显著提升效率。
[0019]此算法的优势是提出一种新的数据结构,结合跳表和多个单链表的优势,提供一种高效的优先级队列的数据存取方法,提高了执行效率和提供了实用功能。
附图说明
[0020]图1为本专利技术的跳跃列表结构示意图;
[0021]图2为本专利技术的跳跃列表和多个单链表结构示意图。
具体实施方式
[0022]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0023]请参阅图1

2,本专利技术提供一种技术方案:一种优先级队列的数据存取方法,包括以下步骤:
[0024]步骤S1、构建跳跃列表,跳跃列表由设置多层稀疏子序列的链表,且每层稀疏子序列的链表由多个带箭头框表示,跳跃列表最底层设置有表示优先级的数字框;
[0025]步骤S2、对步骤S1中稀疏子序列的链表插入优先级元素e,其中,需确认前后索引点,具体为找到恰好大于元素e的节点,且该节点的后向节点都比元素e大,还有刚好小于该元素的节点,且该节点的前向节点都比元素e小,元素e直接插入前后索引点中;
[0026]步骤S3、在需要查找优先级元素e时,算法首先在最稀疏的稀疏子序列的链表层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间,这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的优先级元素e为止;
[0027]步骤S4、在需要删除优先级元素e时,优先级元素e在索引中出现,先删除原始链表中的结点,再删除索引中的节点。
[0028]进一步的,步骤S1的多层稀疏子序列的链表中的每一层链表中的元素是前一层链表元素的子集。
[0029]进一步的,步骤S1中每层的稀疏子序列的链表的采用双向链表,保存头节点和末尾节点,头节点和末节点便于获知该跳表数据范围,头节点为该层最小的节点,尾节点为该层最大的节点。
[0030]进一步的,步骤S2中在元素e直接插入前后索引点中,会造成两个索引点之间的结点过多,此时,设置跳跃列表高度height,通过一个随机函数随机生成[1,height]之间的随机整数α,来维护索引与原始链表的大小平衡,该随机数决定新加入元素索引的高度,对于每层β,在每层建立对应的新元素索引,1≤β≤α,若随机数α=height,这时在跳表最顶层再增加一个空白层,此层初始无索引,跳表高度增加1,此时索引和达到平衡。
[0031]进一步的,步骤S2中优先级元素e内关联一个单链表以及一个数字count,用于记录单链表内数据数。
[0032]进一步的,单链表具有如下特点:
[0033]a、单链表含有头节点、尾节点。
[0034]b、优先级元素e数据入队方法:根据优先级找到对应的单链表,然后在单链表末尾增加一个元素数据,并调整尾指针,以及count加1;
[0035]c本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种优先级队列的数据存取方法,其特征在于,包括以下步骤:步骤S1、构建跳跃列表,跳跃列表由设置多层稀疏子序列的链表,且每层稀疏子序列的链表由多个带箭头框表示,跳跃列表最底层设置有表示优先级的数字框;步骤S2、对步骤S1中稀疏子序列的链表插入优先级元素e,其中,需确认前后索引点,具体为找到恰好大于元素e的节点,且该节点的后向节点都比元素e大,还有刚好小于该元素的节点,且该节点的前向节点都比元素e小,元素e直接插入前后索引点中;步骤S3、在需要查找优先级元素e时,算法首先在最稀疏的稀疏子序列的链表层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间,这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的优先级元素e为止;步骤S4、在需要删除优先级元素e时,优先级元素e在索引中出现,先删除原始链表中的结点,再删除索引中的节点。2.根据权利要求1所述的一种优先级队列的数据存取方法,其特征在于:所述步骤S1的多层稀疏子序列的链表中的每一层链表中的元素是前一层链表元素的子集。3.根据权利要求1所述的一种优先级队列的数据存取方法,其特征在于:所述步骤S1中每层的稀疏子序列的链表的采用双向链表,保存头节点和末尾节点,头节点和末节点便于获知该跳表数据范围,头节点为该层最小的节点,尾节...

【专利技术属性】
技术研发人员:赵刚
申请(专利权)人:上海赛可出行科技服务有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1