diff --git a/APP_Framework/Applications/app_test/test_hash/README.md b/APP_Framework/Applications/app_test/test_hash/README.md index ca124bd1a..4534c3e78 100644 --- a/APP_Framework/Applications/app_test/test_hash/README.md +++ b/APP_Framework/Applications/app_test/test_hash/README.md @@ -1,4 +1,13 @@ -# 一、概要 +# 热身赛一级赛题1:基于cortex-m3-emulator实现哈希表并测试验证 + +## 1. 简介 +- 哈希表原则上支持各种类型的键值对,支持自定义哈希函数和复杂键。 +- 对于哈希映射函数的冲突利用一个键比较器补充解决,对于地址冲突使用链表解决。 +- 原则上设计的目标场景是非临时数据的存储,同时哈希表不负责键值对的内存管理(这是为了避免临时变量内存管理错误) +- 在使用hashmap时,键、值最好不要使用临时变量,临时变量在超出周期后会被自动回收,会造成未预期异常,hashmap不负责键、值的内存管理 +- 在选择指定的哈希函数后,不要使用这个哈希函数不支持的键类型,比如一个只支持英文的哈希函数在使用汉语作为键时会出现未定义异常 + +## 2. 数据结构设计说明 ## (一)哈希表主要设计有三个数据结构: 1. HashNode:存放数据的节点;哈希表不负责key、value的内存管理(避免内存管理错误); hash_code用于快速查找; ```c @@ -45,11 +54,8 @@ typedef struct Iterator |void* hashMapGet(HashMap* hash_map, const void* key)|获取数据,返回value地址| |bool hashMapRemove(HashMap* hash_map,void* key)|移除数据| -# 二、注意事项 -- 在使用hashmap时,键、值最好不要使用临时变量,临时变量在超出周期后会被自动回收,会造成未预期异常,hashmap不负责键、值的内存管理 -- 在选择指定的哈希函数后,不要使用这个哈希函数不支持的键类型,比如一个只支持英文的哈希函数在使用汉语作为键时会出现未定义异常 -# 三、测试流程 +## 3. 测试程序说明 ## (一)流程 1. 创建一个空的hashmap 2. 向其中添加一定的元素 @@ -221,7 +227,8 @@ void TestHash(void) PRIV_SHELL_CMD_FUNCTION(TestHash, a hash test sample, PRIV_SHELL_CMD_MAIN_ATTR); ``` -# 四、测试结果 + +## 4. 运行结果 1. 创建一个新的哈希表,添加三个元素并输出结果
![创建一个新的哈希表,添加三个元素并输出结果](images/1.png) 2. 再次添加三个元素并输出结果
diff --git a/APP_Framework/Applications/app_test/test_hash/test_hash.c b/APP_Framework/Applications/app_test/test_hash/test_hash.c index 8a16d9e82..42e9d13b2 100644 --- a/APP_Framework/Applications/app_test/test_hash/test_hash.c +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.c @@ -1,3 +1,22 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiUOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** +* @file: test_hash.c +* @brief: a test of hash map +* @version: 1.1 +* @author: chuyunfei +* @date: 2023/7/1 +*/ #include #include #include