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 :

Affichage d'une table de hachage


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    etudiante
    Inscrit en
    Avril 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Avril 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Affichage d'une table de hachage
    bonsoir , j'ai un probleme a l'affichage d'une table de hachage ,j'arrive pas a sauter les cases vide
    voila mon code
    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
    40
    41
    42
    43
    44
    45
    46
    47
    typedef struct elttab{
     
        char* NomEntite;
        char* CodeEntite;
        char* TypeEntite;
        int ValEntite;
        struct elttab* svt;
    }TypeTS;
     
    TypeTS* TS;
     
    void init()
    {
        TS=(TypeTS*)malloc(taille * sizeof(TypeTS));
    }
     
     
    void afficher ()
    {
        printf("n/***************Table des symboles ******************/n");
        printf("________________________________________________________n");
        printf("t| NomEntite |  ValeurEntite |n");
        printf("________________________________________________________n");
        int i=0;
        while(i<500)
        {
     
            printf("t|%10s |%12s   n",TS[i].NomEntite,TS[i].TypeEntite);
     
     
            if(TS[i].svt!=NULL)
            {
     
                TypeTS* ti=TS[i].svt;
     
                while (ti!=NULL)
                while(TS[i].NomEntite==NULL){ti=ti->svt;}
                {    printf("t|%10s |%12s   |n",TS[i].NomEntite,TS[i].TypeEntite);
                    ti=ti->svt;
     
                    i++;
     
                }
            }
            i++;
        }
    }

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Tu n'arrives pas à sauter les cases vides parce qu'elles ne sont pas vides:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void init()
    {
        TS=(TypeTS*)malloc(taille * sizeof(TypeTS)); // alloue de la mémoire pour des TypeTS mais sans fixer leurs valeurs, en particulier celle du pointeur svt.
    }
    Du coup quand tu testes:
    il y a des bonnes chances pour que cela soit faux, même si la fonction de hachage n'a jamais retourné cet index de la table.

    Une solution simple est d'utiliser calloc à la place de malloc (http://www.cplusplus.com/reference/cstdlib/calloc/). Calloc alloue la mémoire et en initialise tous les bits à zéro. La syntaxe est légèrement différente.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Je ne comprends pas pourquoi tu utilises TS (une variable globale en plus) à la fois comme un tableau (TS[i]...) et à la fois comme un noeud de liste chainée (avec son élément "svt"). Est-ce que tu manipules un tableau de listes chainées ???

    Et sinon je suis super inquiet de te voir afficher le contenu de "NomEntite" et des autres pointeurs alors qu'ils n'ont pas été alloués (ou alors l'allocation se passe dans une partie du code non montrée ici). Mais dans tous les cas il est impératif de tester la réussite de malloc et gérer ses échecs possibles...
    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 chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    @Sve@r: Une table de hachage c'est un tableau de listes chaînées: les fonctions de hachage peuvent renvoyer le même hash pour des valeurs différentes. Il faut alors les lister en face de l'indice. C'est pour ça qu'il y a un tableau de TS, qui sont des listes chaînées.

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    En fait ça pourrait être un tableau de n'importe quels conteneurs (y compris des arbres binaire de recherche) mais en pratique c'est presque toujours des listes chaînées. La recherche y est linéaire, mais vu qu'il n'est pas censé y avoir beaucoup de collisions (surtout si la table ajuste sa dimension)...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Affichage d'une table de hachage
    Par pymouse dans le forum Langage
    Réponses: 6
    Dernier message: 06/07/2007, 11h35
  2. affichage d'une table en javascript
    Par benkunz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/11/2006, 17h33
  3. Affichage d'une table MySQL
    Par Paniez dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/07/2006, 13h09
  4. Réponses: 2
    Dernier message: 21/06/2006, 09h23
  5. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45

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