一种数据存储方法、访问方法及装置与流程

文档序号:13532378阅读:211来源:国知局
一种数据存储方法、访问方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种数据存储方法、访问方法及装置。



背景技术:

随着计算机技术的出现和兴起,不同类型的数据存储方法也应运而生。这些数据存储方法采用各种各样的数据结构,比如数组,链表,哈希表,对数据进行存储。对于信息爆炸的21世纪,如何高效地存储、访问数据将是人们不停探索的方向。

现有的数据存储方法所采用的数据结构,按访问方式大致可分为随机访问和顺序访问两种。对于随机访问的数据结构,如图1(a)所示,为一种现有的数组结构示意图,其中每一个小方格代表存储的一个数据元素,数组所占用的存储空间为一个连续的存储空间,数组中的数据元素按照存入顺序依次排列,如图1(a)中数据元素2便是在数据元素1之后被存入数组。访问数组时,根据目的数据元素的地址确定其在数组中的位置,可直接从数组中读取到目的数据元素,可见,对于如数组这种随机访问的数据结构,可以在常数时间内读取数组中任一数据元素。而对于顺序访问的数据结构,如图1(b)所示,为一种现有的链表结构示意图,每个数据元素附加一个位置元数据,用于指向该数据元素逻辑上的下一个数据元素。访问链表中的数据元素时,需要从第一个数据元素开始遍历到所需数据元素,故顺序访问的访问用时和数据元素的位置呈线性关系。显然,随机访问访问用时更加稳定。

然而,虽然随机访问较顺序访问有上述优势,但是随机访问的数据结构的存储方式却存在一定的弊端。在存储数据时,往往会遇到存储空间不足的情况,当原有存储空间无法容纳需要存储的数据时,就需要数据结构能够支持动态扩展以扩大所占用的存储空间。对于随机访问的数据结构,数据元素在存储空间中往往是连续存储的,在进行动态扩展时,需要先申请一块更大的存储空间(一般为现有存储空间的两倍),之后,复制现有存储空间中存储的数据至新申请的存储空间中,再释放原来的存储空间。这种动态扩展方式需要对存储的全部数据都进行复制和转移,需要较长的时间消耗和较高的资源消耗,而且,进行动态扩展和不进行动态扩展时所消耗的资源差异巨大,影响了数据存储、访问的稳定性。



技术实现要素:

本发明提供一种数据存储方法、访问方法及装置,用以解决现有技术中存在随机访问数据结构的动态扩展资源消耗巨大的问题。

本发明实施例提供一种数据存储方法,包括:

获取待存储数据的指针数组的第n个指针元素;

确定所述第n个指针元素在所述待存储数据的存储数组集中的对应数组;

在所述第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;所述存储规则用于规定所述存储数组集中各数组可用存储空间的大小;

对所述指针数组中的指针元素进行扩展调整;经过扩展调整后的所述指针数组中的最后一个指针元素与所述扩展数组相对应;

将待存储数据元素依次存入所述扩展数组。

可选的,还包括:

在所述第n个指针元素的对应数组的可用存储空间未满时,将所述待存储数据元素顺序存储至所述第n个指针元素的对应数组中。

可选的,所述存储规则包括:

从所述存储数组集中的第一数组到所述第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储2的幂次方个数据元素。

可选的,对所述指针数组中的指针元素进行扩展调整,经过扩展调整后的所述指针数组中的最后一个指针元素与所述扩展数组相对应,包括:

在所述指针数组的可用存储空间未满时,在所述指针数组中第n个指针元素之后存储第n+1指针元素;所述第n+1个指针元素与所述扩展数组相对应。

可选的,对所述指针数组中的指针元素进行扩展调整,经过扩展调整后的所述指针数组中的最后一个指针元素与所述扩展数组相对应,包括:

在所述指针数组的可用存储空间已满时,将所述存储数组集中的第m数组至第m+k数组存储为一个新数组;所述第m数组对应的指针元素为所述指针数组中的第m个指针元素,所述第m+k数组对应的指针元素所述指针数组中的第m+k个指针元素;k大于等于1;

将所述第m个指针元素对应所述新数组;

针对第m+1个指针元素至第n-k个指针元素中的任意一个指针元素,将第x个指针元素与第x+k数组相对应;x大于m且x+k小于等于n;

将所述指针数组中的第n-k+1个指针元素与所述扩展数组相对应。

可选的,m=1。

本发明实施例提供一种数据访问方法,包括:

获取目的数据的目的数据元素的地址下标;

