コード例 #1
0
ファイル: nextfit.c プロジェクト: LilyOfTheWest/M1-Info
//fonction permettant d'insérer un processus dans la liste occupee selon une taille et une adresse
int insere_occupe_nf(int a, int t, liste *l_occupe){
    liste it_occupe = *l_occupe;

    //si la liste est vide alors on créé simplement un noeud sans suivant
    if(it_occupe == NULL){
        *l_occupe = creer_noeud(a, t, NULL, NULL);
        return 1;
    }
    //si la premiere cellule de la liste a déjà une adresse supérieure à celle qu'on veut mettre, alors on créé un noeud au tout début de la liste
    else if(it_occupe->adresse >= a){
        *l_occupe = creer_noeud(a, t, NULL, it_occupe);
        return 1;
    }
    else{
        //sinon on parcours notre liste tant qu'on est pas arrivé à la fin et que l'adresse est inférieure
        while(it_occupe->suivant != NULL && (it_occupe->suivant)->adresse < a){
            it_occupe = it_occupe->suivant;
        }

        //on est arrivé à la fin de la liste, on rajoute donc une cellule
        if(it_occupe->suivant == NULL){
            it_occupe->suivant = creer_noeud(a, t, NULL, NULL);
            return 1;
        }
        //sinon on insere une noeud entre it_occupe et it_occupe->suivant
        else{
            it_occupe->suivant = creer_noeud(a, t, NULL, it_occupe->suivant);
            return 1;
        }
    }
}
コード例 #2
0
ファイル: arbre.c プロジェクト: Maerig/NF16-TP5
NodePtr saisie_expression()
{
    Pile* stack = creer_pile();
    char c = '\0';
    NodePtr tmp;
    while (c != '\n')
    {
        c = getchar();
        switch (c)
        {
            case '+':
            case '*':
                tmp = creer_noeud(c, '\0');
                tmp->right = depiler(stack);
                tmp->left = depiler(stack);
                empiler(stack, tmp);
                break;
            default:
                if (c >= '0' && c <= '9') // Si le caract�re saisi est un chiffre
                    empiler(stack, creer_noeud('\0', c - '0')); // On l'empile on le convertissant en entier
                else if (c >= 'a' && c <= 'z') //	Le caract�re est une variable
                    empiler(stack, creer_noeud(c, '\0'));
                else if (c != '\n' && c != ' ')
                    printf("Erreur de saisie.\n");
                break;
        }
    }
    return depiler(stack);
}
コード例 #3
0
ファイル: nextfit.c プロジェクト: LilyOfTheWest/M1-Info
//fonction permettant d'ajouter une liste libre selon une adresse, une taille, une liste libre et une liste occupée
liste liberer_nf(int a, int t, liste *l_libre){
    liste it_libre = *l_libre;
    liste it_libre2 = NULL;

    //si la liste libre est vide alors on créé simplement un noeud
    if(it_libre == NULL){
        *l_libre = creer_noeud(a, t, NULL, NULL);
        return *l_libre;
    }
    //sinon si la première cellule a déjà une adresse supérieure à celle qu'on veut mettre, on créé un zone libre au tout début de la liste
    else if(it_libre->adresse >= a){
        *l_libre = creer_noeud(a, t, NULL, it_libre); 

        //on fusionne éventuellement les zones libres adjacents
        fusion_nf(NULL, *l_libre, (*l_libre)->suivant);

        return *l_libre;
    }
    else{
        //on se déplace pour trouver l'endroit ou il faut mettre notre zone
        while(it_libre->suivant != NULL && (it_libre->suivant)->adresse < a){
            it_libre = it_libre->suivant;
        }

        //si le suivant est null on est à la fin de la liste donc on rajoute simplement un noeud à la fin de la liste libre et on fusionne les zone libres adjacents
        if(it_libre->suivant == NULL){ 
            it_libre->suivant = creer_noeud(a, t, it_libre, NULL); 

            fusion_nf(it_libre, it_libre->suivant, NULL);

            return it_libre->suivant;
        }
        else{
            //sinon on insere une zone libre entre deux noeuds et on fusionne éventuellement les zones libres adjacents
            it_libre2 = it_libre->suivant;
            it_libre->suivant = creer_noeud(a, t, it_libre, it_libre2); 

            fusion_nf(it_libre, it_libre->suivant, (it_libre->suivant)->suivant);

            return it_libre->suivant;
        }
    }

}
コード例 #4
0
ファイル: abr.c プロジェクト: Kevcoq/Li213-C_Reseau_projet
// Cette fonction recherche si le noeud existe dans l'arbre, si il existe le retourne
// sinon l'ajoute au réseau et à l'insere dans l'arbre
Noeud* recherche_cree_noeud_abr(Reseau *R, ABRe **abr, double x, double y) {
  Noeud *n=creer_noeud(R->nbNoeuds++);
  n->x=x;
  n->y=y;
  *abr=insertion(*abr,&n);
  if(n->u == R->nbNoeuds-1)
    ajoute_au_reseau(R, n);
  else 
    R->nbNoeuds--;
  return n;
}
コード例 #5
0
ファイル: bestfit.c プロジェクト: LilyOfTheWest/M1-Info
//fonction permettant d'ajouter une zone libre dans la liste libre donnée selon une adresse et une taille donnée
liste liberer_nf(int a, int t, liste *l_libre){
    liste it_libre = *l_libre;
    liste noeud = NULL;
    liste fin = NULL;

    //si la liste libre est vide alors on créé simplement un noeud, on fait pointer le suivant et le precedent sur lui-même puis on le retourne
    if(it_libre == NULL){
        *l_libre = creer_noeud(a, t, NULL, NULL);
        (*l_libre)->precedent = *l_libre;
        (*l_libre)->suivant = *l_libre;
        return *l_libre;
    }
    //sinon si la première cellule a déjà une adresse supérieure à celle qu'on veut mettre, on créé un zone libre au tout début de la liste
    else if(it_libre->adresse >= a){
        //on créé un noeud et on met à jour les suivant et les precedent, puis on modifie la liste libre de telle sorte qu'elle pointe sur notre nouveau noeud
        noeud = creer_noeud(a, t, NULL, NULL);
        noeud->precedent = it_libre->precedent;
        noeud->suivant = it_libre;
        it_libre->precedent = noeud;
        (noeud->precedent)->suivant = noeud;

        *l_libre = noeud;

        //on fusionne éventuellement les zones libres adjacents
        fusion_nf((*l_libre)->precedent, *l_libre, (*l_libre)->suivant);

        return *l_libre;
    }
    else{
        //on construit un pointeur qui nous permettra d'arrêter notre boucle
        fin = it_libre;

        //on se déplace pour trouver l'endroit ou il faut mettre notre zone
        while(it_libre->suivant != fin && (it_libre->suivant)->adresse < a){
            it_libre = it_libre->suivant;
        }

        //si le suivant est la fin, alors on ajoute un noeud à la fin de notre liste circulaire
        if(it_libre->suivant == fin){ 
            noeud = creer_noeud(a, t, NULL, NULL); 
            noeud->suivant = fin;
            noeud->precedent = it_libre;
            it_libre->suivant = noeud;
            fin->precedent = noeud;

            fusion_nf(it_libre, noeud, fin);

            return noeud;
        }
        else{
            //sinon on insere une zone libre entre deux noeuds et on fusionne éventuellement les zones libres adjacents
            noeud = creer_noeud(a, t, NULL, NULL); 
            noeud->suivant = it_libre->suivant;
            noeud->precedent = it_libre;
            it_libre->suivant = noeud;
            (noeud->suivant)->precedent = noeud;

            fusion_nf(it_libre, noeud, noeud->suivant);

            return noeud;
        }
    }

}
コード例 #6
0
ファイル: arbre.c プロジェクト: EtienneLav/NF16-Algorithmique
int ajouterMot(ArbreBr* a, char* mot, int ligne, int ordre, int numphrase){
    // Chercher si le mot est déjà présent dans l'arbre (fonciton existante)
    NoeudABR* noeud_temp = rechercher_noeud(a, mot);


    if (noeud_temp != NULL){
        // Si oui, il existe ajouter position (fonction existante)
        if(ajouter_position(noeud_temp->positions, ligne, ordre, numphrase))
        return 1;
    }

    else{
        // Sinon créer nouveau noeud grâce à la fonction creer_noeud et inrecrementer nomre de mots differents

        a->nb_mots_differents = a->nb_mots_differents+1;
        noeud_temp= creer_noeud();

        strcpy(noeud_temp->mot,mot);  // Lui attribue le mot actuellement traité

        ajouter_position(noeud_temp->positions, ligne, ordre, numphrase);
        noeud_temp->filsGauche=NULL;
        noeud_temp->filsDroit=NULL;


        //l'insérer dans l'arbre
        if (a->racine==NULL){  //en tant que racine de l'arbre
            a->racine=noeud_temp;
            return 1;
        }

        else{
            //insérer dans arbre en tant que noeud different de la racine
            NoeudABR* noeud_arbre = a->racine;
            NoeudABR* noeud_y = NULL;

            while(noeud_arbre!=NULL){
                noeud_y=noeud_arbre;
                if(stricmp(noeud_temp->mot,noeud_arbre->mot)<0){
                    noeud_arbre=noeud_arbre->filsGauche;
                }
                else{
                    noeud_arbre=noeud_arbre->filsDroit;
                }
            }


            if(noeud_y==NULL){
                a->racine=noeud_temp;
            }
            else{
                if(stricmp(noeud_temp->mot,noeud_y->mot)<0){
                    noeud_y->filsGauche=noeud_temp;
                }
                else{
                    noeud_y->filsDroit=noeud_temp;
                }
            }

            //noeud_temp->filsGauche
            //noeud_temp->filsDroit
            return 1;
        }

    }

}