ΠΛΗ111. Ανοιξη Μάθηµα 8 ο. Αναζήτηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Σχετικά έγγραφα
ΠΛΗ111. Ανοιξη Μάθηµα 5 ο. Ουρά. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

ΠΛΗ111. Ανοιξη Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

Δομές Δεδομένων. Κατακερματισμός. Δομές Δεδομένων & Αλγόριθμοι. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 1

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Δομές Δεδομένων. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Κατακερµατισµός Κεφάλαιο 14. Ε. Μαρκάκης Επίκουρος Καθηγητής

Δομές Δεδομένων & Αλγόριθμοι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

Αλγόριθμοι Αναζήτησης

Προγραμματιστικές Τεχνικές

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Προγραμματιστικές Τεχνικές

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Insert(K,I,S) Delete(K,S)

Δομές δεδομένων (2) Αλγόριθμοι

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

Αλγόριθμοι Ταξινόμησης Μέρος 1

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Πίνακες Συμβόλων. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

Προγραμματισμός Ι (ΗΥ120)

ΕΝΟΤΗΤΑ 8 KATAKEΡΜΑΤΙΣΜΟΣ (HASHING)

Δομές Αναζήτησης. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

ΣΥΜΒΟΛΟΣΕΙΡΕΣ (Strings) Ο ΑΤΔ Συµβολοσειρά Μία συµβολοσειρά είναι µία ακολουθία χαρακτήρων. Bασικές πράξεις : 1. Δηµιουργία. 2. Μήκος. 3.

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Δρ. Πέτρος Παναγή B123

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διάλεξη 22η: Επιπλέον στοιχεία της C

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

Προγραµµατιστικές Τεχνικές

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Προγραμματισμός Δομές Δεδομένων

Φροντιστήριο 4 Σκελετοί Λύσεων

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

Μεταγλωττιστές. Συντακτικός Αναλυτής Κατασκευή Πίνακα Συμβόλων (ΠΣ) Εργαστήριο 7. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Τα δεδομένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Ενότητα 6: Κατακερματισμός Ασκήσεις και Λύσεις

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

ιαφάνειες παρουσίασης #4

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Εργαστήριο 2: Πίνακες

Κατακερματισμός (Hashing)

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διδάσκων: Κωνσταντίνος Κώστα

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

Transcript:

ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 8 ο Αναζήτηση Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Αναζήτηση Αναζήτηση σε ιατεταγµένο Πίνακα υαδική Αναζήτηση Κατακερµατισµός Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 2

Αναζήτηση σε ιατεταγµένο Πίνακα Θεωρούµε πίνακα στοιχείων σε αύξουσα διάταξη Αναζητούµε συγκεκριµένο στοιχείο στον πίνακα Γραµµική αναζήτηση Εξετάζουµε τα στοιχεία ένα ένα ξεκινώντας από το πρώτο Σταµατούµε µόλις βούµε το ζητούµενο ή µεγαλύτερό του 1 3 4 5 17 18 31 33 Κόστος: περίπου n/2 συγκρίσεις Επιτυχηµένη αναζήτηση: (1+2+...+n)/n = n(n+1)/(2n) = (n+1)/2 Αποτυχηµένη αναζήτηση: (1+2+...+n+1)/(n+1) = (n+2)/2 σαν επιτυχηµένη αναζήτηση σε πίνακα µεγέθους n+1 εν αξιοποιούµε πλήρως την αύξουσα διάταξη των στοιχείων Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 3

υαδική Αναζήτηση Θεωρούµε πίνακα στοιχείων σε αύξουσα διάταξη Αναζητούµε συγκεκριµένο στοιχείο στον πίνακα υαδική αναζήτηση Συγκρίνουµε το ζητούµενο µε το µεσαίο στοιχείο του πίνακα Αν είναι ίσα, η αναζήτηση τερµατίζει επιτυχώς Αν το µεσαίο µεγαλύτερο του ζητούµενου, η αναζήτηση συνεχίζεται στο πρώτο µισό του πίνακα Αν το µεσαίο µικρότερο του ζητούµενου, η αναζήτηση συνεχίζεται στο δεύτερο µισό του πίνακα Σε κάθε σύκριση, το εναποµένον µέγεθος του πίνακα µισό Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 4

Παράδειγµα υαδικής Αναζήτησης Υπάρχει το στοιχείο 17 στον πίνακα; 1. Aρχική αναζήτηση στο [0..7] 2. Το µεσαίο στη θέση (0+7)/2=3 έχει τιµή a[3]=5<17 3. Επόµενη αναζήτηση στο διάστηµα [4..7] 4. Το µεσαίο στη θέση (4+7)/2=5 έχει τιµή a[5]=18>17 5. Επόµενη αναζήτηση στο διάστηµα a[4..4] 6. Το µεσαίο στη θέση (4+4)/2=4 έχει τιµή a[4]=17 7. Επιστρέφουµε τη θέση 4 0 1 2 3 4 5 6 7 1 3 4 5 17 18 31 33 Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 5

