Beispiel #1
0
// 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]];
		}
	}
Beispiel #3
0
// 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;
}