60 likes | 194 Views
Lab 10: Hash Tables with Chaining. EPL231 – Data Structures and Algorithms. Διαχείριση συγκρούσεων με αλυσίδωση.
E N D
Lab 10: Hash Tables with Chaining EPL231 – Data Structures and Algorithms Panayiotis Charalambous
Διαχείριση συγκρούσεων με αλυσίδωση • Αφού περισσότερα από ένα κλειδιά μπορούν να πάρουν την ίδια τιμή από τη συνάρτηση κατακερματισμού, μπορούμε να θεωρήσουμε ότι κάθε θέση του πίνακα ‘δείχνει’ σε μια ευθύγραμμη απλά συνδεδεμένη λίστα. • Για κάθε i, στη θέση Η[i] του πίνακα βρίσκουμε λίστα που περιέχει όλα τα κλειδιά που απεικονίζονται από τη συνάρτηση h στη θέση αυτή. • Για να βρούμε κάποιο κλειδί k, πρέπει να ψάξουμε στη λίστα που δείχνεται στη θέση H[h(k)]. • Εισαγωγές και εξαγωγές στοιχείων μπορούν να γίνουν εύκολα με βάση τις διαδικασίες συνδεδεμένων λιστών. Panayiotis Charalambous
Παράδειγμα 0 67 1 34 hsize = 11 2 46 3 114 26 4 5 17 6 7 8 85 85 Εισαγωγή: 114 46 26 67 17 34 9 10 Panayiotis Charalambous
Συναρτήσεις για υλοποίηση • Πίνακας κατακερματισμούσταθερού μεγέθους (TABLE_SIZE): • void destroyTable(HashTable * table); • void insertEntry(HashTable *table, Student *student); • void deleteEntry(HashTable *table, const char *studentID); • HashEntry *findEntry(HashTable *table, const char *studentID); • Εισαγωγή 10000 φοιτητών με τυχαίο ID • Τύπωμα του πίνακα κατακερματισμού Panayiotis Charalambous
Something COOL!!! /***************************************************************************** * * * -------------------------------- hashpjw ------------------------------- * * * *****************************************************************************/ int hashpjw(const void *key) { const char *ptr; int val; val = 0; ptr = key; while (*ptr != '\0') { int tmp; val = (val << 4) + (*ptr); if (tmp = (val & 0xf0000000)) { val = val ^ (tmp >> 24); val = val ^ tmp; } ptr++; } return val % PRIME_TBLSIZ; } Panayiotis Charalambous
The End Panayiotis Charalambous