From f1d2db8cbb5c5c68a1cf53d097b0d9011916cbe7 Mon Sep 17 00:00:00 2001 From: LuFeiyang <3345180690@qq.com> Date: Thu, 5 Oct 2023 10:42:25 +0800 Subject: [PATCH] hash --- APP_Framework/Applications/main.c | 142 +++++++++++++++++++++++++++++- README.md | 55 ++++++++++++ 截图1.png | Bin 0 -> 4484 bytes 3 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 截图1.png diff --git a/APP_Framework/Applications/main.c b/APP_Framework/Applications/main.c index e1de024b5..123fd49fe 100644 --- a/APP_Framework/Applications/main.c +++ b/APP_Framework/Applications/main.c @@ -11,16 +11,152 @@ */ #include +#include #include // #include #include - extern int FrameworkInit(); extern void ApplicationOtaTaskInit(void); -int main(void) + +#define MAX 7 +typedef struct node { - printf("Hello, world! \n"); + int first; + int second; + struct node *next; +} NODE; +void Hash(NODE *M) +{ + int i; + for (i = 0; i < MAX; i++) + { + M[i].next = NULL; + } +} +void CreateHash(NODE *M, int first, int second) +{ + NODE *s; + s = (NODE *)malloc(sizeof(NODE)); + s->first = first; + s->second = second; + s->next = NULL; + int index = first % MAX; + if (M[index].next == NULL) + { + M[index].next = s; + } + else + { + NODE *tail = M[index].next; + while (tail->next != NULL) + { + tail = tail->next; + } + tail->next = s; + } +} +void DeleteNodeHash(NODE *M, int first) +{ + int index = first % MAX; + NODE *current = M[index].next; + NODE *prev = NULL; + + while (current != NULL) + { + if (current->first == first) + { + if (prev == NULL) + { + M[index].next = current->next; + } + else + { + prev->next = current->next; + } + free(current); + return; + } + + prev = current; + current = current->next; + } +} +void DeleteHashTable(NODE *M) +{ + for (int i = 0; i < MAX; i++) + { + NODE *current = M[i].next; + while (current != NULL) + { + NODE *temp = current; + current = current->next; + free(temp); + } + M[i].next = NULL; + } +} +void InsertNodeHash(NODE *M, int first, int second) +{ + NODE *s = (NODE *)malloc(sizeof(NODE)); + s->first = first; + s->second = second; + s->next = NULL; + int index = first % MAX; + + if (M[index].next == NULL) + { + M[index].next = s; + } + else + { + s->next = M[index].next; + M[index].next = s; + } +} +int main(void) +{ + NODE *M, *p; + int n = 5, second, i = 0; + int first; + M = (NODE *)malloc(sizeof(NODE) * MAX); + Hash(M); + InsertNodeHash(M, 1, 20); + InsertNodeHash(M, 2, 40); + InsertNodeHash(M, 8, 8); + InsertNodeHash(M, 9, 7); + printf("number: 1,20\n"); + printf("number: 2,40\n"); + printf("number: 8,8\n"); + printf("number: 9,7\n"); + for (i = 0; i < MAX; i++) + { + printf("Hash Slot %d:", i); + p = M[i].next; + while (p != NULL) + { + printf("->%d", p->second); + p = p->next; + } + printf("\n"); + } + DeleteNodeHash(M, 8); + printf("Delete number: 8,8\n"); + for (i = 0; i < MAX; i++) + { + printf("Hash Slot %d:", i); + p = M[i].next; + while (p != NULL) + { + printf("->%d", p->second); + p = p->next; + } + printf("\n"); + } + DeleteHashTable(M); + printf("Delete HashTable"); + + FrameworkInit(); #ifdef APPLICATION_OTA ApplicationOtaTaskInit(); diff --git a/README.md b/README.md new file mode 100644 index 000000000..541678c11 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +## 1. 简介 +热身赛赛题一哈希表 + +## 2. 数据结构设计说明 +哈希表基本功能实现,大小为7,以链表方式实现,插入出现冲突时以头插法插入对应表头; +删除对应数据时到对应链表中删除结点,结点定义如下,first值要求唯一: +typedef struct node +{ + int first; + int second; + struct node *next; +} NODE; + +## 3. 测试程序说明 +测试哈希表的创建、插入、删除: + M = (NODE *)malloc(sizeof(NODE) * MAX); + Hash(M); + InsertNodeHash(M, 1, 20); + InsertNodeHash(M, 2, 40); + InsertNodeHash(M, 8, 8); + InsertNodeHash(M, 9, 7); + printf("number: 1,20\n"); + printf("number: 2,40\n"); + printf("number: 8,8\n"); + printf("number: 9,7\n"); + for (i = 0; i < MAX; i++) + { + printf("Hash Slot %d:", i); + p = M[i].next; + while (p != NULL) + { + printf("->%d", p->second); + p = p->next; + } + printf("\n"); + } + DeleteNodeHash(M, 8); + printf("Delete number: 8,8\n"); + for (i = 0; i < MAX; i++) + { + printf("Hash Slot %d:", i); + p = M[i].next; + while (p != NULL) + { + printf("->%d", p->second); + p = p->next; + } + printf("\n"); + } + DeleteHashTable(M); + printf("Delete HashTable"); + +## 4. 运行结果(##需结合运行测试截图按步骤说明##) +烧录后产生结果如截图1.png + diff --git a/截图1.png b/截图1.png new file mode 100644 index 0000000000000000000000000000000000000000..3efee04c89c5b0a6af7b8122c3c3a1a8241b86ef GIT binary patch literal 4484 zcmeHLX;@P08U;=8m_wtL6PlHpQ|F$XbI8oJa>|5IQp+4s8uKa7+_ZK`BMUIVVIM?zVgHpZo9rz0djaJ^OjSy`T48YrX4Rd&3{D&S&Ig zlw?34kes7~-31T`oDVEFX$fG5kv;Poxcr25Kt_T<@^7~mn4~MO3~xFV1+=0rkb;zPsnZ}0;nx#B*AuzS7ee5(a3*l57#CP$Qp zQ-v(93m{Q(5W47hk12YCOMEqEos_FQym)eZ7!f_mSH{nA$1qP?ue!-qFDaY)N7&K{( z#rzq56yb3kndRz7p#|pjL`Sv{GUNq<&@ZeVW0KZ=H=$(#KgqThjkLst;2d{ zPszPsxZ_^hjq}`wh@;A!iwW_sTC9bQc6DUV_;t8AQf4}MAh#r%N@i7@KZDOsuo9Zr zGXswt$aP!G#BSh2Grl}eybzJtl9m}cEdIV2S#jbaAA>Mm_ZP!96B|nEH*;snbxkoxht5h?a&bKZr^J;@~oz4QDC_?1X}`3uCR zElw;H3Qelp?87!*4RCU^DCUDK+X#)umy>kl()J{IWZ@L8Do|ptib!{S)@-2{i*It7$~SbGA$~54rc^DKwRhtZT{>tTMPgy(Gy!`P zgs79O&-Q6#X0kTxLL_U15P4U|z$PF-y{!)5Wl1{kC07j>-4rrD{9h z-z+>6s^<8*jemYQ67HQ!bdcv3Bp9o#ZEUE8H~CH8k5c~)eV1verl0{aZH-=yS)b4u zMKuO2Tv_MK8@U7&onhR}Ma1YIyJsG7|H}@8CWar`=p%Z9`csV*B9&<U z*&P>}LJyi>ZJP2_SXI-afnC6OEQk_hX_}-3mY1G*#(3Mgaz%RS!1K0juO#an6&RA z0c+#ir$oeGw=(tB22cuv9F2x();pRKJDL23HNkSPLdnV_FT?6M^uj&)GGbEJHKr?o zXyz3uXyNU8GM$dLs`c*+j}^zVH*7#a1*j{okASVv1xt?r;EY=nF~fSyvylBxfPC-! zlKQLF7A>8lBy%N}d7yxgaafRxgvt(h3IS_G#0V&wzfGvuON)3%wG_LjKsKR(Hoba= zWwEaE(qo=}Shfa8iw1PW(87%Gua9lTH78d7CFxZU*Vd~)H~r6jZ|~+*WJ@ThYf|# zyBvc5?z6TnS-ziuEqR&LuJfr~vgoT^DCTHQz-=65v=I4;(@}U;<50g{Ql(xEw0X-a zz_Hc?jEycOU|UMGRfZPTqkPN)@J~Km67kaZWzgYuMii~Ag?pXyN_R69%IUY;Bb-x7 zBn#_N3K2KYbaEG;{Vn~iX+9vuW4P99LVwhaU^6X~J&+?XPE~(Kl^4RaO3E#~dQu<(e*1HH^_-h5q^?$wJ&pDx9y^3pRq!zhPG%QJ9 zyh5Ykm-Fj)1|5c>(kUIbQN)KzhhdzVFHkWmo-|`m<##b7yiadSQIg~n2g?fZ^?Le= z)E6i-zT+ROIEe>a##bDayz&#)<`Q7QEMUAwu2!{$$PQZ#RZ89xKU4Vg9T_M44^YIV zn678ovWWDWs;mdPUtU%3k=5R>4dWn<5m&F;!H8Ym}H%ILRmWoFTfWW+==o z#@x5K&!(Jf-O1(YX^s)kr4OXKm*@+ujF_vX5lQlI_{0*J`lNR8k*KWJodTX+zt^YU zIoH+s81C$B9r+R$c{p2VI82|;SN4wT_Qhk9j*TucF zkQShgR!CkdwAZl?jJj^&@ZN-CZ=R;{d)^rMrN`&&k>(zq>xoC%w|+f#%Wa-{AesmU z%3*|ack>I(=Bc?OcMA^? zL^*u(V)#F79Dq6fvIu#4Ko^F3;@GksTpj?F1I~H=l>Wp~&~wA|KCUHxFtB%$9K}(m z0nHhk!4|xcQKESEU)}QwSbFs&`{c1LlE_enl*3Kn|IC*SNY`Ct)Apxr4A5uyN8jT= zlprY>w48-V2LtR$ceh;y#)^7!-&QT<_*tu34>-@8Q|&G;`Xd&^)1Gw1E(5)Xr)ig{stl5Q@~`GUQ5acZkaIR zt9GuGCeJhX4(JS>blB3u?&tmK|JFqkvV~$^^%e4>bTGi}rlRK;kj4inG{ygwOh#!tJF1ELaTQyHAA{k1)`xUGlpMBgh=0X4R+*Z^?E|pa<~MxEjybo`QqJ zoyym5I3o=t+ESTImGfZClS~Cn$XfdM9yTjwak;W#EvkPrr0g_?`n+nQ-Cs6Xl;c75 zOanz}MN6!%Q8P4zhdHXY=FyuMm0DTTZR?euxGcp-4Q;C3PyBYcCJ{$4*gJ7-;TqDp z{gGdsLo_4uMR7&cE-vqo1@(oIH)FGeQDxcc>S1<8j_j}5RGlE{1MFQcvur{(6n>Ta zh-6UM(?u7v2d7s=YI&zEy(KEqeuq!R!lSA!shbmAP0EWN_UPDz|3G~pLx5SLyr{D` zc2XMcpsEBe>3%U4@vQ9k5D|2yUWfybAIWNf{kPVS5bs?#Dcw!dy5=+RTiRjwrucXl zXl|u-!`lc^s3&^5tlPiXCiHiVn~Uu3g^+gk(^Yu1vHo_cnaMYP*nI*=Bm$&CQXJfu zyOQ^hJG*g`@Rn(8tpCj`M(X1~5*!s=_lh!)$%!~uX#9Ms!?07;X*W#cSw$}of%z_A z{m=3J8k!A3QeN!nZp_QeYd?W*{9qk|RI3@N6-BuJ9pHZl_}>Bke-q%0lP!8-KB9AH zWQ3V86br%6c$t1erv`<~ZYV_rtwlZ`2>IZNHp_iR+`gKlO8_A11DtRp6=PUl?W5oO=@8KcAnmJQO;Cm8fh z#agm;u$*^X+pJ*qu);2q%XNd(kc|@%(q_9 b>#$QV(T;n?VZQ)>tAHF&JKL4p`rh~_WCYQg literal 0 HcmV?d00001