根据所述地址下标及存储规则,从所述目的数据的指针数组中确定所述目的数据元素对应的目的指针元素;所述存储规则用于规定所述存储数组集中各数组可用存储空间的大小;

根据所述目的指针元素,从所述目的数据的存储数组集中确定所述目的数据元素所在的数组;

根据所述地址下标及所述存储规则,从所述目的数据元素所在的数组中读取所述目的数据元素。

可选的,所述存储规则包括:从所述存储数组集的第一数组到第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储偶数个数据元素。

可选的,根据所述地址下标及存储规则,从所述目的数据的指针数组中确定所述目的数据元素对应的目的指针元素,包括:

获取指针数组中第一个指针元素的对应数组所存储的最后一个数据元素的地址下标的二进制形式的最高位等级作为参考等级;

确定所述目的数据元素的地址下标的二进制形式的最高位等级;

在所述目的数据元素的地址下标的二进制形式的最高位等级高于所述参考等级时,根据所述目的数据元素的地址下标的二进制形式的最高位等级与所述参考等级之间的差值确定目的指针元素;

根据所述地址下标及所述存储规则,从所述目的数据元素所在的数组中读取所述目的数据元素,包括:

将所述目的数据元素的地址下标的二进制形式去掉最高位后的数据作为所述目的数据元素在所述数组中的组内地址下标。

可选的,还包括:

在所述目的数据元素的地址下标的二进制形式的最高位等级不高于所述参考等级时,确定所述目的数据元素所在的数组为所述指针数组第一个指针元素的对应数组;

根据所述目的数据元素的地址下标及存储规则确定所述目的数据元素在所述访问数组中的组内地址下标。

本发明实施例提供一种数据存储装置,其包括:

获取单元,用于获取待存储数据的指针数组的第n个指针元素;

所述获取单元,还用于确定所述第n个指针元素在所述待存储数据的存储数组集中的对应数组;

处理单元,用于在所述第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;所述存储规则用于规定所述存储数组集中各数组可用存储空间的大小;

所述处理单元,还用于对所述指针数组中的指针元素进行扩展调整;经过扩展调整后的所述指针数组中的最后一个指针元素与所述扩展数组相对应;

所述处理单元,还用于将待存储数据元素依次存入所述扩展数组。

可选的,还包括:

所述处理单元,还用于在所述第n个指针元素的对应数组的可用存储空间未满时,将所述待存储数据元素顺序存储至所述第n个指针元素的对应数组中。

可选的,所述存储规则包括:

从所述存储数组集中的第一数组到所述第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储2的幂次方个数据元素。

可选的,所述处理单元,具体用于:

在所述指针数组的可用存储空间未满时,在所述指针数组中第n个指针元素之后存储第n+1指针元素;所述第n+1个指针元素与所述扩展数组相对应。

可选的,所述处理单元,具体用于:

在所述指针数组的可用存储空间已满时,将所述存储数组集中的第m数组至第m+k数组存储为一个新数组;所述第m数组对应的指针元素为所述指针数组中的第m个指针元素,所述第m+k数组对应的指针元素所述指针数组中的第m+k个指针元素;

将所述第m个指针元素对应所述新数组;

针对第m+1个指针元素至第n-k个指针元素中的任意一个指针元素,将第x个指针元素与第x+k数组相对应;x大于m且x+k小于等于n;

将所述指针数组中的第n-k+1个指针元素与所述扩展数组相对应。

本发明实施例提供一种数据访问装置,包括:

获取单元,用于获取目的数据的目的数据元素的地址下标;

处理单元,用于根据所述地址下标及存储规则,从所述目的数据的指针数组中确定所述目的数据元素对应的目的指针元素;所述存储规则用于规定所述存储数组集中各数组可用存储空间的大小;

所述处理单元,还用于根据所述目的指针元素,从所述目的数据的存储数组集中确定所述目的数据元素所在的数组;

所述处理单元,还用于根据所述地址下标及所述存储规则,从所述目的数据元素所在的数组中读取所述目的数据元素。

可选的,所述存储规则包括:从所述存储数组集的第一数组到第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储2的幂次方个数据元素。

可选的,所述处理单元,具体用于:

获取指针数组中第一个指针元素的对应数组所存储的最后一个数据元素的地址下标的二进制形式的最高位等级作为参考等级;

确定所述目的数据元素的地址下标的二进制形式的最高位等级;

在所述目的数据元素的地址下标的二进制形式的最高位等级高于所述参考等级时,根据所述目的数据元素的地址下标的二进制形式的最高位等级与所述参考等级之间的差值确定目的指针元素;

所述处理单元,还具体用于:

