Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C] creare hashtable

  1. #1

    [C] creare hashtable

    per un progettino dell'uni devo realizzare una hashtable implementata con liste di trabocco.. aiutatemi a non perderi

    stando a quanto dice il testo la hashtable sarà un vettore di puntatori ad una lista, che a sua volta è un puntatore ad una struct... giusto?

    ovvero:

    typedef struct elem
    {
    char* valore[15];
    struct elem * next;
    }List;
    typedef List* stack;
    typedef stack* HashTable[20];

    giusto?


    quindi

    Hashtable ht; //crea il vettore

    //ciclo che inizializza il vettore a null
    for(i=0;i<20;i++)
    {
    ht[i] = NULL;
    }

    a questo punto ho un array di puntatori a nulla... ovvero non esiste nessuna lista.. o meglio.. il puntatore di testa di tutte le liste è null.. giusto?

    poi quando creo una lista avrò che l'elemento i-esimo del vettore punterà alla lista i-esima...

    quindi ht[i] punterà ad un puntatore alla lista... giusto? quindi di fatto è un doppio puntatore?

    Fatemi sapere se sbaglio in qualcosa.. devo sbrogliarmi un po' le idee

    PS: avrei frettina..

  2. #2
    se quanto ho supposto su è giusto...

    perchè il codice seguente va in crash [con dev c++.. mo' provo su linux.. ma immagino venga fuori un "bel" segmentation gault ]?

    int h = hash(key,dim); //funzione che calcola l'hash di una stringa..

    //devo inserire la stringa nella posizione corrispondente al suo hash

    stack t = (stack)malloc(sizeof(List));
    strcpy(t->valore, key);
    t->next = *(ht[h]);

    questo secndo la mia logica vorrebbe dire assegnare a t->next il valore a cui punta l'elemento ht[h]... ovvero NULL inizialmente...


    sbaglio qualcosa???

  3. #3
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    Originariamente inviato da }gu|do[z]{®©
    una tabella di hash con liste di trabocco ovvero un vettore di puntatori a liste...

    insomma.. ogni elemento del vettore rappresenta la testa di una lista.. compris?
    ma porco zio usare le vector e le list vi pare male ?

    se ho capito bene dovrebbe essere una cosa tipo così

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    typedef struct elem 
    { 
    	char valore[15]; 
    	struct elem* next;
    } List; 
    
    typedef List stack; 
    //typedef stack[20] HashTable; 
    
    int main()
    {
    
    stack* ht[20];
    //Hashtable ht; //crea il vettore 
    
    //ciclo che inizializza il vettore a null <-- :dottò:
    for(int i=0;i<sizeof(ht)/sizeof(stack*);i++) { 
    	ht[i] = (stack*)malloc(sizeof(stack));
    	char s[20];
    	sprintf(s, "Valore: %d\n", i);
    	strcpy(ht[i]->valore, s);
    	printf(ht[i]->valore);
    }
    
    	stack* htPtr = &(*ht[0]);
    	printf((htPtr++)->valore);
    
    	system("pause");
    	return 0;
    }
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  4. #4
    aspè.. andiamo per gradi... questa è una lista:

    typedef struct elem
    {
    char valore[20];
    struct elem * next;
    }List;
    typedef List* lista;

    e fin qui non credo che ci siano errori, no?

    il tipo hashtable dev'essere un vettore di puntatori a liste... ogni elemento del vettore sarà in pratica la testa della lista....

    è giusto definirlo così?

    typedef lista* HashTable[256];


    Ovviamente non posso usare librerie diverse da quelle standard.. il prof ci ha vincolato solo ad alcune librerie di base

  5. #5
    PS: nel testo del prof c'è scritto che è necessario definire, oltre alla lista, il tipo di dato hashtabel.. per questo devo afre quel typedef

  6. #6
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    Originariamente inviato da }gu|do[z]{®©
    è giusto definirlo così?

    typedef lista* HashTable[256];
    Si

    In questo modo il dato dichiarato con tipo HashTable sarà automaticamente un vettore da 256 elementi, che a loro volta saranno puntatori ad una struttura List.
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  7. #7
    Originariamente inviato da pixer
    Si

    In questo modo il dato dichiarato con tipo HashTable sarà automaticamente un vettore da 256 elementi, che a loro volta saranno puntatori ad una struttura List.
    ho trovato l'errore...


    il tipo List lo definivo già nella struct... quindi praticamente avevo fatto una definizione di hashtable come puntatore ad un puntatore a List... per errore... perchè mi era rimasta quella convinzione di dover definire la list [in realtà l'avevo fatto nel dichiarare la struct] e la hastable come vettore a lista ^__^


    in pratica mi sa che avevo fatto un vettore di puntatori a liste di liste

    vabbè.. tutto bene quel che finisce bene.. completo il progettino sperando di non fare altre fagianate

  8. #8
    ciao,
    potresti postarmi il codice corretto ? sarei interessato anke io a vedere il funzionamento di una hashtable con le liste di trabocco :-)
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

  9. #9
    Originariamente inviato da rocco.g
    ciao,
    potresti postarmi il codice corretto ? sarei interessato anke io a vedere il funzionamento di una hashtable con le liste di trabocco :-)
    il codice completo per fare cosa?

    esattamente?

    la definizione è questa

    typedef struct elem
    {
    char valore[20];
    struct elem * next;
    }List;
    typedef List * HashTable[256];


    chiaramente il vettore si potrebbe anche rendere dinamico

    poi io pe ril mio progetto devo fare varie cose che non so se ti interessano, e in ultimo aggiungere cercare e cancellare elementi dalle liste di trabocco...

    aggiunta e ricerca le ho già fatte.. la cancellazione la devo fare stamattina


  10. #10
    mm ok grazie !
    avevo studiato le liste ma non avevo mai realizzato qualcosa di funzionante con queste...

    utilizzerò la tua struct per provare a fare qualcosina :-)
    http://www.mangaitalia.net/

    questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.