morgankalamos Δημοσ. 9 Μαρτίου 2010 Δημοσ. 9 Μαρτίου 2010 Γεια σας! πολυ συνοπτικα ενας καθηγητης μας στην σχολη μας εβαλε μια ασκηση για 2-3 δεντρα,χωρις να μας εχει δείξει κάποια βασικά βήματα για το τι είναι τα 2-3 δέντρα.... :S εχω καποιες βασικες γνωσεις πανω στα 2αδικα δεντρα αλλα τιποτα παραπανω... μηπως ξερεται να μου υποδειξεται καποια βιβλια για να διαβασω ή οτιδηποτε σημειωση στο internet με τα 2-3 δεντρα? ( στα ελληνικα να ειναι! )
virxen75 Δημοσ. 10 Μαρτίου 2010 Δημοσ. 10 Μαρτίου 2010 ΑΓΓΛΙΚΑ http://en.wikipedia.org/wiki/2-3_tree http://cs.nyu.edu/courses/spring98/V22.0102/btrees.html ΕΛΛΗΝΙΚΑ http://www.cs.ucy.ac.cy/~dzeina/courses/epl035/lectures/lect18.pdf
morgankalamos Δημοσ. 5 Ιουνίου 2010 Μέλος Δημοσ. 5 Ιουνίου 2010 μηπως θα μπορουσατε να μου πειτε που μπορω να βρω και κωδικα (C,C++,JAVA...).για το πως κανουμε εισαγωγή στοιχείων,διαγραφή,αναζήτηση,update και διαφορα αλλα μεσα σε 2-3 δεντρά?
morgankalamos Δημοσ. 6 Ιουνίου 2010 Μέλος Δημοσ. 6 Ιουνίου 2010 εδω ειναι καποια κομματια που εχω κανει τα οποία χρειάζονται κάποιες διορθώσεις... >#include <stdio.h> #include <stdlib.h> #include <string.h> struct data { unsigned int am; int data_pointer; }; struct mathitis { unsigned int am; char name[20]; char lastname[20]; char address[30]; char eksamino_eggrafis[5]; int mathimata; }; struct deiktes { int entries; struct data small; struct data big; struct deiktes *left, *middle, *right, *parent; }; struct deiktes *root = NULL; void Update() { FILE *eggrafes; unsigned int key; struct deiktes * res; struct mathitis rec; eggrafes = fopen("mathitis_data.dat", "rb"); printf("dwse arithmo mhtroou:"); scanf("%d", &key); res = Search(root, key); fseek(eggrafes, res->small.data_pointer, SEEK_SET); fread(&rec, sizeof (struct mathitis), 1, eggrafes); printf("\nDwse kainouria stoixeia\n"); printf("onoma: %s\n", rec.name); scanf("%s", &rec.name); printf("epitheto: %s\n", rec.lastname); scanf("%s", &rec.lastname); printf("diefthinsi: %s\n", rec.address); scanf("%s", &rec.address); printf("eksamino eggrafis: %s\n", rec.eksamino_eggrafis); scanf("%s", &rec.eksamino_eggrafis); printf("enapominanta mathimata: %d\n", rec.mathimata); scanf("%d", &rec.mathimata); fwrite(&rec, sizeof (struct mathitis), 1, eggrafes); fclose(eggrafes); } struct deiktes Open(void) { FILE *eggrafes, *deiktes; struct deiktes *k, *i; struct mathitis a; int meg; //struct deiktes *root; unsigned int key; eggrafes = fopen("mathitis_data.dat", "rb"); deiktes = fopen("mathitis_deiktes.dat", "rb"); if (!eggrafes || !deiktes) { printf("Sfalma sto Anoigma Arxeion \n"); fclose(eggrafes); fclose(deiktes); exit(1); } fread(&a, sizeof (struct mathitis), 1, deiktes); while (!feof(deiktes)) { i = Search(&root, key); //root = Insert(root, i,data); fread(&a, sizeof (struct mathitis), 1, deiktes); } fclose(deiktes); } void Create(void) { FILE *eggrafes, *deiktes; eggrafes = fopen("mathitis_data.dat", "wb"); deiktes = fopen("mathitis_deiktes.dat", "wb"); if (!eggrafes || !deiktes) { printf("Sfalma Dimiourgias Arxeion \n"); fclose(eggrafes); fclose(deiktes); exit(1); } } void Close(struct deiktes *root) { FILE *pointer; pointer = fopen("mathitis_deiktes.ndx", "wb"); if (!pointer) { printf("Sfalma sto Anoigma Arxeion \n"); exit(1); } inOrder(root, pointer); fclose(pointer); } void inOrder(struct deiktes *n, FILE *f) { if (n->left != NULL) inOrder(n->left, f); if (n->small != NULL) fwrite(&n->small, sizeof (struct data), 1, f); if (n->middle != NULL) inOrder(n->middle, f); if (n->big != NULL) fwrite(&n->big, sizeof (struct data), 1, f); fwrite(&n->small, sizeof (struct data), 1, f); if (n->right != NULL) inOrder(n->right, f); } struct deiktes * Search(struct deiktes *current, unsigned int key) { while (current != NULL) { if (key == current->small.am) return current; else if (key < current->small.am) current = current->left; else if (key > current->small.am && current->entries == 1) current = current->right; else if (key > current->big.am && current->entries == 2) current = current->right; else if (key == current->big.am && current->entries == 2) return current; else current = current->middle; } return current; } void Emfanisi_eggrafis(struct deiktes *m, int temp) { FILE *pointer; struct mathitis math; pointer = fopen("mathitis_data.dat", "rb"); if (m->small.am == temp) { fseek(pointer, m->small.data_pointer, SEEK_SET); fread(&math, sizeof (struct mathitis), 1, pointer); printf("\n======== record ========\n"); printf("arithmos mitroou: %llu\n", math.am); printf("onoma: %s\n", math.name); printf("epitheto: %s\n", math.lastname); printf("diefthinsi: %s\n", math.address); printf("eksamino eggrafis: %s\n", math.eksamino_eggrafis); printf("enapominanta mathimata: %d\n", math.mathimata); printf("========================\n\n"); } else { fseek(pointer, m->big.data_pointer, SEEK_SET); fread(&math, sizeof (struct mathitis), 1, pointer); printf("\n======== record ========\n"); printf("arithmos mitroou: %llu\n", math.am); printf("onoma: %s\n", math.name); printf("epitheto: %s\n", math.lastname); printf("diefthinsi: %s\n", math.address); printf("eksamino eggrafis: %s\n", math.eksamino_eggrafis); printf("enapominanta mathimata: %d\n", math.mathimata); printf("========================\n\n"); } fclose(pointer); } void Read() { unsigned long long key; struct deiktes *d; printf("dose arithmo mitroou: "); scanf("%d", key); d = Search(root, key); Emfanisi_eggrafis(d, key); } void menu() {int epilogi; do { printf("1) Dimiourgia twn arxeiwn deiktwn kai eggrafwn\n"); printf("2) Dimiourgia ths domhs deiktwn\n"); printf("3) Apothikeush twn deiktwn ths domhs sto arxeio deiktwn\n"); printf("4) Anazhthsh mia eggrafhs me vash ton arithmo mitrwou\n"); printf("5) Diorthosi mias eggrafis\n"); printf("0) Eksodos\n"); printf("\nEpilogi: "); scanf("%d",&epilogi); switch (epilogi) { case 1: Create(); break; case 2: Open(); break; case 3: Close(root); break; case 4: Read(); break; case 5: Update(); break; case 0: exit(0); break; default: printf("\nλαθος επιλογη\n"); } } while (1); } int main(void) { menu(); return 0; }
lion2486 Δημοσ. 11 Ιουνίου 2010 Δημοσ. 11 Ιουνίου 2010 https://foss.uoa.gr/wiki/index.php/Code:AVL http://cgi.di.uoa.gr/~ip/cprogs/treemanagement.c
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.