将所述目的数据元素的地址下标的二进制形式去掉最高位后的数据作为所述目的数据元素在所述数组中的组内地址下标。

可选的,所述处理单元,还用于:

在所述目的数据元素的地址下标的二进制形式的最高位等级不高于所述参考等级时,确定所述目的数据元素所在的数组为所述指针数组第一个指针元素的对应数组;

根据所述目的数据元素的地址下标及存储规则确定所述目的数据元素在所述访问数组中的组内地址下标。

本发明实施例提供一种计算设备,其包括存储其和处理器,其中,存储器用于存储程序指令,处理器用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一种数据存储方法。

本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一种数据存储方法。

本发明实施例提供一种计算设备,其包括存储其和处理器,其中,存储器用于存储程序指令,处理器用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一种数据存储方法。

本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使所述计算机执行上述任一种数据访问方法。

综上所述,本发明实施例提供一种数据存储方法、访问方法及装置,包括:获取指针数组的第n个指针元素;确定第n个指针元素在待存储数据的存储数组集中的对应数组;在第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;存储规则用于规定存储数组集中各数组可用存储空间的大小;对指针数组中的指针元素进行扩展调整;经过扩展调整后的指针数组中的最后一个指针元素与扩展数组相对应;将待存储数据元素依次存入扩展数组。本发明实施例,针对待存储数据设置了指针数组和存储数组集,指针数组中各指针元素依次对应着存储数组集中各数组,在进行动态扩展时,只需增加存储数组集中的数组个数,即构建扩展数组,并对指针数组中的指针元素进行扩展调整,而不需要拷贝指针数组和存储数组集中所有数组存储的全部的数据元素,所需处理的数据量远远小于现有技术中需要处理的数据量,而且,在本发明实施例中,扩展数组的可用存储空间的大小不需要是存储数组集中所有数组的可用存储空间之和的两倍,甚至不需要大于存储数组集中所有数组的可用存储空间之和,因此较现有技术能够更轻易地获取新的可用存储空间,综上,本发明实施例所公开的技术方案能够减少随机访问数据结构动态扩展时的资源消耗。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1(a)为一种现有的数组结构示意图;

图1(b)为一种现有的链表结构示意图;

图2为本发明实施例提供的一种数据存储方法流程示意图;

图3为本发明实施例提供的一种数据结构示意图;

图4为本发明实施例提供的一种数据访问方法流程示意图;

图5为本发明实施例提供的一种数据结构扩展示意图;

图6为本发明实施例提供的一种数据结构扩展示意图;

图7为本发明实施例提供的一种数据存储装置结构示意图;

图8为本发明实施例提供的一种数据访问装置结构示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在数据存储和访问过程中,是以数据元素为对象进行的,数据元素是数据的组成单元。存入同一数组中的数据元素为同一种类型的数据元素,如整数、字母、单精度浮点数、双精度浮点数等等。应理解,本发明实施例中默认所有待存储数据的数据元素都为同一类型的数据元素,可存入同一数组中,在具体实施过程中,在本申请实施例的基础上附加其它无创造性的技术特征而使本发明适用于具有多种数据元素的数据的存储的情况,也应包含于本发明实施例中,例如,在实施本发明实施例之前,增加数据元素提取、分类,或者根据数据元素种类确定所要存储的数组等等过程。

图2为本发明实施例提供的一种数据存储方法流程示意图,如图2所示,包括以下步骤:

s201:获取指针数组的第n个指针元素。

s202:确定第n个指针元素在待存储数据的存储数组集中的对应数组。

s203:在第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;存储规则用于规定存储数组集中各数组可用存储空间的大小。

s204:对指针数组中的指针元素进行扩展调整;经过扩展调整后的指针数组中的最后一个指针元素与扩展数组相对应。

s205:将待存储数据元素依次存入扩展数组。

具体实施过程中,本发明实施例提供一种数据结构,本发明实施例按照该数据结构对数据进行存储。图3为本发明实施例提供的一种数据结构示意图,如图3所示,数据结构由一个指针数组和存储数组集中的多个数组构成,其中,指针数组包含n个指针元素,存储数组集包含n个数组,应理解,图3所示的存储数组集的形式只是逻辑上的表示,实际实施过程中,存储数组集中的n个数组不需要相互紧邻。如图3中箭头所示,指针数组的n个指针元素分别与存储数组集中的n个数组相对应,n为正整数,指针数组的每个指针元素用于指示对应数组的存储位置。应理解,无论是指针数组还是存储数组集中的数组,任一个数组所占的存储空间是连续的,但当将指针数组和存储数组集中的数组联合看作一个总数组时,其所占的存储空间可以是不连续的,如图3所示的存储数组集中,第一个数组的存储空间是连续的,第二个数组的存储空间是连续的,但是第一个数组和第二个数组之间的存储空间可以是不连续的。

