From 935a194f3e671ba2fddf5269fd6b7b0dfd9606e7 Mon Sep 17 00:00:00 2001 From: Eduardo Souza <eduardomsouza@ufpr.br> Date: Mon, 28 Oct 2024 18:20:00 -0300 Subject: [PATCH] =?UTF-8?q?[FIX]=20Inser=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a.out | Bin 20816 -> 20816 bytes t2.c | 52 ++++++++++++++++++++++++---------------------------- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/a.out b/a.out index 1fbd779e432f2e38888994a22274d7ae67d21dee..6a41da0680bb893e0b03025c0ca50fefd8f88a81 100644 GIT binary patch delta 1767 zcmcbxi1ETA#tj^doTUN`U{E?)kWrtrgc;0XDB0}EsLv>P#{j~G(~~=y-ix%Iu*?+E zut@8Yyff`P<INKpAM3ts?qPn<%eZ86jo`Jk<~If&owYYSI!iBjbi3a0=yd(y(d~M{ zqto?=N4M*bZUK*O*ALwcoyR<SS({`T7(6<U?*Q5JV&cF5|G{z&3Sh}{WXY0$|NkF% zeFIYX@;d_q!{h>C5t$3!0^P1}z={Kq6<hrK{~x4aa;FeC8-L$CsQSsPgt!&!Ydv~d zxsX-g`wOwxquW8EJM_(D8DS%kW~~dyLAEhKozxouc3fwGLbK}|MyQ~r>l^-_pZ_M$ zmlWl?z~9>Q@BjY^6HZRPCoIWmKKX~RBBSVJDG@owZ<8%WD&>DLFn|mLg~$Vs<E|hs znBUD{>3XF$ck)G%F!4}OSl#gGyynq){Dm;oVXq4&n~O&Cp~x+qJX2JMzg7w<{Oo>D z4v-g{{7Te>k!iBL*ea&)KPR6SYh)~$>?>Zu^!vx;<KopEbw9wKy)pTtnAqe534Xp? z;z&kJnOrL&Ze{c1|Nk@({<;Hc9{hO+Ud;XR|Nkd`odcb&FTmaoebE^p(CzvH9PU$) zwL4EfCn3dGgDfOH`J03lpCz);<;ixEtN12}A=xWE`J1E$p9-?j)5$tg68v_^Li@i> z4v?3aoGs<Vc}o<m`-S!7ZBl{!?GPR$8U6V>Sxj1&FBDnqz~n$_AHJs|U`-HZX_Hq= zFW~b<7TPg6Qsy9EhA@(<my<PQV+H>TAqmxe{{MgSZW)Ei+hj!<O(&m`wVC{0R!rnU z9hXP9>kkiW*B7Pt!L06r$$G-lYHZ!E4?3AZBB0dz032%8$ObO@^#A{a$qPhP`Bn)c z*^@o_znq4~Yh)qQPyhcnyM6(sz8~EV3YM;4Y7Xz`Vqjo+@p`hqe3{tuFaQ68@>_T4 z8&FI^Qql3rx8-G-0=`fFC9lB5^KY_@f-GbIWGe+V#x0W*6=e8k3Lshfe{#2iBKz78 z|Noyn%&>Wrf*=3n1`eM|1}wh8C5c5PR;noqeyJ58nu`G}qHC9(S{a|5Uz&$5SRAdI z5^JTJ!o?8m=;^57?BN*ZssLg-Iyz2fHt4KpU|^JHw(ekHU;q_DF8BZc-^0Mb@Z|pg z|4$eg7{1*9|NjpI14GM$|NoaTFfimk{QqBsk%58n@&ErOj0_CzkN^J<VPs&q^yL5l z5=I6Fg{S}jPhn(WP=5CR{}x6DhMMR9|6gHbV0i!H|Nk$H3=E53{{Jt+#K6G#_Wyqq zCI*J39B=>s4`E_paGxw_s4jWq{{R1Kp#1K_4ss2H3IhX!2?GN|!{k6i^`Ia3{{IIH zgH$juFo-ZPFqAMbFnqZ8|NjK27>JT#U|{HBU|<M*0C5b1E1y6clQS<Hb2lRoI|l<u zehmWy!_kM6PZ`Q7YCrn_-<y$v0inzZt_)Pvg-zx(l4oq0tZ5|Am_FIlNS<-Q<V+)Z zrq9nNcNxhswohJZB(He%6(oS*hA_<rSp~N13?l=B=j4}0@=T{+Z{{-Q<C>gd>%o|@ zd86%dX2ycam5%O=cP1Zne9xFMd83oN<T_E1Cm0y~AQS^A9EBJJ7#b%FI*T(#OxAQZ zXPh!Q(OI1{859Bx3=H0rCpz03-j#)D0L2rCWzEFE0Md6_62xO**aD##{Gj6XlNnvg zC6(nN!cL$NU|?XVgUbG&Jkdp*@z3OyF7AwXH-B{5&%ww#d84mBXNCeqL&oHnzV3`S aCmZ_db0X@dOh0qZ3`3}j%`5$uGXVgE_hn50 delta 1889 zcmcbxi1ETA#tj^doCgIMz~JCyK}LN}6=pDpL1nWiqducxj{$@WrzdwZy%(`~t~z0o zz|GV1_cBbmb<p46{IXm1<{swvyo?_w*9cy#@2tJy(d~M}qto?+M>hyNXn1tG{y6UX z0%Y1t2Sx@4sJKLT=nIeJOCARwF?ldv=oSD8cQaTXs#659Jh~mQDEI+Z5Cu{I)&S=7 z_dR2Pnd*&A*9VZUdR34vJjU|(FMt~ZHf6G}uu*-t>x)j;H?PeRn%{sN-F%1<?C@S5 zu)86~f@Q$oIn>SA$<*xnh7qK#+d-lE1*4_wo0?rvZg0SU5UVplp*i;jW3%fEm^w?> z7yLaN{{06@{{V%dAV{5uwd)Q3)~0{||4*0@JNb^VB%|r%Z^DX<!jmOL<QTt9HW#U6 zd^LHah%95;<ntn70<IrCI*-4Q_zO1X!|Tk+Hlopd5W%&7z=Ag>*UPE$SxYf6cyu1$ z0g9OyUX$;OdNcA())rgE#QbaWb+JaqhRKoQ6-?|uCtnt?X6%~mFQH>PLmWxVf*=3? zr}4i(`H5f4_ez=vf8B{R5B|IZFFZiv9{hC&Al#LcH%Q3v1tIJ7pL|O~iq8sJNPRMs zq!r(HF(mWvPxg{r#pj1Cq&}HRO2hP#D3Yp=-~Rt^cKyQGT>C}7?xaVz>yK`R&SM_E ztbdSIo&GlYfvDKzQYjbC84&Ro?voEm1@gN>c#uHg_%>NdT9;24S?tW@SZN==#Ue;n z7ERtRy+Du~S?I`@|Nkco$jDA^m08HACXA%`>tqwzSiaptNJ3qc=gV3!I!?YJYf}$) zFenlI@aT5X=w`4yR4WA*W3Y66P{$8qLM2=u)aik^kdzM<JXDtf76YlSM^#<#2a*A) z^XM*+fU&y+6necFJ3SOUk`H+te4x$b(JR8%?fRgT38bQ10K^1^-flr82N!($|Nphr z<U}bk7MuV7|ASKxKe7V3$(!UfGy{-@UVMba3)ol(1xwd2HHY_eF)%Q^nD-GJ7n1Vv zVspOy{|`#%-Jx$lDZTR=DCOo&?vs~g`u=V5T6qPg&3`AKmzQNUoBUQ@O*{JM|NkDn zr7t{seV=&rhTiw+b$#I3`N0Dm-~afLT)b(roq{4;!iWF=PafW!rr^gv$$({YkU>X1 zqcpR12Ll5GsOXz=|Ns9z3=9k=5B~pu!oa}b^5FmfKMV{ES04QTzl4E-VeiBL|3w%X z7=j=F|8K&`z;N^N|NkM33=CpV|Nk#xWMD{n`v3nFMh1rTXaE0iVPs%9@cjS(D~t>b z#xMW>|H8<?@ciZf{~}Bb46bkg|2JV`U~qc(pY4AL69dDO$%%&Qk{S>G|5pQLJ{NY7 zYZz2OPGMkRxG;I4p?Z+V{r~^L!XOn43=AR+3=Aa<3=9tU|Nox=6$4Q+3=9lC3=9kl zAN>D6jgf(Y!Ie*-jmeppjk%YRhn<4~B)^7%fkFJyWGN###o9;z|J$M{Gl466!@$5W zYjUKKJmZPUl}7T6t0&Jil4pD}d8d&)llk+>w~XW%Pfz}7B(KQ%`v3pGAj@HPF?|79 z1-9!9BLl;;$(F|QOc`%BM;Y^RO>W=_n4Dqj!MJ7fM%&}ej0%%09o-pwCLeTs&$wms zMkja4MWP_H7#RE@6ay$Mg%|`F&P^6{7H9OCtm$mdIBjyGvpQ!gC=?hN7;Gm`bhbCV zC=1a5b_xRngEbQa14!R~Nr?Cs2*uzB6)&F5=u$3OAP*6C0)+wt14A8D_VeV4F5-+I zCa-jHXS~1pqsx8{#-Pa?ef2rFC_pr9nf%h%ow0kep`Sh{qE^iGGv|~rgs70%ywYzu F696YNs^9<s diff --git a/t2.c b/t2.c index 47928af..4e98f5a 100644 --- a/t2.c +++ b/t2.c @@ -21,25 +21,24 @@ typedef struct DHT { int max_id; } DHT; -void redistribute_keys(Node* new_node) { - Node* current = new_node; +void redistribute_keys(Node *dht, Node* new_node) { + Node *start = dht; do { - Node* next_node = current->next; - // Transferir chaves que são menores ou iguais ao id do próximo nó - for (int i = 0; i < current->key_count; i++) { - if ((current->keys[i] > current->id && current->keys[i] <= next_node->id) || - (current->id > next_node->id && (current->keys[i] > current->id || current->keys[i] <= next_node->id))) { - next_node->keys[next_node->key_count++] = current->keys[i]; - // Remover a chave do nó atual - for (int j = i; j < current->key_count - 1; j++) { - current->keys[j] = current->keys[j + 1]; - } - current->key_count--; - i--; // Reavaliar a posição atual + Node* current = new_node; + printf("Start:%d Next:%d\n", start->id, current->id); + printf("Start->key_count:%d\n", start->key_count); + //O novo nodo deve ter as chaves EXISTENTES que são maiores que o antecessor e menores ou iguais a ele + for (int i = 0; i < start->key_count; i++) { + printf("Start->keys[%d]:%d\n", i, start->keys[i]); + if (start->keys[i] > start->id && start->keys[i] <= current->id) { + printf("SAIA CHAVE SAIAAAA"); + current->keys[current->key_count++] = start->keys[i]; + start->keys[i] = 0; + start->key_count--; } } - current = next_node; - } while (current != new_node); + start = start->next; + } while (start != new_node); } // Função para criar um novo nó @@ -77,7 +76,7 @@ Node *insert_node(Node *head, int id, int max_id) { new_node->next = head; new_node->prev = last; head->prev = new_node; - redistribute_keys(new_node); + redistribute_keys(head, new_node); return new_node; // Novo nó se torna a nova cabeça } @@ -91,8 +90,7 @@ Node *insert_node(Node *head, int id, int max_id) { new_node->next = current; new_node->prev = prev; current->prev = new_node; - - redistribute_keys(new_node); + redistribute_keys(head, new_node); return head; } @@ -270,16 +268,14 @@ void insert_key(Node* head, int node_id, int key) { while (current->id != node_id) { current = current->next; } - do{ - if ((current->id < current->next->id && key > current->id && key <= current->next->id) || - (current->id > current->next->id && (key > current->id || key <= current->next->id))) { - current->next->keys[current->next->key_count++] = key; - printf("Chave %d inserida no nó %d\n", key, current->id); - return; - } - current = current->next; - } while (current != head); + //A partir no nosso nó, procuramos o próximo nó que cabe a chave + while(current->id < key && current != head){ + current = current->next; + } + + current->keys[current->key_count++] = key; + printf("Chave %d inserida no nó %d\n", key, current->id); } void imprime_chaves(Node* head) { -- GitLab