Porblem mit Hashtabelle



  • Hallo zusammen,
    ich versuche gerade im rahmen meines Studiums eine Einfache Hashtabelle zu implemntieren.
    Hierzu soll dynamisch ein Array angelegt werden und in diesem Array sollen dann Doppelt verkettete Listen untergebracht werden.
    Das soll dann folgender maßen aussehen

    1[] -> 123312->7432
    2[] -> ~~~~~
    3[]->~~~~~~~
    4[]->23
    5[]->324->89324->243
    6[]~~~~~
    etc.
    Die tilden Stehen für noch nicht gefüllte Felder.
    Die Funktionen für die Doppelt verketteten Listen habe ich soweit angelegt und ich habe auch die STruktur soweit fertig, allerdings habe ich absolut keine Ahnung wie ich Syntaktisch die Verlinkung von dem Array mit den Verketteten Listen hinbekommen soll :(.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    typedef int bool;
    #define true 1
    #define false 0
    
    typedef struct list {
        int data;
        struct list *prev;
        struct list *next;
    } list_t;
    
    
    list_t *listNew(int val, list_t *prev, list_t *next) // Neue Liste anlegen
    {
        list_t *list = (list_t*)malloc(sizeof(list_t));
        list->data = val;
        list->next = next;
        list->prev = prev;
        return list;
    }
    
    void listAddElement(list_t *head, int val) // Element hinzufügen
    {
        if (head == NULL)
        {
            printf("ERROR: Head is Empty!"); // wenn keine Liste erstellt ist entsteht ein Fehler
            exit(-1);
        }
    
        list_t *curr = head;
        while (curr->next)
        {
            curr = curr->next;
        };
    
        list_t *e = listNew(val, curr, NULL);
        curr->next = e;
    }
    
    void listPrint(list_t *head) // Liste Ausgeben
    {
        if (head == NULL)
            return;
    
        list_t *curr = head;
        int i = 1;
        while(1)
        {
            printf("\nElement %02d: %5d", i, curr->data);
            i++;
            if (curr->next)
                curr = curr->next;
            else
                return;
        };
        printf("\n==EOF==\n");
    }
    
    //list_t *
    listsearch(list_t *head, int val) // Element in der Liste suchen
    {
    	if (head == NULL)
            return;
        list_t *curr = head; 
    	bool i = false;
        while(i != true)
        {
            if (val == curr->data)
            {
            	printf("\nDer wert %d ist vorhanden!",val);
            	curr = curr->data;
            	i = true;
            	//return curr; 
    		}
               // curr = curr->next;
            else
            {
            	
            curr = curr->next;	
            	if(curr->data == NULL)
           		{
            		printf("\nDer Angegebene Wert %d ist nicht in der Liste vorhanden!", val);
            		i = true;
            		//return NULL;
    			}
    		}
    	         
        }
    
    int main()
    {
    	int n = 1, m = 10, i =0;
    	//list_t *hashtable;
    	list_t *head;
    	head = listNew(0,NULL,NULL);
    	/*
    	//feld_t *masterhead;
    	//masterhead = listNew(0,NULL,NULL);
    	int *array;
    	array = (int*) malloc(sizeof(int)*10);
    	//listPrint(masterhead);
    	head = listNew(1, NULL, NULL);
    	//hashtable = (list_t*) malloc(sizeof(struct list)* m);
    	
    	for(i = 0; i<=9; i++)
    	{
    		array[i]=listNew(i,NULL,NULL);
    	}*/
    	
    	list_t *hashtabelle = NULL;
    	hashtabelle = (list_t*) malloc(sizeof(list_t)*10);
    	//hashtabelle[i] = head;
    	//hashtabelle[1]->data = 2;
    	//hashtabelle->data[1] =0;
    
    	return 0;
    }
    

    Kann mit da jemand helfen? ich bin etwas verzweifelt grade weil ich so gar keine Idee habe...
    Vielen Danke für Jede Hilfe
    Mit freundlichen grüßen
    Sven Rust



  • Ich denke du willst eigentlich list_t **head;, allso ein Array von Zeigen auf list_t.


Log in to reply