Пример #1
0
Файл: pile.c Проект: CrowPg/UV
pEmploye chercherEmployePile(pPile p, int num)
{
    pPile p2 = creerPile();
    pEmploye pE=NULL;
    pEmploye pE2=NULL;


    if(p == NULL)
    {
        perror("erreur: pile.c : fonction chercherEmployePile: pointeur NULL");
        return NULL;
    }

	if (pileVide(p)) {
		printf("erreur: pile.c : fonction chercherEmployePile: la Pile est vide\n");
		return NULL;
	}

    while(!pileVide(p))
    {
        pE2 = SommetEmploye(p);
        if((pE2->num) == num)
        {
            pE = pE2;
            break;
        }
        else
        {
            depiler(p);
            empiler(p2,pE2);
        }
    }

    while(!pileVide(p2))
    {
        pE2 = depiler(p2);
        empiler(p,pE2);
    }

    supprimerPile(p2);
    return pE;
}
Пример #2
0
pNoeud supprimerNoeud(pNoeud arbre, pNoeud noeud)
{
       pNoeud pn, pnS;

       if(arbre==NULL || noeud==NULL)
       {
         perror("erreur: arbre.c : fonction supprimerNoeud: pointeur NULL");
         return arbre;
       }

       if(noeud->gch==NULL && noeud->drt==NULL) // si c'est une feuille
       {
         pn = noeud->pere;
         if(pn == NULL)
               arbre = NULL;
         else if(noeud == pn->gch)
               pn->gch = NULL;
         else
               pn->drt = NULL;
       }
       else if(noeud->drt==NULL)  // fils gauche n'est pas nul
       {
            pn = noeud->pere;

            if(pn == NULL)
              arbre =  noeud->gch;
            else if(noeud == pn->gch)
              pn->gch = noeud->gch;
            else
              pn->drt = noeud->gch;

            noeud->gch->pere = pn;
       }
       else if(noeud->gch==NULL) // fils droit n'est pas nul
       {
            pn = noeud->pere;

            if(pn == NULL)
              arbre =  noeud->drt;
            else if(noeud == pn->gch)
              pn->gch = noeud->drt;
            else
              pn->drt = noeud->drt;

            noeud->drt->pere = pn;
       }
       else  //tous les deux fils ne sont pas nul
       {
           pnS = succeseurABR(noeud);

           if(pnS == pnS->pere->gch)
             pnS->pere->gch = NULL;
           else
             pnS->pere->drt = NULL;

           pnS->pere = noeud->pere;
           pnS->gch = noeud->gch;
           pnS->drt = noeud->drt;

           if(pnS->pere==NULL)
             arbre = pnS;
           else if(pnS == pnS->pere->gch)
             pnS->pere->gch = pnS;
           else
             pnS->pere->drt = pnS;

           if(pnS->gch != NULL)
             pnS->gch->pere = pnS;
           if(pnS->drt != NULL)
             pnS->drt->pere = pnS;
       }
         supprimerPile(noeud->pileEmploye);
         free(noeud);

         return arbre;
}