适用于存储空间受限的设备的通讯录防重构建方法技术

技术编号:23099204 阅读:32 留言:0更新日期:2020-01-14 20:37
本发明专利技术提供适用于存储空间受限的设备的通讯录防重构建方法,其可以在有限的内存中高效率运行,且算法简单易懂、复杂度低,易于实现。本发明专利技术技术方案中,基于哈希表结构构建主表和从表,联系人姓名与其关联数据通过互相索引形成关联;在加入新的数据到主表、从表时就可以检测到重复,可以用于从不同的源头合并通讯录。加入通信录数据时,利用快速HASH算法计算1次哈希码,再用哈希码模上哈希表的基本容量,计算出数据地址索引的值,如果索引相同,再比较判断数据是否重复。

A method to prevent address book from rebuilding for devices with limited storage space

【技术实现步骤摘要】
适用于存储空间受限的设备的通讯录防重构建方法
本专利技术涉及计算机数据处理
,具体为适用于存储空间受限的设备的通讯录防重构建方法。
技术介绍
现有技术中,对于通讯录的处理,在数据存储时,大多是不做防重处理,而是在后续的计算的时候,对参与计算的通讯录数据做防重处理。但是,在基于如单片机等存储空间有限的设备上进行开发的时候,在存储的时候,就需要进行防重处理,但是现有的防重方法大多针对存储空间不受限的设备进行设计的,其对存储空间的使用方式,不适用于存储空间有限的设备,在单片机等存储空间有限的设备上应用的时候,会导致运行效率变差。
技术实现思路
为了解决现有的通讯录防重方法运行于存储空间有限的设备上会发生运行效率变差的问题,本专利技术提供适用于存储空间受限的设备的通讯录防重构建方法,其可以在有限的内存中高效率运行,且算法简单易懂,易于实现。本专利技术的技术方案是这样的:适用于存储空间受限的设备的通讯录防重构建方法,其特征在于,其包括以下步骤:S1:把所有的需要添加的通讯录数据读入设备的内存中;S2:根据所述通讯录数据中包含数据种类n_Class,确定需要建立通讯录哈希表的数量n_Directory;每一个所述通讯录哈希表中以其对应种类的数据作为关键码,所述关键码以外的数据作为关联数据、以关联数据地址的形式存储在该表中;即:n_Class等于n_Directory,且n_Directory、n_Class都为正整数;S3:构建n_Directory个所述通讯录哈希表;在每一个所述通讯录哈希表中,每一行的列元素包括:占用标志、数据域、链索引;所述占用标志的字段用来设置使用标志,表示该记录是否已经被使用;所述数据域的字段用来存放实际数据,所述实际数据包括:关键码数据字段、关联数据地址字段;所述关联数据地址字段存储了在另外的关联通讯录哈希表中的索引地址,该索引地址存储了与所述关键码设置了索引关系的其他种类的数据;所述关键码为联系人姓名的所述通讯录哈希表设置为主表,其他种类的所述通讯录哈希表设置为从表;在所述主表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:Num,其中Num为自然数,且Num≥(n_Class-1);所述主表中的所述关联数据地址字段中,保存了所述关键码以外的其他所有种类的关联数据的索引信息,其中同一种类的所述关联数据地址字段的数量大于等于1;在所述从表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:1;所述从表中的所述关联数据地址字段中,只保存所述主表的关键码的地址;所述链索引的字段用来支撑拉链法处理冲突,当多条信息需占用同一记录位置时,该字段用来记录下一条记录的索引;S4:初始化所述通讯录哈希表长度为N+N*y%;其中,N为哈希表的基本容量,N为正整数;y用于处理哈希映射冲突的空间预留率,y为正整数;当新增数据时,如果计算得到索引对应的数据与新增数据发生冲突,需要在基本容量N的后面顺序的挂接一个冲突链,用来放置发生冲突的联系人信息,此时就会使用到基本容量以外的N*y%的空间来构建冲突链;S5:初始化所有的n_Directory个所述通讯录哈希表的字段;将每个所述通讯录哈希表的所述占用标志字段设置为:未使用;将所有的所述链索引字段设置为:无效;将所有关键码对应的所述关联数据地址字段的使用状态都初始化为:无效;S6:获取步骤S1中读入所有的需要添加的所述通讯录数据,依次读取每一条通讯录数据,赋值给待处理通讯录数据DirectoryData;所述待处理通讯录数据DirectoryData包括:关键码数据KeyCode、关联数据LinkCode;其中,所述关键码数据KeyCode和所述关联数据LinkCode的数量关系为:1:n_Data,其中n_Data为自然数;根据所述待处理通讯录数据DirectoryData中关键码数据KeyCode的种类,其对应种类的通讯录哈希表作为待处理通讯录哈希表TargetDirectory;S7:添加所述待处理通讯录数据DirectoryData到所述待处理通讯录哈希表TargetDirectory中;具体包括以下步骤:a1:将所述关键码数据KeyCode赋值给待处理关键码TempKeyCode;使用哈希算法计算所述待处理关键码TempKeyCode的哈希码,假设得到哈希码的值为HASHCODE;a2:计算所述待处理关键码TempKeyCode的所述链索引;使用哈希码的值HASHCODE模上N,得到余数INDEX,INDEX即为所述链索引字段的值,具体如下:INDEX=HASHCODEmodN;a3:在所述待处理通讯录哈希表TargetDirectory中,检查INDEX处的行中对应的所述占用标志位;如果所述占用标志位的字段为:未使用,则表示其对应的所述数据域中的关键码数据字段没有被使用,则INDEX对应的行设置为待插入行元素,执行步骤a6;否则,则表示其对应的所述数据域中的关键码数据字段已经被使用,执行步骤a4;a4:取得所述数据域中的关键码数据字段中的数据,作为对比数据CompareCode与所述待处理关键码TempKeyCode进行比较;如果CompareCode与TempKeyCode相同,则表示所述待处理关键码TempKeyCode已经存在于哈希表中,不需要再次添加,本次针对待处理关键码TempKeyCode的添加操作结束;否则,表示所述待处理关键码TempKeyCode在哈希表中没有被存储过,不存在数据重复问题,执行步骤a5;a5:从所述待处理通讯录哈希表TargetDirectory的基本容量N后面的N*y%区域中顺序的搜索第一个数据域未被占用的行作设置为待插入行元素,挂接在所述冲突链的末尾,且把所述冲突链尾部最后一行的索引的值赋值给INDEX;a6:将所述待处理关键码TempKeyCode,存入所述待插入行元素中所述数据域中的关键码数据的字段中,其对应的所述链索引自动中存储INDEX的值;S8:针对所述待处理关键码TempKeyCode,在同一条所述待处理通讯录数据DirectoryData中找到对应的所述关联数据LinkCode,设置所述待处理关键码TempKeyCode与所述关联数据LinkCode的相互的索引关系:S9:重复步骤S6~S8,直至步骤S1中读入的所有的所述通讯录数据都处理完毕,结束本次构建操作。其进一步特征在于:步骤S8中,设置所述待处理关键码TempKeyCode与所述关联数据LinkCode的相互的索引关系,包括如下步骤:b1:在所述待处理通讯录数据DirectoryData中,确认所述待处理关键码TempKeyCode的所述关联数据LinkCode的数量n_Data;如果n_Data=0,则本文档来自技高网...