基于图3所示的数据结构,在s201中,n为正整数,第n个指针元素为指针数组当前最未存储位置中存储的元素。

在s202中,指针数组的每个指针元素用于指示对应数组的存储位置。本发明实施例所公开的数据结构可以看作一个总数组,待存储数据元素是按顺序依次存入存储空间中的。当指针数组中存储有第n个指针元素时,说明前n-1个指针元素的对应数组的可用存储空间已满,因此,按顺序可以确定待存储数据元素应存入指针数组所存储的第n个指针元素的对应数组中。在第n个指针元素的对应数组的可用存储空间未满时,将待存储数据元素顺序存储至第n个指针元素的对应数组中,从而完成了按顺序存储待存储数据元素,确保所存储的数据元素适用于随机访问。可选的,指针数组中指针元素与存储数组集中的数组之间的对应关系为指针数组中的每个指针元素为指针元素的对应数组的位置元数据,采用位置元数据作为对应关系可以在数据访问时直接通过指针数组中的指针元素找到存储数组集中与其对应的数组所在的位置,访问效率更高,当然,如建立映射表等方法也应包含于本发明实施例中。

在s203中,第n个指针元素的对应数组的可用存储空间已满,说明此时存储数组集中所有数组的可用存储空间都已满,数据结构需要进行扩展。此时,向操作系统申请新的可用存储空间,在新的可用存储空间中构建扩展数组,从整体上看,相当于在指针数组和存储数组集构成的总数组的存储空间上又增加了一个新的可用存储空间,即扩展了总数组的存储空间。扩展数组的可用存储空间的大小根据存储规则决定,与现有技术不同的是,本发明实施例中新的可用存储空间没有用于存储已存的数据,或只有极小部分用于存储已存的数据,其余部分用于存储待存储数据元素,因此,本发明实施例中每次扩展需要获取的新的可用存储空间的大小较现有技术小的多。

在s204中,对指针数组的扩展调整的具体过程可以有多种操作,例如增加新的指针元素,又例如调整现有指针元素的顺序,还例如删除部分指针元素等,具体的操作可根据实际需求组合实施,宗旨上应实现扩展调整后的指针数组最后一个指针元素和扩展数组存在一一对应关系。

本发明实施例,针对待存储数据设置了指针数组和存储数组集,指针数组中各指针元素依次对应着存储数组集中各数组的存储位置,在进行动态扩展时,只需增加存储数组集中的数组个数,即构建扩展数组,并对指针数组中的指针元素进行扩展调整,而不需要拷贝指针数组和存储数组集中所有数组存储的全部的数据元素,所需处理的数据量远远小于现有技术中需要处理的数据量,而且,在本发明实施例中,扩展数组的可用存储空间的大小不需要是存储数组集中所有数组的可用存储空间之和的两倍,甚至不需要大于存储数组集中所有数组的可用存储空间之和,因此较现有技术能够更轻易地获取新的可用存储空间,综上,本发明实施例所公开的技术方案能够减少随机访问数据结构动态扩展时的资源消耗。

与上述实施例相对应的,本发明实施例还提供一种数据访问方法。图4为本发明实施例提供的一种数据访问方法流程示意图,如图4所示,包括以下步骤:

s401:获取目的数据的目的数据元素的地址下标。

s402:根据地址下标及存储规则,从目的数据的指针数组中确定目的数据元素对应的目的指针元素;存储规则用于规定存储数组集中各数组可用存储空间的大小。

s403:根据目的指针元素,从目的数据的存储数组集中确定目的数据元素所在的数组。

s404:根据地址下标及存储规则,从目的数据元素所在的数组中读取目的数据元素。

在s401中,地址下标用来指示目的数据元素在存储空间中的位置,众所周知,数组在存储空间中的排列方式为{a0,a1,...},其中,a0,a1是数组中存储的数据元素在存储空间的存储位置,每个位置具有不同的地址下标,一个数组中的各数据元素的地址下标从0开始取值。本发明实施例所提供的数据结构可以看作一个总数组,例如存储数组集中的n个数组共存储了m个数据元素,则第一个数组中所存储的第一个数据元素的地址下标为0,第n个数组中所存储的最后一个数据元素的地址下标为m-1。

