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 aussehen1[] -> 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.