[发明专利]适用于存储空间受限的设备的通讯录防重构建方法有效
申请号: | 201910906677.4 | 申请日: | 2019-09-24 |
公开(公告)号: | CN110688380B | 公开(公告)日: | 2023-02-03 |
发明(设计)人: | 李立亚;吴丽;闾立新 | 申请(专利权)人: | 无锡科技职业学院 |
主分类号: | G06F16/22 | 分类号: | G06F16/22 |
代理公司: | 无锡盛阳专利商标事务所(普通合伙) 32227 | 代理人: | 顾吉云;黄莹 |
地址: | 214028 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 适用于 存储空间 受限 设备 通讯录 构建 方法 | ||
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=HASHCODE mod N;
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中读入的所有的所述通讯录数据都处理完毕,结束本次构建操作。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡科技职业学院,未经无锡科技职业学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910906677.4/1.html,转载请声明来源钻瓜专利网。