在s402中,存储规则规定了存储数组集中各数组可用存储空间的大小,而目的数据元素的地址下标又表示的是目的数据元素在总数组中的地址,在访问时可以利用存储规则和地址下标联合确定目的数据元素对应的目的指针元素。以图3所示的数据结构为例,若目的数据元素的地址下标为3,则根据存储规则可知,存储数组集的前两个数组共存储有2个数据元素,第三个数组存储有2个数据元素,则可知目的数据元素在存储数组集的第三个数组中,进而可知指针数组的第三个指针元素为目的指针元素。

在s403中,指针数组的每个指针元素用于指示对应数组的存储位置,目的指针元素便指示的是目的数据元素所在的数组的存储位置。

在s404中,根据目的数据元素的地址下标和存储规则,可以确定目的数据元素所在数组的第一个数据元素的地址下标,进而可知目的数据元素在其所在的数组中的组内地址下标,进而便可以从目的数据元素所在的数组中读取目的数据元素。

通过上述实施例所公开的技术方案便可以成功提取本发明实施例所存储的数据。基于上述数据存储过程和数据访问过程,本发明实施例提供两种数据结构扩展的可能实现方式,对应于图2中s203、s204和s205,采用本两种实现方式存储数据可以提高数据访问的效率。

第一种可能的实现方式

在第n数组的可用存储空间已满且指针数组的可用存储空间未满时,在指针数组中第n个指针元素之后存储第n+1个指针元素;第n+1个指针元素与扩展数组相对应,即将扩展数组作为存储数组集中的第n+1数组。

图5为本发明实施例提供的一种数据结构扩展示意图,如图5所示,指针数组包括3个指针元素,每个指针元素对应一个存储数组集中的数组。图5中,扩展前指针数组的第3个指针元素的对应数组的可用存储空间已满,若要存储待存储数据元素,需要对数据结构进行扩展。

具体的,获取新的可用存储空间并构建扩展数组,图5中的扩展数组为空白数组。由图5中扩展前的数据结构可见,指针数组还存在未被占用的可用存储空间,此时,可在指针数组中增加第4个数据元素,第4个数据元素为扩展数组的位置元数据。

可选的,本发明实施例提供一种可行的存储规则,包括:从存储数组集中的第一数组到第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,第一数组存储2的幂次方个数据元素。其中,第一数组为第一个指针元素的对应数组,第n数组为第n个指针元素的对应数组。举例说明,第一数组可存储两个数据元素,第二数组可存储两个数据元素,第三数组可存储四个数据元素,第四数组可存储八个数据元素,其余数组以此类推。

采用上述数据结构存储的数据,除第一数组之外,存储数组集中存储于同一数组的数据元素的地址下标具有相同的最高位等级,且,对于存储数组集中任意相邻的两个数组的末位数据元素,二者地址下标的二进制最高位之间互差1级,这种末尾数据元素地址下标间的变化规律将更便于利用目的数据元素的地址下标访问,可以提高数据访问的效率。

第二种可能的实现方式

在第n数组的可用存储空间已满时还可以采用本发明实施例提供的第二种可能的实现方式实现数据结构扩展,与第一种可能的实现方式不同的是,第二种实现方式在指针数组的可用存储空间已满时,仍可实现数据结构扩展。

具体的,获取新的可用存储空间:第一可用存储空间和第二可用存储空间,其中,第一可用存储空间为连续的存储空间,第二可用存储空间为连续的存储空间,第一可用存储空间和第二可用存储空间之间可以不为连续的存储空间。在指针数组的可用存储空间已满时,将存储数组集中的第m数组至第m+k数组存储为一个新数组;第m数组对应的指针元素为指针数组中的第m个指针元素,第m+k数组对应的指针元素指针数组中的第m+k个指针元素;k大于等于1;新数组的可用存储空间为第一存储空间;

将第m个指针元素对应新数组;

针对第m+1个指针元素至第n-k个指针元素中的任意一个指针元素,将第x个指针元素与第x+k数组相对应;x大于m且x+k小于等于n;

将指针数组中的第n-k+1个指针元素与扩展数组相对应。其中,扩展数组的可用存储空间为第二存储空间。

通过将已有的k个数组合并从而减少指针数组的对应数组的个数,使得指针数组中第n-k+1个指针元素及其之后的指针元素可以剩余出来与扩展数组相对应。

更进一步的,存储数组集中n个数组的存储空间大小之间的比例关系满足存储规则,即,从所述存储数组集中的第一数组到所述第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储2的幂次方个数据元素。因此,根据与第一种可能的实现方式相似的原理,第二种可能的实现方式依然可以利用目的数据元素的地址下标访问,提高数据访问的效率。此时,可选的,上述实施例中m为1,当m为1时,无论扩展前后,存储数组集中的数组都能一直满足本发明实施例所提供的存储规则,使得扩展后的存储数组集中的数据仍可通过适用于本发明实施例接下来所提供的数据访问方法。。

