动态内存分配中的环形数据管理器及环形数据管理方法

文档序号:6383007阅读:314来源:国知局
专利名称:动态内存分配中的环形数据管理器及环形数据管理方法
技术领域
本发明涉及计算机动态内存分配领域,更具体地说,涉及一种动态内存分配中的环形数据管理器及环形数据管理方法。
背景技术
环形数据是对通常情况下首尾相连的双向链表的抽象。它要么是空的,这时候不包含任何元素;要么包含η (η>0)个元素,并拥有唯一的首元素,其编号为0,按顺时针方向其后元素编号分别为1,2,···,η-1。环形数据允许按指定编号访问元素;允许将新的元素插入到指定编号(其后元素编号自动加I);允许将指定编号的元素删除(其后元素编号自动减I);允许将环“左旋”或“右旋”指定的数量单位(即重新编号)等。
环形数据在一些领域的问题求解中具有不可替代的地位和独特的优势,例如在计算机设备的动态内存分配等领域。
已有的实现环形数据管理的方案大体上有两类一类是常规的使用首尾相连的双向链表(如

图1所示);另一类是使用闭环动态数组。当使用双向链表来管理环形数据时,每项操作的定位过程都是通过从编号为O的首元素开始遍历来完成的;对于插入,删除和旋转操作,还涉及少量的修改链接操作。当使用闭环动态数组来管理环形数据时,每项操作的定位过程都建立在高效的数组元素随机访问的基础上;而对于插入和删除操作,则涉及大量代价高昂的元素移动操作。
当出现大规模问题时,无论是采用双向链表,还是采用闭环动态数组,环形数据往往都很难在按指定编号查找、插入、删除元素,以及按指定数量单位将环旋转等各项基本操作上取得令人满意的效率。表I是采用双向链表和闭环动态数组实现的双向链表的各项操作的时间复杂度(η表示问题规模,I表示操作指定的元素编号,m表示旋转的数量单位)。
权利要求
1.一种动态内存分配中的环形数据管理器,所述环形数据为首尾相接的双向链表;其特征在于包括数组创建模块以及元素定位模块;其中所述数组创建模块用于创建与所述双向链表对应的闭环动态数组;所述闭环动态数组包括N个数据项且每一数据项包括一个指针,N为sqrt(n+l)的整数部分,η为双向链表中元素的数量,该闭环动态数组中N个数据项的指针分别指向所述双向链表中的不同元素,且相邻数据项的指针指向的双向链表中的元素的序号间隔为xN,其中XN=maX(N,n/N);所述元素定位模块,用于通过所述闭环动态数组定位双向链表中的元素。
2.根据权利要求1所述的动态内存分配中的环形数据管理器,其特征在于所述元素定位模块包括区间判断单元和数据遍历单元,其中所述区间判断单元用于根据双向链表中待定位元素的序号获取闭环动态数组中的两个数据项,所述待定位元素介于所述两个数据项指向的双向链表中的两个元素之间;所述数据遍历单元用于以区间判断单元获得的两个数据项中的一个所指向元素为起始元素遍历双向链表获得待定位元素。
3.根据权利要求2所述的动态内存分配中的环形数据管理器,其特征在于所述数据遍历单元包括起始点获取子单元和步长获取子单元,其中起始点获取子单元用于根据所述待定位元素距离两个数据项指向的元素的距离确定起始元素以及遍历的方向;所述步长获取子单元用于根据所述确定的起始元素、遍历方向以及待定位元素与起始元素的位置关系确定遍历步长;所述数据遍历单元使用所述起始元素、遍历方向及遍历步长遍历所述双向链表获得待定位元素。
4.根据权利要求1所述的动态内存分配中的环形数据管理器,其特征在于所述环形数据管理器还包括数组维护模块,该数组维护模块包括位置获取单元、数据维护单元以及指针修改单元,其中所述位置获取单元用于通过元素定位模块获得待插入或删除的元素在所述双向链表中的位置;所述数据维护单元用于在所述获得的位置插入或删除元素;所述指针修改单元用于根据所述双向链表的变化调整所述闭环动态数组中对应数据项的指针。
5.根据权利要求4所述的动态内存分配中的环形数据管理器,其特征在于所述数组维护模块包括旋转定位单元以及重定位单元,其中所述旋转定位单元用于将指定数量单位对η求模,并将求模的结果作为待定位元素;所述重定位单元用于通过元素定位模块定位所述待定位元素,并将所述定位获得的元素作为双向链表的首元素。
6.一种动态内存分配中的环形数据管理方法,所述环形数据为首尾相接的双向链表; 其特征在于包括以下步骤(a)创建双向链表对应的闭环动态数组,其中所述闭环动态数组包括N个数据项且每一数据项包括一个指针,N为sqrt(n+l)的整数部分,η为双向链表中元素的数量;(b)使所述闭环动态数组中N个数据项的指针分别指向所述双向链表中的不同元素, 且相邻数据项的指针指向的双向链表中的元素的序号间隔为xN,其中xN=max(N,n/N);(c)通过所述闭环动态数组定位双向链表中的元素。
7.根据权利要求6所述的动态内存分配中的环形数据管理方法,其特征在于所述步骤(C)中,通过所述闭环动态数组定位双向链表中的元素包括以下步骤(Cl)根据双向链表中待定位元素的序号获取闭环动态数组中的两个数据项,所述待定位元素介于所述两个数据项指向的双向链表中的两个元素之间;(c2)以步骤(Cl)中获得的两个数据项中的一个所指向元素为起始元素遍历双向链表获得待定位元素。
8.根据权利要求7所述的动态内存分配中的环形数据管理方法,其特征在于所述步骤(c2)包括(c21)根据所述待定位元素距离两个数据项指向的元素的距离确定起始元素以及遍历的方向;(c22)根据所述确定的起始元素、遍历方向以及待定位元素与起始元素的位置关系确定遍历步长;(c23)使用所述确定的起始元素、遍历方向及遍历步长遍历所述双向链表获得待定位元素。
9.根据权利要求6所述的动态内存分配中的环形数据管理方法,其特征在于所述方法还包括通过所述闭环动态数组向双向链表中插入元素或从双向链表中删除元素,具体包括以下步骤通过所述闭环动态数组定位待插入或删除的元素在所述双向链表中的位置;在所述定位获得的双向链表中的位置插入或删除元素;根据所述双向链表的变化调整所述闭环动态数组中对应数据项的指针。
10.根据权利要求1所述的动态内存分配中的环形数据管理方法,其特征在于所述方法还包括通过所述闭环动态数组将双向链表按指定数量单位旋转,具体包括以下步骤将指定数量单位对η求模,并将求模的结果作为待定位元素;使用所述闭环动态数组定位所述待定位元素;将所述定位获得的元素作为双向链表的首元素。
全文摘要
本发明提供了一种动态内存分配中的环形数据管理器,所述环形数据为首尾相接的双向链表;包括数组创建模块以及元素定位模块;其中所述数组创建模块用于创建与所述双向链表对应的闭环动态数组;所述闭环动态数组包括N个数据项且每一数据项包括一个指针,该闭环动态数组中N个数据项的指针分别指向所述双向链表中的不同元素,且相邻数据项的指针指向的双向链表中的元素的序号间隔为xN;所述元素定位模块,用于通过所述闭环动态数组定位双向链表中的元素。本发明还提供了一种对应的方法。本发明通过在环形数据的双向链表的基础上引入闭环动态数组,从而在大规模问题上,使基本操作时具有出色的效率。
文档编号G06F17/30GK103064881SQ20121050889
公开日2013年4月24日 申请日期2012年12月3日 优先权日2012年12月3日
发明者丘锋伟 申请人:深圳市汇川控制技术有限公司, 深圳市汇川技术股份有限公司, 苏州汇川技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1