From a0cf906b69605c6d0c203b913eca0e183f260a8a Mon Sep 17 00:00:00 2001 From: zjh <1260248908@qq.com> Date: Thu, 22 Jun 2023 11:49:34 +0800 Subject: [PATCH 1/5] add:test_hash.c --- APP_Framework/Applications/app_test/Kconfig | 4 +++ APP_Framework/Applications/app_test/Makefile | 4 +++ APP_Framework/Applications/app_test/readme.md | 0 .../Applications/app_test/test_hash.c | 31 +++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 APP_Framework/Applications/app_test/readme.md create mode 100644 APP_Framework/Applications/app_test/test_hash.c diff --git a/APP_Framework/Applications/app_test/Kconfig b/APP_Framework/Applications/app_test/Kconfig index 45df5f5d5..1298d10b5 100644 --- a/APP_Framework/Applications/app_test/Kconfig +++ b/APP_Framework/Applications/app_test/Kconfig @@ -239,6 +239,10 @@ menu "test app" menuconfig USER_TEST_TIMER bool "Config test soft timer" default n + + menuconfig USER_TEST_HASH + bool "Config test hash" + default n endif endmenu diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 1cf919846..9e42f459c 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -101,5 +101,9 @@ ifeq ($(CONFIG_ADD_XIZI_FETURES),y) SRC_FILES += test_timer.c endif + ifeq ($(CONFIG_USER_TEST_HASH),y) + SRC_FILES += test_hash.c + endif + include $(KERNEL_ROOT)/compiler.mk endif diff --git a/APP_Framework/Applications/app_test/readme.md b/APP_Framework/Applications/app_test/readme.md new file mode 100644 index 000000000..e69de29bb diff --git a/APP_Framework/Applications/app_test/test_hash.c b/APP_Framework/Applications/app_test/test_hash.c new file mode 100644 index 000000000..7ecccb162 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_hash.c @@ -0,0 +1,31 @@ +/* +* 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 application of adc function +* @version: 1.1 +* @author: AIIT XUOS Lab +* @date: 2023/6/22 +*/ + +#include +#include +#include +#ifdef ADD_XIZI_FETURES + +void TestHash(void) +{ + printf("hallo!Hash.\n"); +} +PRIV_SHELL_CMD_FUNCTION(TestHash, a hash test sample, PRIV_SHELL_CMD_MAIN_ATTR); +#endif \ No newline at end of file From b59166b198605f84c65d23eed06e9130a950fe5e Mon Sep 17 00:00:00 2001 From: zjh <1260248908@qq.com> Date: Mon, 26 Jun 2023 18:33:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?add:=E5=93=88=E5=B8=8C=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Applications/app_test/test_hash.c | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/APP_Framework/Applications/app_test/test_hash.c b/APP_Framework/Applications/app_test/test_hash.c index 7ecccb162..3979bb4b6 100644 --- a/APP_Framework/Applications/app_test/test_hash.c +++ b/APP_Framework/Applications/app_test/test_hash.c @@ -21,11 +21,48 @@ #include #include #include +#include #ifdef ADD_XIZI_FETURES +int testa[4]; +int i = 0; -void TestHash(void) +void TestHash(int argc, char *argv[]) { - printf("hallo!Hash.\n"); + if (argc > 1) + { + // 对哈希表的一些操作 + for (int arg = 0; arg < argc; arg ++) + { + // printf("the commend is %s.\n",argv[arg]); + if (strcmp(argv[arg],"--insert") == 0) + { + testa[i] = atoi(argv[arg + 1]); + i++; + for (int j = 0; j < 4; j++) + printf("testa[%d]:%d\n",j,testa[j]); + printf("insert hash table,insert element is %s.\n",argv[arg + 1]); + } + if (strcmp(argv[arg],"--delete") == 0) + { + // TODO:实现hash的删除操作 + printf("delete index is %s.\n",argv[arg + 1]); + } + if (strcmp(argv[arg],"--search") == 0) + { + // TODO:实现hash的查找操作 + printf("search hash table."); + } + if (strcmp(argv[arg],"--update") == 0) + { + // TODO:实现hash的修改操作 + printf("update index is %s.\n",argv[arg + 1]); + } + } + } + else + { + printf("nothing to do.\n"); + } } PRIV_SHELL_CMD_FUNCTION(TestHash, a hash test sample, PRIV_SHELL_CMD_MAIN_ATTR); #endif \ No newline at end of file From 361054aa9041513b934190825cdbbe97accb19a2 Mon Sep 17 00:00:00 2001 From: zjh <1260248908@qq.com> Date: Tue, 27 Jun 2023 17:05:26 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0:=E5=93=88=E5=B8=8C?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E6=8F=92=E5=85=A5=E3=80=81=E9=93=BE=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E6=B3=95=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E6=9F=A5=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Applications/app_test/test_hash.c | 117 ++++++++++++++++-- 1 file changed, 106 insertions(+), 11 deletions(-) diff --git a/APP_Framework/Applications/app_test/test_hash.c b/APP_Framework/Applications/app_test/test_hash.c index 3979bb4b6..45f4d35b5 100644 --- a/APP_Framework/Applications/app_test/test_hash.c +++ b/APP_Framework/Applications/app_test/test_hash.c @@ -23,8 +23,99 @@ #include #include #ifdef ADD_XIZI_FETURES -int testa[4]; -int i = 0; +// 初始化哈希表,一共有10个元素,其值为0表示为空 +struct hash_node{ + int val; + struct hash_node *next; +}; +typedef struct hash_node hash_list; + +// 创建哈希表 +hash_list* hash_table[10]; +void InitHash() +{ + // 起到初始化作用并且起到清空作用 + for (int i = 0; i < 10;i ++) + hash_table[i] = NULL; +} +// 哈希函数,返回在哈希表中的下标 +int ComputeHash(int value) +{ + return value % 10; +} +// 根据key寻找元素在哈希表中的位置,并且使用链地址法解决哈希冲突 +void InsertHash(int key, int value) +{ + hash_list *node = NULL; + node = (hash_list*)malloc(sizeof(hash_list)); + // 没有空间可以分配了 + if (node == NULL) + { + printf("malloc faild!\n"); + return ; + } + memset(node, 0, sizeof(hash_list)); + node->val = value; + node->next = NULL; + if (hash_table[key] == NULL) + { + printf("Good!No conflict.\n"); + hash_table[key] = node; + } + else + { + printf("In the event of a conflict, the chain-address method is used.\n"); + hash_list* temp = hash_table[key]; + while (temp->next != NULL) + temp = temp->next; + temp->next = node; + } +} +// 根据value寻找在哈希表中的位置,返回值为在取模后的第几个 +int SearchHash(int value) +{ + int index = ComputeHash(value); + int count = 0; + hash_list* temp = hash_table[index]; + // 对应的index里面没有值 + if (temp == NULL) + { + return -1; + } + else + { + while(temp != NULL) + { + if (temp->val == value) + return count; + temp = temp->next; + count ++ ; + } + return -1; + } +} +//删除哈希表中某个元素 +void DeleteHash(int value) +{ + printf("delete.\n"); +} + +//打印哈希表 +void PrintHash() +{ + int count = 0; + for (int i = 0; i < 10;i ++) + { + hash_list* temp = hash_table[i]; + while(temp != NULL) + { + printf("hash_table[%d][%d]:%d\n",i, count, temp->val); + count ++ ; + temp = temp -> next; + } + count = 0; + } +} void TestHash(int argc, char *argv[]) { @@ -36,10 +127,7 @@ void TestHash(int argc, char *argv[]) // printf("the commend is %s.\n",argv[arg]); if (strcmp(argv[arg],"--insert") == 0) { - testa[i] = atoi(argv[arg + 1]); - i++; - for (int j = 0; j < 4; j++) - printf("testa[%d]:%d\n",j,testa[j]); + InsertHash(ComputeHash(atoi(argv[arg + 1])), atoi(argv[arg + 1])); printf("insert hash table,insert element is %s.\n",argv[arg + 1]); } if (strcmp(argv[arg],"--delete") == 0) @@ -49,13 +137,20 @@ void TestHash(int argc, char *argv[]) } if (strcmp(argv[arg],"--search") == 0) { - // TODO:实现hash的查找操作 - printf("search hash table."); + int col = SearchHash(atoi(argv[arg + 1])); + if (col == -1) + printf("No corresponding value was found in the hash table.\n"); + else + printf("the value in hash_table[%d][%d]",ComputeHash(atoi(argv[arg + 1])),col); } - if (strcmp(argv[arg],"--update") == 0) + if (strcmp(argv[arg],"--print") == 0) { - // TODO:实现hash的修改操作 - printf("update index is %s.\n",argv[arg + 1]); + PrintHash(); + } + if (strcmp(argv[arg],"--clean") == 0) + { + InitHash(); + printf("The hash table is emptied.\n"); } } } From c46a1bd412bf53b6ed1bc1e56bfd598826ac388b Mon Sep 17 00:00:00 2001 From: mashenglong Date: Tue, 27 Jun 2023 19:38:38 -0700 Subject: [PATCH 4/5] add delete func --- APP_Framework/Applications/app_test/Makefile | 2 +- .../app_test/{ => test_hash}/test_hash.c | 64 +++++++++++++++---- 2 files changed, 52 insertions(+), 14 deletions(-) rename APP_Framework/Applications/app_test/{ => test_hash}/test_hash.c (76%) diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 9e42f459c..c588f9203 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -102,7 +102,7 @@ ifeq ($(CONFIG_ADD_XIZI_FETURES),y) endif ifeq ($(CONFIG_USER_TEST_HASH),y) - SRC_FILES += test_hash.c + SRC_FILES += test_hash/test_hash.c endif include $(KERNEL_ROOT)/compiler.mk diff --git a/APP_Framework/Applications/app_test/test_hash.c b/APP_Framework/Applications/app_test/test_hash/test_hash.c similarity index 76% rename from APP_Framework/Applications/app_test/test_hash.c rename to APP_Framework/Applications/app_test/test_hash/test_hash.c index 45f4d35b5..6207db80e 100644 --- a/APP_Framework/Applications/app_test/test_hash.c +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.c @@ -12,42 +12,47 @@ /** * @file: test_hash.c -* @brief: a application of adc function +* @brief: a application of HashTable function * @version: 1.1 -* @author: AIIT XUOS Lab +* @author: NWPUWSN * @date: 2023/6/22 */ #include #include -#include #include +#include #ifdef ADD_XIZI_FETURES +#define HashTableSize 10 + // 初始化哈希表,一共有10个元素,其值为0表示为空 -struct hash_node{ +typedef struct HashNode{ int val; - struct hash_node *next; -}; -typedef struct hash_node hash_list; + struct HashNode *next; +}hash_list; + // 创建哈希表 -hash_list* hash_table[10]; + hash_list* hash_table[HashTableSize]; void InitHash() { // 起到初始化作用并且起到清空作用 - for (int i = 0; i < 10;i ++) + for (int i = 0; i < HashTableSize;i ++) hash_table[i] = NULL; } + // 哈希函数,返回在哈希表中的下标 int ComputeHash(int value) { return value % 10; } + // 根据key寻找元素在哈希表中的位置,并且使用链地址法解决哈希冲突 void InsertHash(int key, int value) { hash_list *node = NULL; node = (hash_list*)malloc(sizeof(hash_list)); + // 没有空间可以分配了 if (node == NULL) { @@ -71,12 +76,14 @@ void InsertHash(int key, int value) temp->next = node; } } + // 根据value寻找在哈希表中的位置,返回值为在取模后的第几个 int SearchHash(int value) { int index = ComputeHash(value); int count = 0; hash_list* temp = hash_table[index]; + // 对应的index里面没有值 if (temp == NULL) { @@ -94,10 +101,41 @@ int SearchHash(int value) return -1; } } + //删除哈希表中某个元素 void DeleteHash(int value) { - printf("delete.\n"); + int index = ComputeHash(value); + hash_list* temp = hash_table[index]; + hash_list* prenode = NULL; + + // 对应的index里面没有值 + if (temp == NULL) + { + printf("No corresponding value was found in the hash table.\n"); + } + else + { + while(temp != NULL) + { + if (temp->val == value) + { + if (prenode == NULL) + { + hash_table[index] = temp->next; + } + else + { + prenode->next = temp->next; + } + free(temp); + printf("Delete the corresponding value in the hash table.\n"); + return ; + } + prenode = temp; + temp = temp->next; + } + } } //打印哈希表 @@ -124,7 +162,6 @@ void TestHash(int argc, char *argv[]) // 对哈希表的一些操作 for (int arg = 0; arg < argc; arg ++) { - // printf("the commend is %s.\n",argv[arg]); if (strcmp(argv[arg],"--insert") == 0) { InsertHash(ComputeHash(atoi(argv[arg + 1])), atoi(argv[arg + 1])); @@ -132,8 +169,9 @@ void TestHash(int argc, char *argv[]) } if (strcmp(argv[arg],"--delete") == 0) { - // TODO:实现hash的删除操作 - printf("delete index is %s.\n",argv[arg + 1]); + printf("delete index is %d.\n",ComputeHash(atoi(argv[arg + 1]))); + DeleteHash(atoi(argv[arg + 1])); + } if (strcmp(argv[arg],"--search") == 0) { From aa9d27ae68756c3705dee7e0508070186d4f5d3d Mon Sep 17 00:00:00 2001 From: mashenglong Date: Fri, 30 Jun 2023 03:17:55 -0700 Subject: [PATCH 5/5] =?UTF-8?q?=E5=AE=8C=E6=88=90test.h=E5=92=8CReadMe?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Applications/app_test/test_hash/README.md | 52 ++++++++++++++++++ .../app_test/test_hash/image-1.png | Bin 0 -> 12790 bytes .../app_test/test_hash/image-2.png | Bin 0 -> 10507 bytes .../app_test/test_hash/image-3.png | Bin 0 -> 13120 bytes .../app_test/test_hash/image-4.png | Bin 0 -> 11837 bytes .../app_test/test_hash/image-5.png | Bin 0 -> 10856 bytes .../app_test/test_hash/image-6.png | Bin 0 -> 7892 bytes .../app_test/test_hash/image-7.png | Bin 0 -> 13427 bytes .../Applications/app_test/test_hash/image.png | Bin 0 -> 10904 bytes .../app_test/test_hash/test_hash.c | 8 +-- .../app_test/test_hash/test_hash.h | 37 +++++++++++++ 11 files changed, 91 insertions(+), 6 deletions(-) create mode 100755 APP_Framework/Applications/app_test/test_hash/README.md create mode 100644 APP_Framework/Applications/app_test/test_hash/image-1.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-2.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-3.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-4.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-5.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-6.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image-7.png create mode 100644 APP_Framework/Applications/app_test/test_hash/image.png create mode 100644 APP_Framework/Applications/app_test/test_hash/test_hash.h diff --git a/APP_Framework/Applications/app_test/test_hash/README.md b/APP_Framework/Applications/app_test/test_hash/README.md new file mode 100755 index 000000000..23d7754c7 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_hash/README.md @@ -0,0 +1,52 @@ +# ##**基于cortex-m3-emulator实现哈希表并测试验证**## + +## 1. 简介 + +基于矽璓模拟器cortex-m3-emulator,实现哈希表,并支持链地址法解决哈希冲突,编写测试程序进行验证 + +## 2. 数据结构设计说明 +``` +//定义哈希表的节点 +typedef struct HashNode{ + int val; + struct HashNode *next; +}hash_list; + +``` +``` +//定义哈希表的大小 +#define HashTableSize 10 +// 创建哈希表 + hash_list* hash_table[HashTableSize]; +``` +``` +//函数定义说明 +void InitHash();//创建哈希表 +int ComputeHash(int value);//哈希函数,返回在哈希表中的下标 +void InsertHash(int key, int value);//根据key寻找元素在哈希表中的位置,并且使用链地址法解决哈希冲突 +void DeleteHash(int key);//删除哈希表中某个元素 +int SearchHash(int key);//根据value寻找在哈希表中的位置,返回值为在取模后的第几个 +void PrintHash();//打印哈希表 +void TestHash(int argc, char *argv[]);//测试程序,函数参数为对哈希表的操作以及数字 +``` +## 3. 测试程序说明 +测试程序为TestHash,设置有有参函数,参数设置为字符串数组,可输入包括 insert、delete、search、print和clean命令,并可输入哈希表操作数字,根据输入参数完成哈希表的插入、删除、查找、输出和销毁操作,通过atoi()函数将字符数字转为int类型 + + +## 4. 运行结果(##需结合运行测试截图按步骤说明##) +哈希表插入数字9 +![哈希表插入数字9](image.png) +哈希表插入数字99 +![哈希表插入数字99](image-1.png) +哈希表插入6 +![哈希表插入6](image-2.png) +输出哈希表 +![输出哈希表](image-3.png) +删除元素9 +![删除元素9](image-4.png) +查找元素99在哈希表中的位置 +![查找元素99在哈希表中的位置](image-6.png) +输出删除元素9后的哈希表 +![输出删除元素9后的哈希表](image-5.png) +销毁哈希表并输出 +![销毁哈希表](image-7.png) diff --git a/APP_Framework/Applications/app_test/test_hash/image-1.png b/APP_Framework/Applications/app_test/test_hash/image-1.png new file mode 100644 index 0000000000000000000000000000000000000000..27d907f6d87649019e4f57f019ebfa609b0eddf9 GIT binary patch literal 12790 zcma)@byQp17Vc?jp|nVGmlk&`ZWW|>fws6?aSskHv{2j$8V<$U;!YqqA-ES!2yVeW z=%eSf_n!OiJ#W1AM@Gij$!>OKYr2A<+eSxpR#J9Rhj-`vBx zc~#;wq{P5rz)+NZ_S!3B3*qZGaC8mZgRM?mt&|0~FU2m!J}!uDVjlwvxc?!G{Rp=7 z3jIAG&YUwz2`49mkv5jbt;fc!rnAr9ejp@uYI8_!!sGHPr9Go&Pzaa}I+^M3pYSo> zIYIfK8W?8*PtFhcH@sd~Gd}*+Tq7iwld#^KQmh7? zeYxhLJIncZ8SNnD`=J^^=M9a$=l)b{txmtXq{%?AR2|&QHWT(6V~ldu%zI${>Bn34jK2E{H_;v%(ILD5^i6yB9`Q&MP(o>qnb( z?;1EdG6C6UFQfvb$vTRze>C|MIo0-Lg#Xn$l8Wa2=~hd1o$j^J%eA3X(tO8epJxhn z@RR#jGPsM~922t)R{4GX^KFR1nry2D@c?8BU=IfUK76*glOi$|L&QA2yFOpcr7IXo zX4%h587_G)G^54KLgaQmP3dVKZ{;0TiF&b9$>oCQB-E4X>N23UjmL z-~DP3r8F!38eBkAtL&NSx(k~ldhIVIr{4;L)A_li z$97PIi4N)aBpcIJ8v@&!17AP}oy=VA+I%&9aS)T~4e*`(^UlUq0Na*%d#;t3ghgK> z|0tP>m&hNBti}Q!y?SryaTrhSNoLgV5Dk@XZj8mQZ_fo6Eyg-T=?DnOMPH7y8;<6O|L4Vd%uO53w_K1 zbH#I_qr2jEdoEl)FMB7DIi%bQMS@lJ&8yo*Ud!LJ(+4n~k!;^7IGAj80&GvI;`{j7 z0hMxjM)CFn@p+(hyeE}F(DK)&x<8dfkjkrwzz?SJ-i*ce2pM?%hbK#fLO{zBEqkKv zcvP)|I#gzv9jh-Anp~amEua{k_e{Mhbv&_H%7>p5et)u@1;jwzqCzR?a7!M{QnfQm zWaZysor6!5We@GI#O=JwnRE@^*89}SUAVZ6r<(qz)pE+F1O#-Q2OS5z7OPGk6fQ8n zDBr?$VHI$(J9{hzx@X$+J;x%2UKBfZy@B&6M9pGyH1yQ*rIT=H?!v;G=$A7XB@?{GNrd$$K>S-F`zQ%NYu{gvpBlZ^~9CS@sKyLQsA5`co<8#($$9B%~ z{jL3bzF{})FFu-iGt;E8iPKBDXTk?HP+BDCOW)S!v>;jBR-nrRY@9%@H^c`hnk0u- z0}nw$(H}#NOdTUh-TXaAe1tu=mIm33f`}Xe@x<|UW!HQjBJ&MfRp4eU=#*SVn1J;I zf!$x*YGVFb)|WZ}WjiaY_8wXrC8pKL96&%Slr<;dH#1TYC|84P3!Oych>0{l(x?-H ze+*nrJ{YeZUw(R1SXn~rH;!+0 zNC`#8P}^q``E1F)*LMJU9rG*zqnVy)2R!hl>Al)vq(ggCNRbsUqot^I&bI7V`ltGa ztL)yq8+@0wQ}3JdkV+hI|v4FzJ$tH&^~@QpZy>( za&lR1F`D=*GFLL$A++3-1w=Ex#?7T)ABM{yIugnPuEGU$OTZm~{)SUqb;wF=*tqO*YGiG0u+diOdIo>6Df=l0%)9;@`P8@@fMP}B5 zR0nLNHwyp{sT_v#&h4HUNyTl!D)+wXe3Fplj@7v%(r!Q*%A)eu0`9<(zSw<%+up)g zl#3~U_*gnH@EiIL&@K~ejAJ`Y{VBr?tMLVRej{Z0>D?Z^E{}u&{|sbu)aVDdREiY! z2E6H^{cX`J3JO;!esSbydav^j9%J71n1dcWvY~_4`+i7cinFovBIykXLSf|$q&7Fn zUz8#f{vHvtH!+e|l+hf!YV$|^$P7vY zc$fXTay#=D=1ra9IbC3)yAd!l&lGcZGTYNLlew2cy-6Wg%?A$1eKCcTB3KIQL^R8O z08kdWXkUQu#s!@Njm%PXn2QXbv_SwW-O(miyn)|UeAB-T`td2HSiH}98_64W%kBw2(yr*v!t=@ z)rEf@omb@OC^7p{V<)*KwaC;E0O~8rYG(YSA6o@9lX^01*wc9{J=4=-*a9hd!ej9+ z;ixa*3wOYvjNBl-&z?^gQwZc#s1*mSAlwY@VlqY2J#HV^x#QX@#G`%9?K$GI;tBCT z$x@*cj&1qM#AQjBhlI2yb{j^ld%0Gc^IePfwcT(kwPeiS z;mz?bkfm-@*TQm&Ux}n3pnSXtq>AZpn4M1I+Fq8R|9n%1 zPsFLSBqBgDsMlRm&6HJ4JaKLf#f=%O=2K7G-b<{GsYdEfcd*tlI&p9`uzq(cH$(J! z_&LHo1(8sX!$|>|Te5Vs%#Zv_Z*=v0=mw#<&QCHr@_em*nn_?QOimm`13`JiI_g}e z8%sPY-o6~SW|8}&I~q(DzOV9qyyKGxEf3}+Y9ZqG8Dvpj|G##vveidjP|s4i#DHbfVi}BdW(wvX;j8{yBiIO<<1s3=p*# zXTaAll!_G zpY`Eqc-jbcqf&M|Rg|K(`?`$JOmb<=Ppam*&_dxB4XFb7RhII{&w?g8hOX`gb5j!- zG2_gs1+VI99M2KGz4S;rFyn!;ZRkfFmjcX8C<8#@S$7u${G@G~6Fe(Z)*9wN zL^O~``9`iR_ZZbBJR6y33zDYpAU{~-Rb^Y|9|%mxf%(LurLgAF!_*K-Z*eDY^42s! za>u0Moo#gwNsxYYQWp;6y{{5!+R|Aaf|RhZ6#fj$<}K!_KA7qeq8l}JGeoT9-%rvz zBBiA}V4IKJ(K<%ykl3L`UHsos11v=0A^ClF8Xej;x5w7*>EDa#Cb19yZ0Nlm#D1fN zJp>IYHPEW#;#;lyzYe&^@mX3%HZ9Q5zEz0Ea7+9|=oNRk^hn5xC4My4bo(2lGYxy$xN>n(Z;zlc8hRzGoWtTiLUVe_{K5^V++#8YI6$T3jI0 z-^D(_j-@V=2#(w`oZT6HN`ONQrgW^f+kG3cD)0JDsW{F4@5J`y|ew0+=- ze->se{G`#O!Zhn&FO%u40TiQGN0*S~b``UU5B^|Y)k}aF~|`xF{jl6)zNL@ElIw#%d$CtltWp&A$rQRT}jfQK>g-Ad}?K&WW!jNIgkx zk3v|G^MTqjP6Bs?)*$G3eb`nls2X4H=PYHc8wB-s?uj|=wb>FV)lhd=o#5TRkl$5U zKz7iBX&p(He009Um8;FlFRpAbIBTyO9Lx8&eTm9_<6AVNwZ3^b+K;JSoHz~hLj0?;FS#1F!IXGrbO5tUnq;|{h%KSW1 zfYpMST1|FW+l<1lM$PnTdU!N#vGafF`{?(7>U-cOgPWc3$Gg~`gnlfM)z7rnko6aN zFy;RV3baz#aq3dc(}Ddfl_<*nEVz_M_L;Bpy|ByhWDv_DzhDS{q7 zNDSBaNIG21j|Cd#8q?VM8JS$Z;q_CaS9&AwvmBOs@NZw7Eq93;TO)aC%vFAidOaA$ z!8%ZIRZ6CILFk>;tZGLBQv8XK@xWP$ARz$;^!w<_XeyU9Bt3Stl}mRz{hZgSOO~>| z;TEk7I{usfc*WUEidO5K$$-bP?*rcOmRJ)XSSA+9g_f?Atv#i9WX(85cFw9iaZRr( zMa!8$4?HX7f8_N*Uv01krE8B|S)7mYBDM!DXG{a1lwqjNoZTyBjp*X<(3$$zM4*uyjW_iyP%9FZOOae zKQlhJ<8kW_b9y1n$_kg3A`6oANBK2Z(*~%2Cui33dG04FUc99!V=Ik~)YVgWb0v^N zUe*(d0I|(5!lF|Pir(nX1gpe_Ss=EcMcbW`FBhj~`pMmTT!~w|IF(kCVGalyt0puv zw%U~{A+mujU~UcUrE-W8hfT#b%@8LGF0`72gA+S>O@t8-rg;nc8*pmjKWDeUBjNhr zvl~JX<1ZFWkR{!}py9OFeM@B9b~u%eU^yBlOWDFU@$uMSudOKN)PC&QLPBw!cXI1w zU;u7^AMhW@D8r|TSp`Cx%EYupB2|)eI8$<76HDbNV3MFPXz!0+w2n{ ztQ;M$Ox+=KbBo)l=R0bg&u|fjspwl>$qb17o>ctnhVMr&*#e8EpJSCtLGIwShwi^~ zqhEn`BuqRii5O9wY|hHnRJ53?d?`-S{^4sOl20$Ew# zx((evDpA?!z3xim<(c8d>W0Y^MG1M8$jscA~`+u41rbR1I9 zURq^h;S1)@J2b6W_PS0vrdgedV#ts%0dmVSr*+;UJ%3BhsWH#Qeo}g4r=S4llkhCYN!pPJqvOOw8u#1nFF zzH0nT(E)T%Gq)g$wd6}er^3(Bnu}3_ntQ)BW*VJG0oR(Q#;n9Cxm`p0FUW{}ul#o= z;=v$8e10JyS+R8{sv{SQ&pEr7Qurdar>`njRo69#Z zFAACyHnXN^rK4|J!#xA)+O8K=U|Oxq`W`?*n?WH^aI|!$HL4!#fw(jfW)2fW?S6MK z^th}W8M^jt+R~R^O#vQJxLwk%CiIh&n*{9DjX{7^JTP6z)^r2nX3*NOG%2`x9MaxvgdKFw17jO`1vvPIcXHd(%CcW)`9v(z}5?F*|r zEFC%SlZ{T78nvtdB?>*z@vp#BZ+ZoM|560xUCyDf(yXwH#2<6};Zi?NAucYhy)`W) zD%NNYPKXw4UfgQ9w%9NGa7Uiml>LD1as>~tX}q;1Z2!JL+0*YXYT~Hq4e_RTm1BkR zDkleIX@=VsPyC6rcgJFvc%NNU3Ek40@tCA8Ma(s{U7VXloq!l+GUp3x4mt^8TwG-% z0&YRA&N~SQNnp=MFVc&wkBJ@je6QGju7)BeUa;^lK}&Je%F=ljA2yH{9&wh2jhH!fEC zlELx@Z1@N_V>$=P_I8BV@8?^Tb; zz60FS5ha8fzB{q!+)g<;c;k7HvH`5zDgHayX*ZUtuu37K=a<6@ZWXvD@sE~9{4hX5 zB$mj)ShQ4G5Ya09QYqt=DaB}fX3_e&y$t$x7H+$_8V3UH2Cn{_rId~CQDU&2qWO~C zZ@Mp4%I|U@f$MXmT^}vu?qVICD!^h{Oxa`JBz7%v@?xGg9Q?3JFjI&e95fI}YqTRe zLnKP;lp|ZskyvBj=L^%Pb4X2n(4M_l{;J-_T3pJ}bSBaJV~5S)p9yS(tOqze6Pli` z6SQ=RMXzYu`F0y?v3?L=vq-Z{q?2TJ`Me_-?#{Cj^I~|E%*|AnoMSsIby3IGGgcgS z*+G=Aw%wLkTR=2-$t`n9C-=Mt+wwb*)dp=KOfP%_v^+S{nUXm04Z`+oDI3Ha0X9KL zf@^M%X}w%@^TQd<_p~07FcuUyzun8oJ?7h2G8!1mkYte%d%Twc;CXb|(TPXA%=I!;OD zCen=vxShFvsY#Qb0QvS(^g*(`amIsxptth0^$DK~RI73Fr$|q?z>@iD& z_4X>&5f4VR(#Kfvi$80>Y8i=@J{G}UY}*Mjg?CsxhrRqz_r^C8h+LB|kheZ9hCKnW zgPH&O__eE&a~Rypo_QzNc9>S>kh)`ksN=aG>dUVrO|hZ^$)A{Yb6hXgI2SX9C#O>; z{>I*}Bh4V?pC|dx=4hwnOvzl=JktO{7PLkMGU%GtScYh1OdDbyIF|a<%1izxWUHhi z`2(Q%$U@1Nn^af0NMKA>%w2v|V6{`$M}>bmTS5M_yScN<2peS4ZJvRs&CXg6g#XEx z0HBd1^2>zKk<*tsLtVK)2!Yr zxfWTk(as52w6d_UH}h378?Xv~ppd2MSt03+qukWkGtAna z9vT|hn-QyOFG|>I9A;WHCI0D_1Ba38>zmLNfp6SzI{bm}`G9-{_py3%$+b+H&kBdd zUUqXLfFVac)Nf1{jR5a7Sr*YQvG#oyU>{x9}rh8;&%1Vm2O zq^j;|Y`&a^(r3F-9B=rO^wL(QHl@Ggyf*1Sy3vyuB?OSpj#!2uBG1Z4?qoYnI>BF} zJ23NCp2%FEd8~cpf1(wmd^wTw5b}w;z_VQ10*kRJqe~qdKvZW<=Om+hynvs3vA{1# zu0}<#Wruk%VFFSTUQD%Ct~~EGRnen(-cjSx7vPV}dF3d(s%^JyP-xZjYXyz=U(T~y zsZc;+x0(s%gg_fIK`~e|NpAGE>N*3Tv4h!HG^v{3Pq{bi;mPxF2P|pW76c5QmzFF> z&i7*aUn%V9F23|yBVFm#xuv~r(GPIT++8Sj?{PduaByjq zvJpR1FvM!Zh21y;>qqqdrQnsUv|zFeLNjId8#XqGy7#M#ly1YeIlwCQGpx@*)W%Px z7!SLo6+!`3e%02m=K6dDdX!b4zKZ}%!;OO%HXo0{zg}Zt5SIU}1(=detz1d}l~PL( z7`OzvGJUiZe6I6mLwX}AOsaOcEv>KHzuQD{-d%5&R5#}1KI}WU1;$Lf@(`aNTa56D zsga5#z+i9hDCFbOMRkD0{N7s=atXJa0OO#XbwxTQ@Rihjm30YD6Y?K`#{=)S{tJUL zp-KNmjY0GeD&(C^r$$sQFk0iJpWp<>tZ+lnHsfH5N_@hq-JwtWgbi>TxXbOM^h8+2 z7N0P&zX;-OlghCaGG&l-MmWnUpQ~4w3H8Of!IK&Dta>?})J@FhapA&b#>%`g1V2;g zW=s_^%Al1p7Od%#Z7eW~>72(T<*!iQam&0jvh~LgQgU)~14BdJt9p=< z!@o_NC3qiJG;Mo0I_KWxB}E{&VNVbGfo>B(hJDp>z!3H1kGC%Bez$K=Nu$jSLkg*r zF-h6%S`7r2uqvRmD>~tysG6iHmf ^n;e+@<$%xi9;U`6D47QUZeDMLM|we~#;> zbcbHu{TQ_EEn4QoLGwC@AN?D{c?+wnE%>I`C2P?OYp8iX=p&rIY`I9Z9b*$a?$(eHs?yH52FMx3NUn7RK+ zPICZS0?crx@oF3U9!cA&0WMc*^*qF`>>YaJb*Wxl&(ZaZ!tKm= z8qy(@y#8JEV8Dk|cFgzs{`IPqiWA?5N;>F30U{mqK$E}Dt(VbQ(j|2@zUc&@?n~T~ zO5o011(BHPom(CX2R*9^UM!2Egn}WJo3)Kh={C^a7APX3Q%e58)sh$9&9LrF@+=E) zAp*Uc1xt`$>*6_-+-E60+33bb^vszmuPoiv17Q!iL9GALWwN$RD#A`hnm+{5H@5aB z6dWXb5*FE5D@G#Z=B{32pKV**tSObg<0tr6;Hb+?PmM9SVYnpq`hAhYa|2;$a*AC*-n7mVfyL9PY(6Eh6RB!1I;e9 z;zTi(D{Z=aDRWh*CpQCFWH1G>YkF zlQPT2R_f}(*MDl+CF4hHD#D&cC#wxZZVDt)bQVJ}b<-R9{T=p5Ia}aA#dkh7*>58V zhaifojTR*Xe%$I|=%hj7lBiz|^Fl{Cy4$*kAbnKKf$_ghC`}VF^~AR~bze!vOPQ~^ z>x07rf_3Q9yv(B=e^q34$;@P`?>SzRy=L18zuZ*&o2@j{4rL5~YY@NlptPQm!1m%AHn{1xN;y>9?7Zi6V z=ahDEpTg|Jm85pJ=;CcI7XXMn+Iz%hECZtB?wL*D`Z6z?0D4u!x@od}Hs}Q| zuU$N_%m)S9{)%#hXoWHi3LYc4i?-r%6iTTepLTu5{Ps+E^mS<2SP)^5jG;cC$?Uu7Q*nu6vur=$V2bE5 zq2_ATQvU#>j%y8jFnK`FXcA2-ui(*zR_`yt*CiuY(%>(_u8{M2nzGZl`MU4ah!|by zr3JFr-7ph?ExfpFx>A{{32PZ`n5sHwy*L-?IQP3%%K{;<1`b6vf_pC=>z&}rI(j#N zaz4rTjnWZ=M`*o4D8AZQq#rH#zJY#`=y57qKJURT%2~X%({7*&q9XZ+LfbuQYUnZX zhdYObK0KVO{q60|mTFxr!Wp0EN;~+*?K9in3zL@m3FT^puPg#9*#XS$)5$z7JajiU zDP{j3un`^jCHD$+vV_Y_s*7MydO%rHSX=^Ep%@L;$x<_ zE)aO{v_tQd==J3~UKI(Y4d>aZ8ek}Ys`0CLBIsqk25PQ~+b247r*t7M&TNR4C{{Mm zu;g1U|Jy1`D*WZ{e}-?AfHR?>_~&W;E&YfsgXdj;8X|mEEZ7ABE!67nmK~lhW7Ie5 zwuID`qi4GNb@RCU+CF1>s)Ft$G{%}rvQ-cdl-v8&q=NQd-(Qx3rrEit-*_cKqrPW$ zph%!qiC8#Z3tJ~5Mp9{O42eGd0fNlhh(0j0JD4tVasLj`^=YfVAEo~m*4w~wQ^dvo zbiYk$3`T2nfb>iOpWUOJ@Y>0h;-p4F>0Uvei-lX$ugpC{{g8R}RDKF;tklYUbtiCP z>QaB4<`e|%abV<|luruXm^XjV4G=T;>1WIt)#-%1y{oM(2D&hNqR!+8D~p?XS)N|F znx%*Jm*EmXt3r%ov1$^F6#;Fv4`sXQlyAYQi2vGKaWidiYRD)_*bRfp+UpNYtoRnS zVWyb4$eP1-<2deMJ$^vIZNU3jHaL}ITeF+8pY`C%NAApzm*cI8TXGs6>dn7r(DlM{%S1j)ETqp^Z5AwT8&Av-%rZ=D%)~_`#;T!HUT{M4TE0+ zvMUP6*}B{r*mU3G+>6`*!KD-9Xr@%~=z=1_ZFNVl;8u0G?*j3|uH$ZU8Oz_c% z+Qvz>pW3ojDzA~hD`~E+bG-$u!j%jE1iLKd1GF~0o;j5Em%p3f)2`R^c%eP|RMl<% zaF{F29emMj{SXZ`>6EGenC)*@;cFpbwKKr=RO%Wcko@lyKO9WG`Df(6aV27xm7Far z7ju9Vmnh`xtxINlDUY<2&!glqwv_)aNJ{IjxRHey@eUf^TYw7F>JNpeD6gJ4+H_Jb zku9+WEM}@B(~Gu%Q!bwfy5I@til;NseXEFw#i~Xo%N@25Q`Lnfjh5Yf`%h+*i)wMP zoTldA#y(%ecjR3)$$repsBS45KTNi5`WX;6ejx|$?^#bhw4;eIT-S)Fd->1!st zkjCE4kK?$Mh})%Z1Z;!&1dIZel0OsN!WZrJw!durzq>d^}3g@z$jJrwYc-=ZLoi zi{4ka_GbwWoL@Y^uHByNLuW)Oa2uub2Vn#JWhbl{(Us46FD~gDcPal2q?6H~h+W{H zd9L5<=Z36dN_d8cW+G4tRnP1ws;iUS@$ zRySu2&W$J7_ltQ8H}6RJEJC^y_!%ZX25WK@j;PIo;!{{s4QEeaGF?bU9i5lD9uKoA zBDCxGUrlr5^TL4#&Yr-Acl>iUJy?V0&rI5&h8B)^Yqf{eKGKK`d7cj!bt`p?1cbbL zX+1*Qx%S}iPuAgS90j$NLeok(6YlYv6&NBnaNm($eZ7RrMv0;f(=;vJ0?=L-afyj8 z-6b_&RI&KDojLrevdr2`eMM1S@{eb1qOHdA7H0-ECWv5^C%*4ahR@xL9`=3wP&w%~ zj!%-)`gMomD2pMa_Btb$(f6LTK_*bXNd-D&JoPZsvE=9KK)K*E&B6qO>qlzJ$pMAb zP=8KW?M(TL0xRJ-Ut$`cm9$@H8r;i9&J8r`NYVKTiPzrpby4Go|E<