图6为本发明实施例提供的一种数据结构扩展示意图,如图6所示,指针数组包括4个指针元素,每个指针元素对应一个存储数组集中的数组。图6中,扩展前第四数组的可用存储空间已满,若要存储待存储数据元素,需要对数据结构进行扩展。

获取新的可用存储空间:第一可用存储空间和第二可用存储空间,第一可用存储空间用于合并存储数组集中的数组,第二可用存储空间用于构建扩展数组。对于第一可用存储空间,将第一个指针元素的对应数组和第二个指针元素的对应数组在第一可用存储空间中合并为新第一数组;将指针数组中的第一个指针元素与新第一数组相对应。如图6扩展后的数据结构所示,指针数组中第一个指针元素的对应数组为扩展前第一数组和第二数组合并后的新第一数组。合并的具体过程可以是:在第一存储空间中构建新第一数组,将第一个指针元素的对应数组和第二个指针元素的对应数组中存储的数据元素按顺序拷贝至新第一数组,将指针数组的第一个指针元素与新第一数组相对应,可选的,还包括释放第一个指针元素的原对应数组和第二个指针元素的原对应数组所占的存储空间。

之后,请参考图6中扩展前后数据结构的对比,扩展后指针数组中的第2个指针元素与扩展前的第三个指针元素的对应数组相对应,扩展后指针数组中的第3个指针元素与扩展前的第四个指针元素的对应数组相对应。而扩展后指针数组中的第4个指针元素与第二存储空间中的扩展数组相对应。

采用第二种可能的实现方式,实现了在指针数组可用存储空间已满的情况下对数据结构的扩充。

基于上述第一种可能的实现方式和第二种可能的实现方式,本发明实施例还提供第三种可能的实现方式,以实现访问第一种可能的实现方式和第二种可能的实现方式所提供的数据结构中的数据。

在第三种可能的实现方式中,访问的是满足存储规则的数据结构,存储规则包括:从所述存储数组集中的第一数组到所述第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,所述第一数组存储2的幂次方个数据元素。举例说明,第一数组存储有2a个数据元素,地址下标从0至2a-1,第二数组存储有2a个数据元素,地址下标从2a至2a+1-1,第三数组存储有2a+1个数据元素,地址下标从2a+1至2a+2-1,第n数组存储有2n+a-2,地址下标从2m+a-2至2m+a-1-1。

访问上述类型的数据结构时,可选的,通过以下步骤进行,包括:

步骤一:获取指针数组中第一个指针元素的对应数组所存储的最后一个数据元素的地址下标的二进制形式的最高位等级作为参考等级。

举例说明,第一个指针元素对应数组中所存储的最后一个数据元素的地址下标为2a-1,则其二进制形式为11…1(共a个1),则参考等级为a。可选的,在第一个指针元素的对应数组结构未发生变化时,保存参考等级以共下次访问数据结构时直接使用,在第一个指针元素的对应数组结构发生变化时,如第二种可能的实现方式所公开的情形,可以重新计算并保存参考等级。当然,本发明实施例以第一个指针元素的对应数组中所存储的最后一个数据元素的地址下标的最高位等级作为参考等级,在具体实施时,也可以采用存储数组集中其它数组的最后一个数据元素的地址下标的最高为等级作为参考等级,本发明实施例对此不作一一赘述。

步骤二:确定目的数据元素的地址下标的二进制形式的最高位等级。

举例说明,目的数据元素的地址下标为123,则其二进制形式为1111011,最高位等级为7。

步骤三:在目的数据元素的地址下标的二进制形式的最高位等级高于参考等级时,根据目的数据元素的地址下标的二进制形式的最高位等级与参考等级之间的差值确定目的指针元素。

继续以步骤一和步骤二中的示例说明,参考等级为a,目的数据元素的地址下标的二进制形式的最高位等级为7。对比a与7之间的大小关系,若7高于a,如a等于5的情况,此时,根据7与5之间的差值可以确定访问数组为第一个指针元素的对应数组之后的第二个数组,即第三个指针元素的对应数组。

当然,也存在目的数据元素的地址下标的二进制形式的最高位等级不高于参考等级的情况,如a=8的情况,此时便说明目的数据元素存在于第一个指针元素的对应数组中,可根据目的数据元素的地址下标的二进制形式直接从第一数组中读取目的数据元素。如对于地址下标为123的目的数据元素,其为总数组中存储的第124个数据元素,而第一数组中共存储256个数据元素,所以目的数据元素便是第一数组中组内地址下标为123的数据元素,此后,直接按照现有数组随机访问方法读取目的数据元素即可。

