IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Implementation d'une file par un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 40
    Par défaut Implementation d'une file par un tableau
    Bonsoir tout le monde , je bloque sur un programme qui permet d'ajouter en queue de la file un élément, alors j'ai mon fichier .h et .c je bloque sur la fonction initialiser sachant que la structure possède le tableau sur lequel on doit ajouter l'élément je ne sais comment je pourrais l'initialiser si quelqu'un pourrait m'aider s'il vous plait .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #ifndef H_FILO
    #define H_FILO
     
    typedef struct  {
     
    int *tab;
    int tete;
    int queue;
    int taille;
    } fifo;
     
    fifo *Initialiser();
    void empiler(fifo *f);
    int defiler(fifo *f);
     
    #endif
    fichier .h


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include<stdio.h>
    #include "filo.h"
    #include<stdlib.h>
     
    fifo *Initialiser( ) {
     
    file->tete=0;
    file->queue=0;
    }
     
     
    int estVide(fifo *file){
     
    int res=0;
     
    if (file->tete == file->queue){
    	res= 1;}
     
    return res;}
     
     
     
    void ajouter(fifo *file,int element){
     
    	if(file->queue==file->taille){
    	file->queue=1;}
    	else{
    	file->queue=(file->queue)+1;}
     
    file->tab[file->queue]=element;
     
    }
     
    int main () {
     
    fifo *file=Initialiser();
     
    printf("Afficher l'ajout de la queue");
    ajouter(  file   ,88);}

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par Marwaa45 Voir le message
    je bloque sur la fonction initialiser sachant que la structure possède le tableau sur lequel on doit ajouter l'élément
    C'est bien simple : tu as un pointeur (ton tableau) et une taille.
    Pour l'initialisation, tu as 2 façons de faire
    • une paresseuse ("lazy" en anglais) - tu récupères la taille et tu initialises les autres attributs à zéro ou NULL. La création du tableau se fera au 1ier enfilement ("enqueue" en anglais) par exemple ou à toi de voir.
    • une avec création de ton tableau - tu récupères la taille, tu fais ton malloc et tu initialises les autres attributs à zéro (avec une gestion d'erreur en cas de problème mémoire ou de taille nulle/ trop petite)

    Donc ta fonction qui retourne une file (un pointeur) c'est nul - ton tableau est dans ta structure et tu n'as pas de problèmes d'adresses locales temporaires.
    Et faire une fonction sans retour c'est nul - mais on va dire que tu tâtonnes


    Citation Envoyé par Marwaa45 Voir le message
    un programme qui permet d'ajouter en queue de la file un élément
    On dit enfiler ("enqueue" en anglais) Et apparemment, cela va dépendre de comment tu défiles ("dequeue" en anglais)
    • Si à chaque fois que tu défiles, tu fais un décalage de tous les éléments. Alors 1) ta tête sera toujours la première case 2) tu enfileras tant que ton tableau n'est pas rempli (la taille n'est pas dépassée)
    • Si à chaque fois que tu défiles, tu avances la tête. Alors tu vas avoir des éléments vides peut-être à la fin mais aussi peut-être au début. Et dans ce cas, est-ce que tu fais une gestion comme un tableau circulaire ?

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Salut
    Citation Envoyé par Marwaa45 Voir le message
    je ne sais comment je pourrais l'initialiser si quelqu'un pourrait m'aider s'il vous plait
    Bien volontier

    Le souci c'est qu'en écrivant fifo *file=Initialiser() tu considères que "Initialiser" va créer la fifo. C'est pas interdit, mais alors il faut vraiment que la fonction la crée en mémoire. Ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fifo *Initialiser() {
    	fifo *pt;
    	pt=malloc(sizeof(*pt));
    	if (pt == NULL) return NULL;
    	pt->tete=0;
    	pt->queue=0;
    	pt->tab=NULL;
    	return pt;
    }
    Et bien entendu, puisque la fonction alloue la mémoire pour la fifo, celle-ci ne peut pas être créée en auto. Autrement dit, pas de fifo file.

    Ou alors tu considères que "Initialiser" part du principe que la fifo existe déjà et se contente de tout mettre son contenu à 0. Dans ce cas, elle doit recevoir la fifo à remplir (exactement comme tu le fais pour "estVide" ou "ajouter")...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Initialiser(fifo *file) {
    	file->tete=0;
    	file->queue=0;
    	file->tab=NULL;
    }

    Et c'est ailleurs (dans le main ou autre) que tu fais le choix de partir sur un pointeur alloué ou une variable auto
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main() {
    	fifo file1;
    	fifo *file2=malloc(sizeof(*file2));
    	Initialiser(&file1);
    	Initialiser(file2);
    }

    Petit conseil en plus: pense à utiliser le préfixe "t_" pour tes types persos. Déjà utiliser "t_fifo" te permettra d'utiliser "fifo" comme nom de variable et surtout on voit de suite en lisant le code ce qui est "nom de type" et "nom de variable".

    PS: pense aussi qu'il te faudra quoi qu'il arrive allouer "tab".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 40
    Par défaut
    Merci beaucoup pour vos réponses ça m'a beaucoup aidé

Discussions similaires

  1. [Débutant] Remplacer le contenu d'une colonne par un tableau de correspondance
    Par PaulAtray dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/04/2017, 18h20
  2. Changer une fonction qui utilise une liste par un tableau!
    Par sara21 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/05/2007, 13h18
  3. donner une valeur par defaut à un champ file
    Par Davboc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/02/2006, 11h26
  4. passer d'une cellule d'un tableau a une autre par lien hyper
    Par jack_1981 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 28/12/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo