// Fonction d'insertion d'un élément dans un arbre // Insere l'élément au bon endroit // Equilibre l'arbre ABRe *insertion(ABRe *abr, Noeud **x) { if(!abr) return creer_abr(*x); if(compareN(*x,abr->n)==0) { *x=abr->n; return abr; } if(compareN(*x,abr->n)<0) { if(!abr->g) { ABRe *a=creer_abr(*x); abr->g=a; } else abr->g=equilibre(insertion(abr->g,x)); } else { if(!abr->d) { ABRe *a=creer_abr(*x); abr->d=a; } else abr->d=equilibre(insertion(abr->d,x)); } majHauteur(abr); return equilibre(abr); }
int strStr(const char *haystack, const char *needle) { if (haystack == nullptr || needle == nullptr) return -1; int len2 = length(needle); int charJump[256]; for (auto &jump : charJump) jump = len2 + 1; for (int i = 0; i < len2; ++i) charJump[(unsigned char)needle[i]] = len2 - i; const char *s = haystack; for (;;) { for (int i = 0; i < len2; ++i) { if (s[i] == 0) return -1; } if (compareN(s, needle, len2) == 0) return s - haystack; if (s[len2] == 0) return -1; s += charJump[(unsigned char)s[len2]]; } }
// Ajoute le noeud n au réseau R au bon emplacement void ajoute_au_reseau(Reseau *R, Noeud *n) { CelluleLNoeud *cln=NULL, *clp=NULL, *ln=(CelluleLNoeud*)malloc(sizeof(CelluleLNoeud)); ln->ptrnoeud=n; ln->noeudSuiv=NULL; for(cln=R->LNoeuds;cln;cln=cln->noeudSuiv) { if(compareN(n, cln->ptrnoeud)==-1) { ln->noeudSuiv=cln; if(clp) clp->noeudSuiv=ln; else R->LNoeuds=ln; return; } clp=cln; } if(!R->LNoeuds) R->LNoeuds=ln; if(clp) clp->noeudSuiv=ln; return; }