Αναδροµική υαδική Αναζήτηση int binsearch(int a[], int key, int low, int high) { int mid; if (low > high) return (-1); mid = (low + high)/2; if (key == a[mid]) /* found */ return (mid); if (key < a[mid]) /* lower half */ return binsearch(a, key, low, mid-1); else /* upper half */ return binsearch(a, key, mid+1, high); Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 6

Επαναληπτική υαδική Αναζήτηση int binsearch(int a[], int key, int n) { int mid, low, high; low = 0; high = n-1; while (low <= high) { mid = (low + high)/2; if (key == a[mid]) /* found */ return (mid); if (key < a[mid]) /* lower half */ high = mid 1; else /* upper half */ low = mid + 1; return (-1); Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 7

Ανάλυση υαδικής Αναζήτησης Αναλύουµε πολυπλοκότητα χειρότερης περίπτωσης Υπολογίζουµε το πλήθος των συγκρίσεων σε αποτυχηµένη αναζήτηση Θεωρούµε αρχικό διάστηµα µεγέθους 2 n -1 Αποτυχηµένη αναζήτηση οδηγεί σε διάστηµα µεγέθους 2 n-1-1 T(2 n -1) = T(2 n-1-1) + 1, n>1 T(1) = 1 Τ(2 n -1) = T(2 n-1-1) + 1 = T(2 n-2-1) + 2 = T(0) + n = n Άρα T(n) = log 2 (n+1) = Ο(log 2 n) Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 8

Κατακερµατισµός (Hashing) Μέθοδος αποθήκευσης και αναζήτησης σε πίνακα Πίνακας κατακερµατισµού Aποθηκεύει κλειδιά Συνάρτηση κατακερµατισµού Mετατρέπει κάθε κλειδί σε θέση του πίνακα κατακερµατισµού Τέλεια όταν µετατρέπει κάθε κλειδί σε διαφορετική θέση Πρόβληµα Πως επιλέγουµε τη σωστή συνάρτηση κατακερµατισµού Τι γίνεται όταν πολλαπλά κλειδιά αντιστοιχούν στη ίδια θέση (collision resolution) key data h(key) hash table Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 9

Παράδειγµα Κατακερµατισµού #define TABLE_SIZE 15 #define h(s) ((s[0] + s[1]) % TABLE_SIZE) typedef struct node { char *key; int data; node_t; node_t hashtable[table_size]; void install(char *key, int data) { node_t *p = &hashtable[h(key)] if (p->key) fprintf(stderr, collision ); else { p->key = key; p->data = data; Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 10

Συνάρτηση Κατακερµατισµού Μετατρέπει το κλειδί σε ακέραιο [0,Μ-1], όπου Μ το µέγεθος του πίνακα κατακερµατισµού Μετατροπή κλειδιού σε ακέραιο Έστω αλφάβητο µε 32 χαρακτήρες A, B, C,, Z Έστω ότι ο i-στός χαρακτήρας αναπαρίσταται µε δυαδικό i Μετατρέπουµε τη συµβολοσειρά-κλειδί στον αντίστοιχο δυαδικό π.χ. Α Κ Ε Υ γίνεται 00001010110010111001 Εναλλακτικά χρησιµοποιούµε το σχήµα Horner π.χ. Α Κ Ε Υ γίνεται 1*32 3 + 11*32 2 + 5*32 1 + 25*32 0 = (((1*32 + 11)*32)+5)*32+25 = 44217 Μετατροπή ακεραίου σε θέση πίνακα: π.χ. h(k)=k mod M Προτιµούµε Μ πρώτο αριθµό για να αξιοποιούµε όλους τους χαρακτήρες του κλειδιού Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 11

Γραµµικός Κατακερµατισµός (Linear Probing) Εισαγωγή στοιχείων σε απλό πίνακα κατακερµατισµού Αν µια θέση του πίνακα είναι κατειλληµένη αναζητούµε κενή θέση στις υπόλοιπες του πίνακα Προσαυξάνουµε την τρέχουσα θέση κατά µία σταθερά i, και εξετάζουµε διαδοχικά τις θέσεις h(key), h(key)+i, h(key)+2i void install(char *key, int data) { int p = h(key); while (hashtable[p].key) p = (p + 1) % M; /* i = 1 */ hashtable[p].key = key; hashtable[p].data = data; Τί γίνεται στην περίπτωση που ο πίνακας είναι γεµάτος ; Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 12

Αναζήτηση µε Γραµµικό Κατακερµατισµό int find(char *key) { int try, h; try = h = hash(key); do { if (!hashtable[try].key) return (-1); /* not found */ else if (!strcmp(hashtable[try].key, key)) return (try); /* found */ try = (try + 1) mod M; while (try!= h); return (-2); /* not found and hash table full */ Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 13

Αλυσιδωτός Κατακερµατισµός (Separate Chaining) Κάθε θέση του πίνακα είχνει σε λίστα µε όλα τα αποθηκευµένα στοιχεία της θέση αυτής Κόστος αναζήτησης Ν/Μ, Ν το πλήθος των αποθηκευµένων κλειδιών typedef struct node { char *key; int data; struct node *next; node_t, *nodeptr_t; node_t hashtable[table_size]; κεφαλή λίστας void insert(char *key, int data) { nodeptr_t *p; for (p = &hashtable[h(key)]; *p; p = &((*p)->next)) if (!strcmp((*p)->key, key)) return; /* key found in hash table */ *p = (nodeptr_t) malloc(sizeof(node_t)); (*p)->data = data; (*p)->key = key; (*p)->next = NULL; Ανοιξη 2005 Στέργιος Β. Αναστασιάδης 14