【技术保护点】
1.适用于存储空间受限的设备的通讯录防重构建方法,其特征在于,其包括以下步骤:/nS1:把所有的需要添加的通讯录数据读入设备的内存中;/nS2:根据所述通讯录数据中包含数据种类n_Class,确定需要建立通讯录哈希表的数量n_Directory;每一个所述通讯录哈希表中以其对应种类的数据作为关键码,所述关键码以外的数据作为关联数据、以关联数据地址的形式存储在该表中;/n即:n_Class等于n_Directory,且n_Directory、n_Class都为正整数;/nS3:构建n_Directory个所述通讯录哈希表;/n在每一个所述通讯录哈希表中,每一行的列元素包括:占用标志、数据域、链索引;/n所述占用标志的字段用来设置使用标志,表示该记录是否已经被使用;/n所述数据域的字段用来存放实际数据,所述实际数据包括:关键码数据字段、关联数据地址字段;/n所述关联数据地址字段存储了在另外的关联通讯录哈希表中的索引地址,该索引地址存储了与所述关键码设置了索引关系的其他种类的数据;/n所述关键码为联系人姓名的所述通讯录哈希表设置为主表,其他种类的所述通讯录哈希表设置为从表;/n在所述主表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:Num,其中Num为自然数,且Num≥(n_Class-1);所述主表中的所述关联数据地址字段中,保存了所述关键码以外的其他所有种类的关联数据的索引信息,其中同一种类的所述关联数据地址字段的数量大于等于1;/n在所述从表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:1;所述从表中的所述关联数据地址字段中,只保存所述主表的关键码的地址;/n所述链索引的字段用来支撑拉链法处理冲突,当多条信息需占用同一记录位置时,该字段用来记录下一条记录的索引;/nS4:初始化所述通讯录哈希表长度为N+N*y%;/n其中,N为哈希表的基本容量,N为正整数;/ny用于处理哈希映射冲突的空间预留率,y为正整数;当新增数据时,如果计算得到索引对应的数据与新增数据发生冲突,需要在基本容量N的后面顺序的挂接一个冲突链,用来放置发生冲突的联系人信息,此时就会使用到基本容量以外的N*y%的空间来构建冲突链;/nS5:初始化所有的n_Directory个所述通讯录哈希表的字段;/n将每个所述通讯录哈希表的所述占用标志字段设置为:未使用;/n将所有的所述链索引字段设置为:无效;/n将所有关键码对应的所述关联数据地址字段的使用状态都初始化为:无效;/nS6:获取步骤S1中读入所有的需要添加的所述通讯录数据,依次读取每一条通讯录数据,赋值给待处理通讯录数据DirectoryData;/n所述待处理通讯录数据DirectoryData包括:关键码数据KeyCode、关联数据LinkCode;其中,所述关键码数据KeyCode和所述关联数据LinkCode的数量关系为:1:n_Data,其中n_Data为自然数;/n根据所述待处理通讯录数据DirectoryData中关键码数据KeyCode的种类,其对应种类的通讯录哈希表作为待处理通讯录哈希表TargetDirectory;/nS7:添加所述待处理通讯录数据DirectoryData到所述待处理通讯录哈希表TargetDirectory中;/n具体包括以下步骤:/na1:将所述关键码数据KeyCode赋值给待处理关键码TempKeyCode;使用哈希算法计算所述待处理关键码TempKeyCode的哈希码,假设得到哈希码的值为HASHCODE;/na2:计算所述待处理关键码TempKeyCode的所述链索引;/n使用哈希码的值HASHCODE模上N,得到余数INDEX,INDEX即为所述链索引字段的值,具体如下:/nINDEX=HASHCODE mod N;/na3:在所述待处理通讯录哈希表TargetDirectory中,检查INDEX处的行中对应的所述占用标志位;/n如果所述占用标志位的字段为:未使用,则表示其对应的所述数据域中的关键码数据字段没有被使用,则INDEX对应的行设置为待插入行元素,执行步骤a6;/n否则,则表示其对应的所述数据域中的关键码数据字段已经被使用,执行步骤a4;/na4:取得所述数据域中的关键码数据字段中的数据,作为对比数据CompareCode与所述待处理关键码TempKeyCode进行比较;/n如果CompareCode与TempKeyCode相同,则表示所述待处理关键码TempKeyCode已经存在于哈希表中,不需要再次添加,本次针对待处理关键码TempKeyCode的添加操作结束;/n否则,表示所述待处理关键码TempKeyCode在哈希表中没有被存储过,不存在数据重复问题,执行步骤a5;/na5:从所述待处理通讯录哈希表TargetD...