步骤四:将目的数据元素的地址下标的二进制形式去掉最高位后的数据作为目的数据元素在数组中的组内地址下标。

继续以步骤三中a等于5的示例进行说明,在确定第三个指针元素的对应数组为访问数组之后,将目的数据元素的地址下标的二进制形式去掉最高位,1111011去掉最高位后变为111011,对应二进制数59,因此地址下标为123的目的数据元素为第三个指针元素的对应数组存储的组内地址下标为59的数据元素,此后,直接按照现有数组随机访问方法读取目的数据元素即可。

在上述第三种可能的实现方式中,可选的,采用编程中常用的取二进制最高位的指令,如采用如gnu编译器集合(gnucompilercollection,gcc)中的_builtin_clz内建函数调用,来读取二级制形式的最高位等级。在上述第三种可能的实现方式中,通过二进制形式下数据元素地址下标的对比缩短了由于数据结构的复杂化带来的额外耗时,且整体上耗时仍为常数,因此依旧能够保持现有技术中随机访问数据结构的优点。

基于上述实施例所提供的数据访问方法,本发明实施例还提供一种可行的数据元素插入方法,以实现对特定位置的数据元素插入或替换。具体的,通过指定待插入数据元素的地址下标,参考上述数据访问方法,确定该地址下标所对应的存储数组集的存储空间中的位置,并将待插入数据元素写入该位置或替换该位置已有数据元素,具体实施方式可在第三种可能的实现方式所公开的访问方法的基础上实现,本发明实施例对此不再一一赘述。当然,在将待插入数据元素写入存储数组集时,也可能存在存储数组集需要扩展的情况,例如现有存储数组集的最大地址下标为90,而待插入数据元素的地址下标为10000,此时可先对存储数组集进行扩展直至存储数组集的存储空间满足地址下标的大小,之后,采用与上述数据访问方法类似的方法将待插入数据元素写入该地址下标对应的存储位置。

应理解,虽然本发明实施例以数组为例进行了阐述,但不代表本发明实施例的使用场景仅限于数组,其它基于数组的数据结构,如哈希表,在本发明实施例所公开的技术方案的基础上无创造性的改动也应包含于本发明实施例。以哈希表为例举例说明,在扩展数据结构时,采用与本发明实施例相似的过程,区别在于,哈希表中每个条目需要进行重哈希,其所属槽位可能发生改变。但按照一般使用中,槽位的下标是哈希函数结果取数组长度的模,按每次扩展的存储空间大小为原最后一个槽位存储空间大小的两倍的策略,概率上看有一半的条目槽位不会发生变化,故重哈希只会移动一半条目,实际实施过程中还可以采取延迟移动来提高实时性,这里不赘述。

综上所述,本发明实施例提供一种数据存储方法、访问方法,包括:获取指针数组的第n个指针元素;确定第n个指针元素在待存储数据的存储数组集中的对应数组;在第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;存储规则用于规定存储数组集中各数组可用存储空间的大小;对指针数组中的指针元素进行扩展调整;经过扩展调整后的指针数组中的最后一个指针元素与扩展数组相对应;将待存储数据元素依次存入扩展数组。本发明实施例,针对待存储数据设置了指针数组和存储数组集,指针数组中各指针元素依次对应着存储数组集中各数组的存储位置,在进行动态扩展时,只需增加存储数组集中的数组个数,即构建扩展数组,并对指针数组中的指针元素进行扩展调整,而不需要拷贝指针数组和存储数组集中所有数组存储的全部的数据元素,所需处理的数据量远远小于现有技术中需要处理的数据量,而且,在本发明实施例中,扩展数组的可用存储空间的大小不需要是存储数组集中所有数组的可用存储空间之和的两倍,甚至不需要大于存储数组集中所有数组的可用存储空间之和,因此较现有技术能够更轻易地获取新的可用存储空间,综上,本发明实施例所公开的技术方案能够减少随机访问数据结构动态扩展时的资源消耗。

基于相同的技术构思,本发明实施例还提供一种数据存储装置,该装置可以实现上述任一实施例所提供的技术方案。图7为本发明实施例提供的一种数据存储装置结构示意图,如图7所示,存储装置700包括:获取单元701和处理单元702,其中,

获取单元701,用于获取指针数组的第n个指针元素;

获取单元701,还用于确定第n个指针元素在待存储数据的存储数组集中的对应数组;

