From d1198dd4d7ded9bbb6d05dbf40a89adf3ed4e482 Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 16 Jun 2023 09:58:50 +0800 Subject: [PATCH] demo --- APP_Framework/Applications/app_test/Kconfig | 4 + APP_Framework/Applications/app_test/Makefile | 6 +- .../app_test/test_hash/Initialization.jpg | Bin 0 -> 5719 bytes .../Applications/app_test/test_hash/README.md | 47 ++++++ .../app_test/test_hash/deletion.jpg | Bin 0 -> 22763 bytes .../app_test/test_hash/destroy.jpg | Bin 0 -> 4440 bytes .../app_test/test_hash/print1.jpg | Bin 0 -> 20192 bytes .../app_test/test_hash/search.jpg | Bin 0 -> 18683 bytes .../app_test/test_hash/test_hash.c | 157 ++++++++++++++++++ .../app_test/test_hash/test_hash.h | 37 +++++ 10 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 APP_Framework/Applications/app_test/test_hash/Initialization.jpg create mode 100644 APP_Framework/Applications/app_test/test_hash/README.md create mode 100644 APP_Framework/Applications/app_test/test_hash/deletion.jpg create mode 100644 APP_Framework/Applications/app_test/test_hash/destroy.jpg create mode 100644 APP_Framework/Applications/app_test/test_hash/print1.jpg create mode 100644 APP_Framework/Applications/app_test/test_hash/search.jpg create mode 100644 APP_Framework/Applications/app_test/test_hash/test_hash.c create mode 100644 APP_Framework/Applications/app_test/test_hash/test_hash.h diff --git a/APP_Framework/Applications/app_test/Kconfig b/APP_Framework/Applications/app_test/Kconfig index 45df5f5d5..576dd4a38 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 CONFLICT SAMPLE" + default n endif endmenu diff --git a/APP_Framework/Applications/app_test/Makefile b/APP_Framework/Applications/app_test/Makefile index 1cf919846..d7afc9d28 100644 --- a/APP_Framework/Applications/app_test/Makefile +++ b/APP_Framework/Applications/app_test/Makefile @@ -99,7 +99,11 @@ ifeq ($(CONFIG_ADD_XIZI_FETURES),y) ifeq ($(CONFIG_USER_TEST_TIMER),y) SRC_FILES += test_timer.c - endif + endif + + ifeq ($(CONFIG_USER_TEST_HASH),y) + SRC_FILES += test_hash/test_hash.c + endif include $(KERNEL_ROOT)/compiler.mk endif diff --git a/APP_Framework/Applications/app_test/test_hash/Initialization.jpg b/APP_Framework/Applications/app_test/test_hash/Initialization.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb93f07ac6229d571dcf446c6a02dd8c6d8de6da GIT binary patch literal 5719 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/destroy.jpg b/APP_Framework/Applications/app_test/test_hash/destroy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce4d70cb6daa149203de751bd41981a91a51f64b GIT binary patch literal 4440 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/print1.jpg b/APP_Framework/Applications/app_test/test_hash/print1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bfc06ce0cee072f3290321162be8aedc967e98c4 GIT binary patch literal 20192 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_hash/search.jpg b/APP_Framework/Applications/app_test/test_hash/search.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e3efb1d370d9e2c1d2fd2eb1343da5a4f7b9a77 GIT binary patch literal 18683 zcmcJ%2UrvB*0v4O6e$X*ARs7R0Re^3iy%d+6zRRUfT8!M*Z}D*Kv1MtsfJz@2)#!- zN~odtV&I#gPuu(1&%59M|2~dG4KXuw&pmUmxz>5Dl~-yia-_u9iE(gnNEPH|)Nyd| zK)~zC^Mt_Pq4QxGz(2Sy>T(ZoihAglfM4*frIe*`a6Z1h_`{R{`2B*jysirl4$TPm z4=#0o$0`nve58Vml%}WA>SSGUnM%#wy#>{F@v+fkfA>-s;t%b^8iiC6nL6sXKt&Uu zUK+rk&P~P9!a{FBW?vIOeE6!zA2!0&1T1)&i%^e!pS@ z&nC}6bg$iZWx*7YC<=SRQ=#!sJTi#Mz6++l+8vOB|d) zElCL8*<1O6DD1r8;5@-akea)GeFrW3AAq&3?{#@9FST)x>DTdY~Z@d2mcts$*#cGsMy}%M}xdf*2@m#ynAz<&peokb!ppaelFjc zk*$aI){axw98XpV<$@dBhQl&oH`)OfJx7#lSag%8PBl*i*qI?e8)zD|MR_^a7mAG9 z+X*YhiF}h9Vw(Dj5gruf=tOo{54*_zs5iti4%6KmGQ`qwc?m)~y0W-sVcGrG)^=gL zV{esdnG6RsDrz8so&;^c3I%ISH*GVK{YTxeX5R-ZO0d*;e75(wL5G+@?aD7PA;D*)E&R{ z4a%5%3wY13>KRI-PVOnlOkrffMk7uVFztFL#Ukv<_$9^Aq93F=Jleu_L`6+Beuy{R zyVn2W)+gG8hKFeT_J}l7rFy^jj>$N=rT(XfwI_c17L&l`p>9l^@SO}<3B6Y1%EyUx zTle&1f)!JWxE`4I?|oNe1a~M=5LmzjLRYEn71_o!czT@LbDu@mN<7=l;;y=k1_sl# z9Zf{g(SKQ4^p^MaG>g25ehDgZ_qe%1JF*f>TJQSxwgD3|$Iiy;d0Y+=@fvZ)y2C^3 zE}9v)iK@>vSN#KOMcYYlX=#6A&gv^$+9}m=gQ8fAkrLvQN}UhSrHvd9l#;m(+3a_r zS&r8{Lg!eX&u7e4^F?zbBj2;IT(Z0~Q5E4vgo9(U6ov>-t%`Y@R*ZLmVY0wwQsv=W z>W=fG!Dkg0N_!MGu)2Lp8}nxU9(*j2K;pYohhyTF@}#g`2wjOulm{94gW;5niKO@{ z>1${Zr{WaF*CC>>d>?rU^65KgQ1jCYJ0DU{gqo45!LH-aYSFdQ{+-!fhWpCQR}V`I zieAH#5;A0!6DM2?Gi3FLtLEk;Z+s7b1b$yVF?U`487d1_e>{?jy@xqrH{qA1^ptu& z)~>{HOPR1idJgCU4Z zu{`|P-7DG}W^0@rVC&+kmKcEi=yRL%&a!%O4GXAlIj6~pq~(UVjlE7$j!VI+wFjt& zA0MH74YOb9hrLI1>g^ydmr|ANgUe+NgC(!((14qb-&2^o9Coa#6#(x-@9+sV#%YcL(&Z6KjB(6Lv< zBJfcTnT%86MAKe%kMk>hdAk4H*aG_a$@$L~w;Gp+6ZVd^m0mr4nBYAr4yVzRyGY1F z#YDSwJs6es2KTt~19qYE^wGvZ_oUJnnT?Js8!x4I1d)ALgN8lc_coIqrHb%Um7q<% zJuZ0FFOI}7=6+qLB)XPiLTdptna}J(2AO`1v6C@=w*&uN$dCqe9oBeP} z%T#9d$^K~fv>?ByHDvHyG?YbWsU8T{IDuDkSwRr9DsfP?ZLs9!t`Rr?_!t5^&~AeA zsF50dT}$oYVQ_NhX6dlpTk{JqIhtrR3FlaC-j8a-bH_wtlhbvPwY`D1k$6JEW8@E~ z!XpCWLTNzEty+f5yDz)BYIM{aUPTq%lm}N+mpCoD026aZT^Y=InM6fQPwyBd8y>9X zM^Vr#rtv8kHu)p8`$Q!{oSFni#5^8PkT)H$sQ9Dn97Y?Dcx7Gup~8cxfNV^TLf|`x zil|A7z5UxR?@8G4)^1q9x<%GulboaWH?%nK8Pc4$+X(DCiFeuy!@KbE2v{E6cg+Rf zllR&n!oSt_*JnSVzj1(B)I6mh|6~9<3_QnVD4nImcr@Iob0R_68v3R=8j|kavFJ)4n8$h<2lnrWO#BA zzKq||g{6<$uX1Gk(YG)*_1d!cob(9Maz?Nhmb<#=>c(7KC5${X^X7M|+93k2iVOG>R+cqd5F(o}EMX zF5Bc9kstd*Qe{6vttooFKMTwhhRW>)5LZ!UE3&YlYPuq5;x- zqBTxikk-DV2>ujPDEsz1Xtl4#nlkV;*~ctNN0)SHOVwcT!>f|5?^Jt~l?M=r{(igU z3;Yc%kI@zwQtEh;6;kw$25iFlIldg!_x|uZl8zmf^=>z*q#}~nMc*B-i^ONWi!NM! zo+icI`9kr1U|IsbW0+gEYF!WAfR(&ms^HF||JNL0yBwr+J;NHO>}&g^oQ>+}HARX6 z^E@x8Y(r>R(nNV-M$5iq1X`+W9)i~M077+qPs#+3NIx0WgDIwZ%q^+XSe{yd;lLhtKiTR>yetL!C8#iz4CbuP&yW*qbvQ7K#e(KT4k={A%LE z)JD!8+bv_ZRkThg;Qgsv3Vm_FiYoI;eA58pTStrBn|d{;(hv6S25vieJc4Z*wAjz!=n(uaBnzXV-H3PW5WVil z9}n#nr;QUEFPl6X*;DaH4X#Sh-v&e&?&9~s9zZ@Pj&!23cxnz-J3mD@d(Pi8E_18v z47(7K=sVDmlu+Cplp+W<8Ei<3Z%HImNkPuN&y2+kE0+2_if0&dgNNd{?kX&t!@*H1 z7J?tvN5NjEqsD6^%CoIw2?7mP=t$5?_z2Q42OpRAeT;$RWA7WB`72KTH-@+l!{rm~ z+pXjh*zVZ-D=CV=YSy3?-6Oqd<=bS4GS&HAf>^0yzJr%8zyw(JM^3CPUbX@yd=;aO z*Y+!8W|{{jGJj}ms_kKp1eDrUy}gmgYuYPx-RN4a8eq2`tmD_5{P-^l!hBX~kBxSS z#1x`=#(KYHPy}X>5XLus@5P?F;xD<#awZo||0}uZvj+8jbIHebGH)I}UZbjT;?=L= zQx?ugok3woI^6Z9(j zQ))#-*ic;VA9U7uLZ1=9?z?ikGdmN!msJ|4`slEpK`}(AoC^<~O!Q&pVC5)qXMO?3 zYdtgkbedva?*Oy8#Rz&ytZeQdo%o{%A?D;trcgY6FuH>I>mIyKlsrY!q54S;)kmzNdfKBXe=T~9W%|CYx|HC4e$ zwyTqoXA`lhX%-8HolYkj_`(pwW6q~98#t;=J3vhjYMiceZuNYV%1M@p6@hKJkDFma zEfM`l&g+kHKUz3%>_I%>sA~dAW#uVif_1o0f}(U#ou$>c z{jH25N;Qr59`&NK?CJT(^6I(n5^Y^_(u7bB&tY|OFWJhvRHdk|!=288)#oW{hD_*& zJF!xye2Wn5RlZIWO?&yn7ZhD*r_p232jrhcsCDY^BJ_R5xB2>&9~@7YSan2#$&N+% z9&d6#cN|(&;p7<<&g!TV<`nd!cTj0ks~m}6jX_VrIc2!o!LWfTK1h_=bt~16-3m}QN}87ujyibM-36a zMB1LP_^e<$(L#+j+R?k2`m1@-lOVmjyOk- zkG%C>i&}&thpg|eAJiY`=8RR@@x70C^U`;wQntB{mjjGW8gef^;>k;4sHZD07g9$K z8qEGq(0NhxOD!XyE~*JD27M}=0O@6+%Q9U%S}31>sNd2D?|WEFUnnLX+mz0?=!~87 zBh46S_58iU9NGaiBTsq_hsnJkeuvCOMWj_X;Zdra_OPi}82NTF?Sy;~zxbhT--J~W zjKkK_2T4IIe*Lj>;8+z2YCP$|3u7zX)zMwQJNVpumrZt;6^}7@vOa%$uUH3$O^_63 z5QI>?jtX}rU7{OOSsSj;ZJes3f*P~DW11H16z8aDd%;JoNvJ4%4M>>Wos__1L_zOk zJXgohNeA9`N_(24+?t~i(>c7F??BvEn+*$BiF2e|Xlsojk>2Kf=RsqWx*t-rT-)Fi zXVD|IrvK46eDRLv4SC5biRpItS~Hqw#lf85WN$H9`nbr6u9@L_+s^0A%nRx(KDVZ> zj({%6(2(55!$$gsv7;F1)v)6{a_+|R)OJ^4z0oOJLh(Klj*#WXbKlo{B_btt-9Bma zuawyCWUiM%8=l(rQA;Xo6cZsI(?>&TYNtTElFau0me*HRTtB@{JMJhY=`c~F!9s_F z;XFim%K5_HaH+}2R+4iMdGz;VRaLI$OyV00So%o0?T~HneZOcI-`e?vK`erWF$>>X zjV2bF{>sXDF3WCR%`Vu=a9dz6ONtD2-i|YJ3+(zM|9;n}o4iFp&Lrmm9{m!1L=)yp zdic5VWMv*1KK5CK<@>HO>0`o>4jex)4vv3?9mM>ViSt)^IdfK!9aX_{w>r!x%b8NN z=8!Z3lgjPKLoH4&U&(b*v*ENa;UJ0NsF;xI>$KnN=x4W1RgNFW;7E_!G1aiFtZSu3 zlCk5dh#JnN?muiC5Y5xEs^+^iG=uvN!!^A^Lqu_D7g(VNMy(Dq3~8-6d5U!cDWI`^ z&72mz28Pt-26Ng3G%JIe2_O<;gZvtV$IPZJzSEaA)_E63lAB$Zqg^o~9E72KRkVo@Aq{-!(O7ei%weV ztqbYW^`S~+RYc`zRjR1_iSy@?<&;_@UQv#_;B2%W;dY8kQf7S6z|R=L#|#>C?z+3c zH(CZwOr+wC0k_#UD0*tJ!j<2mLZdPg5WQDVtzj-b(56^$@W@n_WI=-ZF>^q+lZGdy zdiA?4al!9a`s2Ns)PfNry}{L^33v{NS+8C_@(U48kdj*RTxRX%Oe`h2KbB5puqt`( z$xz#PxX;H5a?7yPs;IlU^h&7#6)G}n zx5MrqbFt1x05@k*(vEmYfT&u?SA2sJUpoSL$7UVl(2=aB1_9-Do1Q;CI% zlTJ2+)<{+r(LYM)!-B2$w)u$aclix%{BFc;pYWCTGp!!86@+c*6#ZR z&^Q}nb&C#z3#4U5rp9uL!(~8V!aieagV~9})KO5#PH$xZ?k1+AO~W}RC7NsXs-rng z^X~EW(n{giE?@*!sC8uvz`v;u$OPbs64*QWTys);;v5p!)SSP!`7r->2+LsTo#NU; z{bzGV(j!mg0x&{V2UrOdmdRE^s3mlQ~? zq}(-6yv{&hIJB8Sp62`=ldObBkEjzed}k*7`f|cH)a6FMSb!jng%JfS`ZEp8T`wK&pF?ycGiZ!&!+Ql>nl^XF=9!lH z0buq-8d8=ampB<|w(p>0wA&pWmN*?79eIOjTQ~+l%Q1R3qxy1iGi8jx)@<}}I-%w*4SmG-N3FO8(;i1yBX+L?8DV$IgwC}s3yo-U8>Y9| z?N>@0UiuR^O@8{prDrVdzC&WZwMywYh%X=KhB=(DhQen&TZPjej@SdYzUWUq41M$; z^zi1t>EWeJibq=~ms)AF|4_uUSVb%gDB_KBHMg*ncN-t`Ibrd{my|5;jOT9qNyHPn z*yt0E@RQ4rZjSEaE_L@xnD;d1&(^a{Rcsv3&PjnU$6Kb#lXT6 zG>4cktfDd&&^Z35=XD#~DZ`Y!@yv|~gI=jdWK(3g9{)IPMSVY3DiSbhdV2tc&}RA0 zmPd>+5^?IFQd>gQ_>DvbLQuNx1OJCSK75K-cbTqk37yOTpr(oFp_V|vVa~Nu0cpSl6gJT z2qLmiH(hg)z&fS@=wNVpVv4!f=$&QOJ>m0R%t6X8l3Hc_R z(1eI{oSclQ^e;N4JiKgkY-RVN!SYq*(`jzit(AMLiraS`$;gSf*M;3xpIbgOTz0EM zWogs%e|=;6wS~x$wDXEvL>u|sEqweJuSL( zJ0#UNMvc^W8pEu$s?SgJxU;&JOYpT-T)31rKs#^3Y1HKI$fPQZRwu^W7i1_)#j4Q> zx~7?NM*)z}1;2N&Ws^iWjSRa80`q}KQn$6sA>G~B#j8_@?+7_1>F?>TNVbeo#4d&IZExL^3SSa#>iZF1)HahQ{Zh|x!q z=KVT2O-95cd9X0}-ZkujfJlXdLtiKXw{7}Vd^B@TY5bK^c1GN4o#_l-cO+j987Je( z$q&2>v05))YPFF0BrG3ITY~~-hthc$le3J-i!y|nLG)GF=+n1})ue$DSWPNg*xM~L z`T3_NMIP#6HL2k5np9=sf6}Dxhd(u`1eF&^_(bcv)kGw&*wmP(n zLR6Kk?cSni-vVH^2?Kdj{CUFc8(f8ckPO+TJn;)73uzn^g1umW4U2$mMFx`4Uc6|> z&U3@-5<4vZRzWBExCDD1u=mXG+8YM_hnO4HD#zNv7mj`6gdP*d;(Cym_Rgp7_k!bB z_}|`+2M8QKzo(>4Kqttj6^l9_83-pN@Y43b$mU%H#4_nZ_@3C6<&DO5x$L9$udQ>{ z2qG%#rR%^Ioseqq7VF(q3h248?Jr@74fQzM%3#9qmziKQKs5(ck`oU)Qe5p?o2wpI zoSJyqtKWReH6ciDcXCPGcc)00ck#p_W}ma3R2`wdsT}S=tOerJeMG09rF^R|4eqdu zDjK_+V@z{?Ib1$=A7gVbvN6^&y*-GanWvbRAIpz-C|FqcDZoNjS`W3}8QiXigoVvLJMj4K4q;U?8cXvo`>53ar5bV^h*q9fH_$|B5 zM+%Uuqd&is+i#H_ek@&gV+-SK&8u$EDf1i|=V}Z*okML#?x<2DIo*|{d&{7hf(um_$Hgo;_D z+D2abRp-&wp`37|;^h>5U#z}iv6lx^7m^c$`A924kRO2$MyZ%s*N=KkGhU3-mDe*m z%HGy9rQuAaD-!iBU%a@>3iBt`h13}>3GH9T#?PzyLU2<}iI`_U&=O(jAKvdJ9yTB2 zj=GN3dqj6m9W2_|TDxE7*Mqq%H*Tt!1%|h$S_v*(_S@mNKByxRvcu?$Wel-Yubj`b~o zQCf^crR&!h&b=PkHqo^V*xtr*L^#O+vQ|K(T2xne+uZJ_igTeS??^`qFg(TX(fXHT zpYie!$G%Mde|GE#ozD~@c3&nYG@K{clN7g$fjWtFfhj&JE@Vm!Kfp>-@aQ(H@evu zw?L|qJ3E;BSjnh3z_&Un{tdop;eMti{c=wKS`t!mZ*rZaQ<1n^uG7tu8OR+T`kfo{ zms%B_7rqfIwa&Nb37k`7DNPKmh!Y!wm@(1Dv0VE(*)$W20ose(eCL&XA);~And1wm zAl7Ts){qL^i~gUdW5;>sXp`NB2!%|VZmrYZc$UW@4QJwT3gH@Y(uuES@l*q?K}I`1 zw^9|jbB4q~1K9oqS}C`Rw#g2;U?qR$tcm}`S!qJXbi3R{*+Wh&`{uA$G4mcX=$8B& zgiw4!-Fq;1aY&;Q#aGv_s7?X4Q7d5%H_59_1FEP2OMQ~OhBLAn`b6aVzmnCYe=;(qZSiDU#17 z06W(MS~1X&MH5}h5B%z&1c5(zs>NS(m_$_@BP!;4NBIFCJ$DNuzC=(w~`G08H2Ff*l(OxtUHv7}pey9RoEg9HD&7 zsOCyh?5A&XUTsd2=!}$JG*anehc@%BFIi`3Skkt=FOGia6rJ^7VA6FTmwRW7)OEs& z`z)CJB$qnjyKEpX>U}K+gFsu6s3q6((mD`{Z#s=S;cyVa=V@2~V^HaGU!mPs({**j z)8mzSrz&`oZdFHl*t0xn5tPcH$ij0XR;NoCP? zSqi6G&AU2>j=kXJMf&;Fo@+y#;R%J}-gJtRN*8+4`Pe~Hl->0m%EMFdhVZ+q=U3;H zL+IKs5BanIEeIvSUN)AT)QMl04OB-8v>rzP5hL>ciqi*^U=0*MIUe3M%{`AI^HH}ziszZ;lx5@a_9ZzUSxl99!`Pe!F z`DWIn_C{;BPe!|=>*gPS;Twz#N+%>gzv^^o)hieon4|hiabb(kis@(rm<_|_ivLs% z09;#Dfp2|4e$4{8@T7e))IlnO=#N zo<*}u)!m{CwpO{8={v9lKz+uyMo!qY@HV7$TJ#1}^KzK6PDTv+Cv0RXL7+Dfq)c*m zV_;k-z2XZgpb(D9zJfaCAf3CJdkQBi(^(s=A6#8fe$Jo6%PL`tyv}qUJ@{_3-2e9q z0~j5t>|JPgN3C)yv16wJ0IflOa$OAxa+j_Wom$Kq|IKAiD=$6IxJcG%ISj zg}v)AL#&`5xrvM9foyuKj_cn^JBY#YTdlBvuMt4Az|5XBm#gMfw#YE1inxI zsu56T{%ef@{=2`_2y87OBP)jOQ?du-QY3(4LtTKv=J>N-I79|eBM*0F0$xAc$17bb z_giO9sN3xCALv=RwPAYeg-We)jIH0KUdN1d%4ZzfD3NaG9;Ty3`}VPA{+_`hwp8rS zx;s&!iq@WQyC@$vzkb<7m&lBD!H3~4CYK9lLz>$&&@b?@6> z10?7VBiIvwQJHxCRf6s&{nrvyvILNz{#B}Z*knQJe;7bMaQ z=)5gpt&>=mc+$50D-E~_AMI!Aa*|&gEva3Gve580aIoAIBb#?)4Z@d1ttlmp7jzd@YB2GYP4r5lX-aTnTrzp*gh2j(~*JWI3Sc~uuX*_&aAZlqW{`1VId zwibxtegqP@ zwXyg#Rt9=r#s@O0ErSn+d5>N+w-uH8>UHB*I%NMR5gLQ|lL)QFH00bdpwL(xb@d*7 z3Ri~wmxNPHYi;#-?avGHU=|ng60I2guYh(!8duF)*53)3brbzemebAmvYn74J!Y+s+0}>m#R{xd&3EJ z1NY!ddUD~Fc}|_3j2g9%5z3kgH3rhlA6>+!kuy`3ML)+39{+dHX&C&628C>|{uy&Z zzbB+huy7OD{STNkzsl4a_oz;j+hBoD5MEkX<1;YQ8@?@5&*nI-w7OBn*)Om*KBti8 zm*r=BlG*)D%JjsrZ7sK?z^3|d5of4@^!=^lwGCAL8R&PN%JKv9YMge!cnn!=$4b!U z_=&`+K;Ks??MK~8Q1W)|79#v*xa&Z8R>iP!W-(W+y6I^zqB6 zF%?z>XpEggWW^ar5aqXu0BAu*tB%cm9WDt}GA@>U}t+dOe&*rED zroCA*%F2eGi<;#fH6q`n1(1X;<` zXcAq$6cBI{gx`@T{W;I{MV+D>=BGEm(Syo*J{>)g;*H<*o9Xgb>}iqAsD@wWmI|A* z2+|8YD&-izn3v&^=pk&ZR(9X0@@VlXCoV6GU`R*$1ite99N4VuR#bs#U_VxEfO>y74?03$B;^hb;tOcK*@za7| z?jIOqJG0o#1;ya>NlSlS*pb1S~dbz@?~BNm@+7fPj|*^%d9(iQlvL7jZJTLr#)rFeGK>o zJ#&^_vOC{sxZu2hXThhp@yqPC*+}fGz#Kz?tYbkuEw>l$;rAEz$*&CAwmxpRu29k8 zsYyVC?|Qi~i9205t-6$cW9Y|C--AU%H?uy>DC@eeFYSlu%VL0CHN_n?wy3H?LbY7n?MiK4XQJ3lqU; ztdpwm2+7zdYK$q{tMu3;v?Kso(wJD#?}wwQ3-U9Q zsTqylCGLg)l3{maXt`6riSemYUAS|L(8VNL5GX3sTIdOSSQ0@_%=EU1fdc3I^>dEC zdRSCDXB+pk8wrP#{@*K2{{eFT-m=tp8$Oys_xe`$Fx?esL*)+U`2{-MEDOhVl$`ja zxP^EmH}XLl{q;Irsw{r&Y>A^cA83DAg$Bn*0*83kzH`#;f{8F0nPISaK=xOLE>nh$;TFmaB;&jz@hX*arkrUVPir|IoCIh-jocSoT!y z;Hy@=YQ9io{A$~ODm3LA{iDz{p{nzm+jB)TVlk-7T@k7(1@M+PW_GZ<+<n=blu-t$4K2qT(9U36Hv^Yo83|8$51am-ep-dD@EfvmNk0@B&?LcE48V< zJHGUd>kOtNJwk0&v%fp*X8N|$kWD{UZQ7C2Me7B(2Wpf`Eu zB0kiTR_ZjE>Tbn@WR|TAx%HF2CI$~jSUN+t*O|QsR8Hx>p;e@+9Un}&P2FsmqZ}zZ zW~F%JtNTRzOK(@_<(TD8qot(ZJDMyv*rsw&ta+UPuHF4A1Y5UvcG5>4{Q}v2j!^Ce zav;W}{(XBBCH!ztAs4Uoe7ygy1n%+g-OFbd`?-p-e&?^#QLkQma5!YhdYAVd+2N&-*|V#ov^bN*CR{e(2}n`F;uz zd1vglXS^JnQkyIRJt0!AB?T7-uDdCMm7FB&W!Nk*tV~XtH%GJBR&F^DNvvyW;2kEd z2r438yKQcP9*7E-mCxHeJ}RqU^L=Eg|HvWC>4tY)lS;ip4q^See{=3$VRBfGrQy_7 zx`$;QtsrVjmjBe@w8^`8{Z>xY$XEl%YT2)~TkI%|P1Z{s{#}7;R8*4zeFA3+l;U3$ z=o{0AY}s-DB0;}~pX3F|U9^D~t?S=BAN5MI?ecq|)9K57M0cOC9?zo(ywOs~$ga`u z-UhN5&OJa$o%to!G@NHKNooqP3MXVp0*wC^g8GQ@W?+j&PdRdac0K7t_w)GLuJiQ? zuM>F;dj;&@Mx=yHRGBqg@7K-|jSK__)JLs)e&IVmy+3aiCVab)9o|p0XLFoY4rBvo z@DlGAye#-{?04{A?Dv^eg!07(7P!#vd6nNimJ$+dPilcIKRhZXc^BTUO8Ex~y{PuT zu;2H#{?UFX^fr>-nJMQ>@e2QKHHWDY{u2+y*;#obovm%lz<__>u0AEH(IJFFkU`CgyFHaI93))KVRsn|&}&s$Z*C*}QGw zzGi7fUEjTz7KhFXRDIi}8Q~w-c5;zP(qlt%g_JLDOp?=T$&v1Qx9_*4evyC5MR~UAV#+2|&Q4WOf42+}f2$4D=tPK6`of;jJ% zm|DMQ72i-fwtzD_vTI^!Sz<%9Ih4e5`=ZZsZT&BZ$O6MY!-4K+tTd%8{7srFdd>C< zuhAlTb+l+WlLQRB<{T$)6`+A~P;U&ncks*ER&vsi78^e`=S`=Qx~N$qs*WrrUN58v z8LimFeEKed?Y-bW;!cw#l=IxTjEBZKpu?S?2h~_&!rtPG1^?p2uX_A+;#G#;n%eog zmY3hFIq#d;{*H1TX`yFa70-8Y31am241#Yr_Nd?!|9y@!yf z(#d+jY4OVw^R))Nz`3LB9Z^j0%IRra!zs}b!|6$JYYet=YNqON{1g$)WWJ$!NRPwW zA7HwGKK-#Dz?(LM-E#wCTB(Tw$2a~ofkp5XXoOOQ0PhA)13l@DkA4_)Hu0vS&OZ12 zCR{4!exPN(gq$*)5b#!`(_?w?N!95dY>6QNRD2$%bF<+G#+X zTjG#p+sx@%S%2YInW~`Kt&doZi{Qg*+(vtEb*3KELGQBzJp9&8dioq_fP_-2#WF)G zkEo7?i0P^wyBW&Kxjj8%lj|5%G`2XDs(0 z?A0WugdB#9;3AZbv6Y?@9q3n9xEDT0?>nByOk7byW1G%?Tz!seRV_`wy9X{G*VH~a zni|~8KRVu(gba4}ztdqR`PoD7@9U(>2pkP>X`#qO4^S__d9gEtba563MoYf02Lf%| z^kOZEzQFe#yg4n1SjU_lhWby3nPmo@Y07u!uMhUVV)r!K3M^gr^opdFiA6cRDRn$k zgVV#ijR^@-`nW+Y`}{s zoYr=MxNLu!4qNmpf89AAU*X1bS7NH~Swa^++bF52mi1 z%6jY~!bJr%BBwtVsDhtZN%WVgbLSR|5G++*@IvxZzAn1(`5~*>YSq%kvm%p5y(`hQ zarb$6FK#%=&B_YHm4#l7rnDpQHb2);RUW#WwWptIk>r405IqNGujUKBA~Wd0is2lT z7`=$Pp!8r(*KvCR%5vwHO@u+U!tg zd|TT^>{LwbG@N`tJOwEhR1)DnhR;JrCk%}Uxc@UR9m$KH_|UN(^nrpn)lB`PUoG+8 z!%{Wxi~$*Zq#Hun=9>TAm-S4y)g)rZ-}fp+*~PnqSftISbxK{?@1kWC!E3(^@Rj5E z3SW_!lHQTGOIoG(+oLJZ|LnE2w^RY&H*OR0(#t+-f2=%g(R}#@YWsxYN*-lH?(B~f zU#9WR*W=IbPE7!7^kK=gCHTfiQU_YT^lYj_kgnHU`r|o2!6))m?c$KPU7)MVW>}RapHK+5viL5Gs zpSAqZ5>j|-l$9U;{Mrzm{1Kr0BqWjKF+s(#xa#TLdBfj|9`z2j%F25Xq~v>~nCD?r zkrNv-D4@hx$vLeRKU-V(BDRY?Kn0$AeLo(TVE);!bpb#?YY>ACBlB_oj>yynqaSNm zq8Nv|vH^`GLkIxE$e?O}VJ)Xe;Dhz@s7a*|nw{JB-D2(H(6&&=Poa`4vGae z2A-Q-S^(#}Py=UYGDnQ)-W;FU^e?N4VmsH|3=IiM_IOTSQJb&g497OcR76!JV^-D9^8|1#bF;rPa!pGy|C zyyRlCqzU_?_>PM9eV9$va$Hq#`gtMF@UytU}r>+>!dN%mC10{^vbceK&2RAy{?A&9KkJfkfn)`B! zU_G%ho@A3%a|6AGO@BmP&$9Ff=_!xc$^0N-Zwj?ip}y{K8E#ACuUGRZgY>Y#AtzGs zSF^}_r(SskX_e3ff(ugzV}9QVkDHpWm4JUEz7QcGY?x=Ri?*QQJ8HLWAys8O;I+mC z0@YUIdr@|HKO=-we|;~huPA?RuHr)SXljyTSt%S-rche59T)JtqM`T{9fuUz&F`E zVrp$#80ekslAu9iH$UJ4F5c&t_s{{73hWBKD&=fvO?D zNrSU*%;D^rFXr+K&~3HEQ4AC&E>V&PUu_;UTBMPQWgh(uO?no+A?4F@H?_Hreq@dubLw<-l^tnrIEx*V!b26Aq6a3y{|E9UfFA$= 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 new file mode 100644 index 000000000..ae958cccb --- /dev/null +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.c @@ -0,0 +1,157 @@ +#include +#include +#include "test_hash.h" +#include + +// 哈希函数,根据键值计算哈希值 +int hashFunction(int key, int size) { + return key % size; +} + +// 初始化哈希表 +void hashTableInit(HashTable* ht, int size) { + ht->size = size; + ht->table = (HashNode**)malloc(size * sizeof(HashNode*)); + for (int i = 0; i < size; i++) { + ht->table[i] = NULL; + } +} + +// 向哈希表插入键值对 +void hashTableInsert(HashTable* ht, int key, int value) { + int index = hashFunction(key, ht->size); + HashNode* newNode = (HashNode*)malloc(sizeof(HashNode)); + newNode->key = key; + newNode->value = value; + newNode->next = NULL; + + // 非哈希冲突 + if (ht->table[index] == NULL) { + ht->table[index] = newNode; + } + // 哈希冲突 + else { + HashNode* curr = ht->table[index]; + while (curr->next != NULL) { + curr = curr->next; + } + curr->next = newNode; + } +} + +// 从哈希表中查找指定键的值 +int hashTableGet(HashTable* ht, int key) { + int index = hashFunction(key, ht->size); + HashNode* curr = ht->table[index]; + while (curr != NULL) { + if (curr->key == key) { + return curr->value; + } + curr = curr->next; + } + return -1; // 未找到对应的键 +} + +// 从哈希表中删除指定键的节点 +void hashTableRemove(HashTable* ht, int key) { + int index = hashFunction(key, ht->size); + + //表空,无需删除 + if(ht->table[index] == NULL){ + return; + } + + //删除为头节点 + if(ht->table[index]->key == key){ + HashNode *tempNode = (HashNode *)malloc(sizeof(HashNode)); + tempNode = ht->table[index]; + ht->table[index] = ht->table[index]->next; + free(tempNode); + return; + } + + //需要查找,再删除 + HashNode* tempNode = (HashNode *)malloc(sizeof(HashNode)); + tempNode = ht->table[index]; + //从头节点的下一节点开始遍历 + while (tempNode->next != NULL && tempNode->next->key != key){ + tempNode = tempNode->next; + } + //如果找到节点 + if(tempNode->next != NULL){ + HashNode* node = tempNode->next; + tempNode->next = tempNode->next->next; + free(node); + } +} + +// 销毁哈希表 +void hashTableDestroy(HashTable* ht) { + for (int i = 0; i < ht->size; i++) { + HashNode* curr = ht->table[i]; + while (curr != NULL) { + HashNode* temp = curr; + curr = curr->next; + free(temp); + } + } + free(ht->table); +} + +// 打印哈希表 +void printHashTable(HashTable* ht) { + for (int i = 0; i < TABLE_SIZE; i++) { + HashNode* curr = ht->table[i]; + while (curr != NULL) { + printf("(index, key, value): (%d ,%d, %d) ",i ,curr->key, curr->value); + curr = curr->next; + printf("\n"); + } + } +} +void TestHash(){ + HashTable ht; + // char input[10] = {0}; + // 哈希表初始化 + hashTableInit(&ht, TABLE_SIZE); + printf("Hash table initialization succeeded with a length of TABLE_SIZE.\n"); + + + // printf("input->"); + // PrivTaskDelay(500); + // setvbuf(stdin, NULL, _IONBF, 0); + // fgets(input, sizeof(input), stdin); + // scanf("%[^\n]",input); + // printf("\ninput=%s\n",input); + + // 插入键值对 + hashTableInsert(&ht, 1, 1); + hashTableInsert(&ht, 11, 11); + hashTableInsert(&ht, 22, 22); + + // 哈希冲突 + hashTableInsert(&ht, 101, 101); + hashTableInsert(&ht, 111, 111); + hashTableInsert(&ht, 222, 222); + + printf("Intial Hush Table, then you can see conflics of Hush table below: \n"); + printHashTable(&ht); + + // 查找键对应的值 + int value1 = hashTableGet(&ht, 1); + printf("Search key=1: %d\n", value1); // 输出:Value for key 1: 1 + + // 删除键对 + hashTableRemove(&ht, 222); + printf("Successfully completed the deletion of data with key = 222\n"); + + //打印哈希表 + printHashTable(&ht); + printf("The key-value pair with (key=222,value=222) has been deleted successfully.\n"); + + // 销毁哈希表 + hashTableDestroy(&ht); + printf("Hash table destroyed successfully! \n"); +} + +PRIV_SHELL_CMD_FUNCTION(TestHash, a Hash conflic test sample, PRIV_SHELL_CMD_MAIN_ATTR); \ No newline at end of file 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..908eae2aa --- /dev/null +++ b/APP_Framework/Applications/app_test/test_hash/test_hash.h @@ -0,0 +1,37 @@ +#ifndef TEST_HASH_H +#define TEST_HASH_H + +#define TABLE_SIZE 100 + +// 定义哈希表节点结构 +typedef struct HashNode { + int key; + int value; + struct HashNode* next; +} HashNode; + +// 定义哈希表结构 +typedef struct HashTable { + int size; + HashNode** table; +} HashTable; + +// 初始化哈希表 +void hashTableInit(HashTable* ht, int size); + +// 向哈希表插入键值对 +void hashTableInsert(HashTable* ht, int key, int value); + +// 从哈希表中查找指定键的值 +int hashTableGet(HashTable* ht, int key); + +// 从哈希表中删除指定键的节点 +void hashTableRemove(HashTable* ht, int key); + +// 销毁哈希表 +void hashTableDestroy(HashTable* ht); + +// 打印哈希表 +void printHashTable(HashTable* ht); + +#endif