e%&Bb%vz1EUQM|_z5duV9A)a=rcQSn#p99+5@3$<-LGr-PO-%Qf^GkKoZ zUT22#k&f!Y4UK%7(dE9=&RCI?vK6$>jlualQ5LUG@?W2Lz>Cr+43r6` zEgReHJ(=;TC|wMsaH$UM)92XT@9}_m+w#RgAY9hix^W7WBT znbz6qLT07dF9cx-vg+6uTwST6QSUb%=<+2SI+%~Sr`p?0C+L8vv1EJx>FuA1X*wG( z^1KM@3;&IW4XbB@UZ?W$iStB%ZB%ex#(s~t+w2=+0};WpK+g6`GQ-t=QJq| z(}@6$++S1k*?H@x0Mv*+p1Qqw+8lBrFCs1^-tHuoU#{HE{cG39-PQ_1v6Ll2628lM z@(nvZ?0rFeRK)uGD(Vl$@ZSkmSN*ziLb=|4T%}(zO?JtLz4ceh_wnOep}!X;{rwLL z`c4=(lSX9l?;C3UXQKDF;O%ly#o_tY1wwG~rA#pw!^7qk3gw&sb6_aSsmYc+ HHwpSb%x1d~ literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/image-2.png b/APP_Framework/Applications/app_test/test_hash/image-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3016fd7cdd093c70531d663335bbd3efe085f78c GIT binary patch literal 10507 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/image-3.png b/APP_Framework/Applications/app_test/test_hash/image-3.png new file mode 100644 index 0000000000000000000000000000000000000000..39b791457042575aedbaea5dd5a3b23e6c48f656 GIT binary patch literal 13120 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/image-5.png b/APP_Framework/Applications/app_test/test_hash/image-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c95b5a964600618cebd100b432769aa3873451aa GIT binary patch literal 10856 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/image-6.png b/APP_Framework/Applications/app_test/test_hash/image-6.png new file mode 100644 index 0000000000000000000000000000000000000000..711e57b05a60fb2820ed759e0af01904c0d07e38 GIT binary patch literal 7892 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 Qaf&7{tt?gg*7(!^0H!Qy(EtDd literal 0 HcmV?d00001 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 6207db80e..ff139bbe5 100644 --- a/APP_Framework/Applications/app_test/test_hash/test_hash.c +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.c @@ -21,15 +21,10 @@ #include #include #include +#include "test_hash.h" #include #ifdef ADD_XIZI_FETURES -#define HashTableSize 10 -// 初始化哈希表,一共有10个元素,其值为0表示为空 -typedef struct HashNode{ - int val; - struct HashNode *next; -}hash_list; // 创建哈希表 @@ -129,6 +124,7 @@ void DeleteHash(int value) prenode->next = temp->next; } free(temp); + temp = NULL; printf("Delete the corresponding value in the hash table.\n"); return ; } diff --git a/APP_Framework/Applications/app_test/test_hash/test_hash.h b/APP_Framework/Applications/app_test/test_hash/test_hash.h new file mode 100644 index 000000000..a05ec8ecc --- /dev/null +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.h @@ -0,0 +1,37 @@ +/* +* 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 application of HashTable function +* @version: 1.1 +* @author: NWPUWSN +* @date: 2023/6/22 +*/ + +// 初始化哈希表,一共有10个元素,其值为0表示为空 +#define HashTableSize 10 + +typedef struct HashNode{ + int val; + struct HashNode *next; +}hash_list; + +void InitHash(); +int ComputeHash(int value); +void InsertHash(int key, int value); +void DeleteHash(int key); +int SearchHash(int key); +void PrintHash(); +void TestHash(int argc, char *argv[]); + +