【技术特征摘要】
1.适用于存储空间受限的设备的通讯录防重构建方法,其特征在于,其包括以下步骤:
S1:把所有的需要添加的通讯录数据读入设备的内存中;
S2:根据所述通讯录数据中包含数据种类n_Class,确定需要建立通讯录哈希表的数量n_Directory;每一个所述通讯录哈希表中以其对应种类的数据作为关键码,所述关键码以外的数据作为关联数据、以关联数据地址的形式存储在该表中;
即:n_Class等于n_Directory,且n_Directory、n_Class都为正整数;
S3:构建n_Directory个所述通讯录哈希表;
在每一个所述通讯录哈希表中,每一行的列元素包括:占用标志、数据域、链索引;
所述占用标志的字段用来设置使用标志,表示该记录是否已经被使用;
所述数据域的字段用来存放实际数据,所述实际数据包括:关键码数据字段、关联数据地址字段;
所述关联数据地址字段存储了在另外的关联通讯录哈希表中的索引地址,该索引地址存储了与所述关键码设置了索引关系的其他种类的数据;
所述关键码为联系人姓名的所述通讯录哈希表设置为主表,其他种类的所述通讯录哈希表设置为从表;
在所述主表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:Num,其中Num为自然数,且Num≥(n_Class-1);所述主表中的所述关联数据地址字段中,保存了所述关键码以外的其他所有种类的关联数据的索引信息,其中同一种类的所述关联数据地址字段的数量大于等于1;
在所述从表中,所述关键码数据字段和所述关联数据地址字段的数量关系为:1:1;所述从表中的所述关联数据地址字段中,只保存所述主表的关键码的地址;
所述链索引的字段用来支撑拉链法处理冲突,当多条信息需占用同一记录位置时,该字段用来记录下一条记录的索引;
S4:初始化所述通讯录哈希表长度为N+N*y%;
其中,N为哈希表的基本容量,N为正整数;
y用于处理哈希映射冲突的空间预留率,y为正整数;当新增数据时,如果计算得到索引对应的数据与新增数据发生冲突,需要在基本容量N的后面顺序的挂接一个冲突链,用来放置发生冲突的联系人信息,此时就会使用到基本容量以外的N*y%的空间来构建冲突链;
S5:初始化所有的n_Directory个所述通讯录哈希表的字段;
将每个所述通讯录哈希表的所述占用标志字段设置为:未使用;
将所有的所述链索引字段设置为:无效;
将所有关键码对应的所述关联数据地址字段的使用状态都初始化为:无效;
S6:获取步骤S1中读入所有的需要添加的所述通讯录数据,依次读取每一条通讯录数据,赋值给待处理通讯录数据DirectoryData;
所述待处理通讯录数据DirectoryData包括:关键码数据KeyCode、关联数据LinkCode;其中,所述关键码数据KeyCode和所述关联数据LinkCode的数量关系为:1:n_Data,其中n_Data为自然数;
根据所述待处理通讯录数据DirectoryData中关键码数据KeyCode的种类,其对应种类的通讯录哈希表作为待处理通讯录哈希表TargetDirectory;
S7:添加所述待处理通讯录数据DirectoryData到所述待处理通讯录哈希表TargetDirectory中;
具体包括以下步骤:
a1:将所述关键码数据KeyCode赋值给待处理关键码TempKeyCode;使用哈希算法计算所述待处理关键码TempKeyCode的哈希码,假设得到哈希码的值为HASHCODE;
a2:计算所述待处理关键码TempKeyCode的所述链索引;
使用哈希码的值HASHCODE模上N,得到余数INDEX,INDEX即为所述链索引字段的值,具体如下:
INDEX=HASHCODEmodN;
a3:在所述待处理通讯录哈希表TargetDirectory中,检查INDEX处的行中对应的所述占用标志位;
如果所述占用标志位的字段为:未使用,则表示其对应的所述数据域中的关键码数据字段没有被使用,则INDEX对应的行设置为待插入行元素,执行步骤a6;
否则,则表示其对应的所述数据域中的关键码数据字段已经被使用,执行步骤a4;
a4:取得所述数据域中的关键码数据字段中的数据,作为对比数据CompareCode与所述待处理关键码TempKeyCode进行比较;
如果CompareCode与TempKeyCode相同,则表示所述待处理关键码TempKeyCode已经存在于哈希表中,不需要再次添加,本次针对待处理关键码TempKeyCode的添加操作结束;
否则,表示所述待处理关键码TempKeyCode在哈希表中没有被存储过,不存在数据重复问题,执行步骤a5;
a5:从所述待处理通讯录哈希表TargetDirectory的基本容量N后面的N*y%区域中顺序的搜索第一个数据域未被占用的行作设置为待插入行元素,挂接在所述冲突链的末尾,且把所述冲突链尾部最后一行的索引的值赋值给INDEX;
a6:将所述待处理关键码TempKeyCode,存入所述待插入行元素中所述数据域中的关键码数据的字段中,其对应的所述链索引自动中存储INDEX的值;
S8:针对所述待处理关键码TempKeyCode,在同一条所述待处理通讯录数据DirectoryData中找到对应的所述关联数据LinkCode,设置所述待处理关键码TempKeyCode与所述关联数据LinkCode的相互的索引关系:
S9:重复步骤S6~S8,直至步骤S1中读入的所有的所述通讯录数据都处理完毕,结束本次构建操作。


2.根据权利要求1所述适用于存储空间受限的设备的通讯录防重构建方法,其特征在于:步骤S8中,设置所述待处理关键码TempKeyCode与所述关联数据LinkCode的相互的索引关系,包括如下步骤:
b1:在所述待处理通讯录数据DirectoryData中,确认所述待处理关键码TempKeyCode的所述关联数据LinkCode的数量n_Data;
如果n_Data=0,则代表所述关联数据LinkCode为空,不需要进行关联索引操作,本次关联索引的操作结束;
否则,执行步骤b2;
b2:确认所述待处理关键码...

【专利技术属性】
技术研发人员:李立亚吴丽闾立新
申请(专利权)人:无锡科技职业学院
类型:发明
国别省市:江苏;32

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

1