Binärer Suchbaum: Hash bzw. Schlüsseltransformation, Ergebnis: Hashtabellen -> ?Datenstruktur Graphisch?



  • Hallo Freunde

    Ich habe hier folgendes Problem, und zwar habe ich hier ein Programm und will dessen Datenstruktur graphisch darstellen. Jedoch habe ich keine Ahnung wie. Kann mir jemand dabei helfen?

    Binärer Suchbaum: Hash bzw. Schlüsseltransformation. Ergebnis: Hashtabellen

    /* hashtab.c  .. Schluesseltransformation .. hashing .. Hashtabelle */
    #include <stdio.h>
    #include <process.h>
    #include <string.h>
    #include <conio.h>
    
    #define LEN 37        /* Primzahl */
    #define NINDEX 3      /* um NINDEX weiterschalten */
    #define LWORT 10      /* max Wortlaenge */
    
    struct { char rwort[LWORT+1]; int anzahl; } hashtab[LEN];
    
    /* Funktionsdeklarationen */
    
    void printht();           /* Ausgabe der Hashtabelle */  
    int eintragen (char *w);      /* Wort eintragen */
    int hash (char w []);         /* hash Funktion */
    
    int main() {
     FILE *fp;
     char wort[2*LWORT];
     int i;
    
     for(i=0;i<LEN;i++) {    /* Vektor initialisieren */
        hashtab[i].rwort[0]='\0';
        hashtab[i].anzahl=0;
     } /* end for */
    
     fp=fopen("resworte.txt","r");
     if (fp==NULL) { fprintf(stderr,"Datei nicht vorhanden \n"); exit(1);}
     while (fscanf(fp,"%s%",wort) > 0)    /* solange Daten verfuegbar sind */
      if(eintragen(wort)==0)
        fprintf(stderr,"Hashtabelle voll, \"%s\" nicht eingetragen\n",wort);
      /* alle Woerter eingetragen, wenn genuegend Platz in der Tabelle */ 
     fclose(fp);
     printht();     /* Tabelle ausgeben */
     getch();
     return 0;
    } /* end main */
    
    void printht() {
     int i;
     printf("\n Hash-Tabelle :\n");
     for(i=0;i<LEN;i++)
        printf(
               "Htab[%2d]:%10s %2d %2c",
                i,
                hashtab[i].rwort[0]=='\0' ? "LEER" : hashtab[i].rwort,
                hashtab[i].anzahl,
                (i+1)%3 == 0 ? '\n' : ' ');
     printf("\n\n");
    } /* end printh */
    
    int eintragen(char *w) {
     int hi,first;
     first=hi=hash(w);   /* first ist erster Index */
     while(strlen(hashtab[hi].rwort))   /* Platz belegt */
       if((hi=(hi+NINDEX)%LEN)==first)  /* Tabelle voll */
         return 0;
     /* freier Platz mit Index hi */
     strcpy(hashtab[hi].rwort,w);
     hashtab[hi].anzahl++;
     return 1;
    } /* end eintragen */
    
    int hash(char w[]) {
     int i, hindex=0;
     for(i=0;w[i]!='\0';i++)
       hindex+=(int)w[i];
     return hindex%LEN;
    } /* end hash */
    
    /* daten in resworte.txt
    
    auto break case char const continue default do
    double else enum extern float for goto if int
    long register return short signed sizeof static
    struct switch typedef union unsigned void volatile
    while
    
    */
    

    download resworte.txt: http://www.exxon-impex.com/resworte.txt

    Ich hoffe das sich da jemand auskennt mit der graphischen Darstellung der Datenstruktur und mir helfen kann, mfg Ozal



  • Wie grafisch soll denn deine Darstellung sein ?

    Mit deiner Funktion printht() kann man das Ganze auf die Konsole herausschreiben.

    Wenn man das Ganze auf einer GUI sehen will muss man sich eine GUI basteln. Da du anscheinend Windows (hoffentlich Visual Studio) benutzt, kannst du einfach eine Resource-Datei erstellen und darin einen Dialog erzeugen. In dem Dialog könnte man beispielsweise eine List-Box nutzen um die Hashtabele auf einer GUI anzuzeigen.



  • Ich bnutze Bloodshed DEV C/C++

    Die Darstellung soll glaub ich nur schematisch sein, also nur ganz spartanisch mit ein paar boxen oder so, weis jemand wie das dann aussieht?

    mfg Zolak



  • Na.. zeichen einfach die Hashtabelle und schreib in jede Zelle ihren Inhalt 😕

    Irgend so was Primitives:

    position 0:  Wort1
    position 1:  Wort2
    ...
    position37: Wort37
    

    Aber das Ganze klingt nach einer Hausaufgabe. Bist du sicher dass dein Lehrer nicht will, dass du's einfach AUF PAPIER zeichnest?



  • JA das soll so ne Ausarbeitung werden und keiner hat nen Plan davon.

    Ich werde mal deinen Rat befolgen und iergendwas in der Richtung machen, dankeschön


Anmelden zum Antworten