处理单元702,用于在第n个指针元素的对应数组的可用存储空间已满时,根据存储规则构建扩展数组;存储规则用于规定存储数组集中各数组可用存储空间的大小;

处理单元702,还用于对指针数组中的指针元素进行扩展调整;经过扩展调整后的指针数组中的最后一个指针元素与扩展数组相对应;

处理单元702,还用于将待存储数据元素依次存入扩展数组。

可选的,还包括:

处理单元702,还用于在第n个指针元素的对应数组的可用存储空间未满时,将待存储数据元素顺序存储至第n个指针元素的对应数组中。

可选的,存储规则包括:

从存储数组集中的第一数组到第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,第一数组存储2的幂次方个数据元素。

可选的,处理单元702,具体用于:

在指针数组的可用存储空间未满时,在指针数组中第n个指针元素之后存储第n+1指针元素;第n+1个指针元素与扩展数组相对应。

可选的,处理单元702,具体用于:

在指针数组的可用存储空间已满时,将存储数组集中的第m数组至第m+k数组存储为一个新数组;第m数组对应的指针元素为指针数组中的第m个指针元素,第m+k数组对应的指针元素指针数组中的第m+k个指针元素;k大于等于1;

将第m个指针元素对应新数组;

针对第m+k个指针元素至第n-k个指针元素中的任意一个指针元素,将第x个指针元素与第x+k数组相对应;x大于m且x+k小于等于n;

将指针数组中的第n-k+1个指针元素与扩展数组相对应。

可选的,m=1。

基于相同的技术构思,本发明实施例还提供一种计算设备,该计算设备具体包括存储器和处理器,其中,存储器可以用于存储数据存储方法的程序。处理器通过调用存储器存储的程序指令,用于按照获得的程序指令执行上述任意发明实施例所公开的数据存储方法。

基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,用于存储计算机程序指令,其包含用于执行上述任意发明实施例所公开的数据存储方法的程序。

所述计算机可读存储介质可以是计算机能够存取的任何可用介质或数据存储设备,包括但不限于磁性存储器(例如软盘、硬盘、磁带、磁光盘(mo)等)、光学存储器(例如cd、dvd、bd、hvd等)、以及半导体存储器(例如rom、eprom、eeprom、非易失性存储器(nandflash)、固态硬盘(ssd))等。

基于相同的技术构思,本发明实施例还提供一种数据访问装置,该装置可以实现上述任一实施例所提供的技术方案。图8为本发明实施例提供的一种数据访问装置结构示意图,如图8所示,访问装置800包括:获取单元801和处理单元802,其中,

获取单元801,用于获取目的数据的目的数据元素的地址下标;

处理单元802,用于根据地址下标及存储规则,从目的数据的指针数组中确定目的数据元素对应的目的指针元素;存储规则用于规定存储数组集中各数组可用存储空间的大小;

处理单元802,还用于根据目的指针元素,从目的数据的存储数组集中确定目的数据元素所在的数组;

处理单元802,还用于根据地址下标及存储规则,从目的数据元素所在的数组中读取目的数据元素。

可选的,存储规则包括:从存储数组集的第一数组到第n数组的n个数组的可用存储空间大小依次呈比例1:1:2:4:8:…:2n-2,n为大于1的正整数,且,第一数组存储2的幂次方个数据元素。

可选的,处理单元802,具体用于:

获取指针数组中第一个指针元素的对应数组所存储的最后一个数据元素的地址下标的二进制形式的最高位等级作为参考等级;

确定目的数据元素的地址下标的二进制形式的最高位等级;

在目的数据元素的地址下标的二进制形式的最高位等级高于参考等级时,根据目的数据元素的地址下标的二进制形式的最高位等级与参考等级之间的差值确定目的指针元素;

处理单元802,还具体用于:

将目的数据元素的地址下标的二进制形式去掉最高位后的数据作为目的数据元素在数组中的组内地址下标。

可选的,处理单元802,还用于:

在目的数据元素的地址下标的二进制形式的最高位等级不高于参考等级时,确定目的数据元素所在的数组为指针数组第一个指针元素的对应数组;

根据目的数据元素的地址下标及存储规则确定目的数据元素在访问数组中的组内地址下标。

基于相同的技术构思,本发明实施例还提供一种计算设备,该计算设备具体包括存储器和处理器,其中存储器可以用于存储数据访问方法的程序,处理器通过调用存储器存储的程序指令,用于按照获得的程序指令执行上述任意发明实施例所公开的数据访问方法。

基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,用于存储计算机程序指令,其包含用于执行上述任意发明实施例所公开的数据访问方法的程序。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1