Re4cTiV3 Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Άρα; αντιγράφουμε απλά το αρχείο σε ένα δεύτερο και εξετάζουμε το δεύτερο; (για μένα πιο γρήγορα)
nik324 Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Πιστεύω είναι απλό (αν δεν έχω λάθος στην malloc) Βασικά αν είναι άδειο, αυτό θα γίνει πατέρας > if(node==NULL) { node=(struct node) malloc(sizeof(struct node)); node->data=data; } Την insert θα την καλείς πάντα με τον πατέρα (η NULL) Και μετά όταν υπάρχει έναν δέντρο, και πρέπει να εισαχθεί σαν φύλλο ένας νέος κόμβος, πώς θα δείξει στον προηγούμενο;
albNik Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Αναδρομικά node==NULL σημαίνει ότι το left η το right είναι NULL. To left (right) του προηγούμενου θα δείχνει σ αυτόν. Όχι ανάποδα Aλλά εσυ θα καλείς την insert με το parent , διαφορετικα θα τα προσθέτεις σε υποδεντρο του current node. To parent θα το αποθηκεύσεις μετα την πρώτη φορά που θα την καλέσεις
imitheos Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Άρα; αντιγράφουμε απλά το αρχείο σε ένα δεύτερο και εξετάζουμε το δεύτερο; (για μένα πιο γρήγορα) Αν μιλάς σε μένα, τότε όχι δεν είπα ποτέ κάτι τέτοιο. Δεν θα κερδίσεις κάτι με το να το αντιγράψεις σε δεύτερο. Και μετά όταν υπάρχει έναν δέντρο, και πρέπει να εισαχθεί σαν φύλλο ένας νέος κόμβος, πώς θα δείξει στον προηγούμενο; Μη νομίσεις ότι προσπαθώ να στην πω αλλά δίνε λίγες παραπάνω πληροφορίες όταν ρωτάς κάτι. Για παράδειγμα πως υλοποιείται η δομή node ? Έχουμε single linked list, double, circular, κτλ. Επίσης ακόμη και ο ίδιος τύπος λίστας μπορεί να υλοποιηθεί με 20 τρόπους. Χρησιμοποιείς head και tail ? Αν είναι απλή single λίστα γιατί θέλεις τον parent στην insert ?
nik324 Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Μη νομίσεις ότι προσπαθώ να στην πω αλλά δίνε λίγες παραπάνω πληροφορίες όταν ρωτάς κάτι. Για παράδειγμα πως υλοποιείται η δομή node ? Έχουμε single linked list, double, circular, κτλ. Επίσης ακόμη και ο ίδιος τύπος λίστας μπορεί να υλοποιηθεί με 20 τρόπους. Χρησιμοποιείς head και tail ? Αν είναι απλή single λίστα γιατί θέλεις τον parent στην insert ? όχι προς Θεού γιατι να πιστεύω οτι μου την λες;; Λοιπόν... > typedef struct node{ struct node *rc; struct node *lc; struct node *parent; int a; }node; struct node* insert(struct node* node, int data) { if (node == NULL) { node = (struct node*) malloc( sizeof( struct node ) ); node->a = data; node->lc = NULL; node->rc = NULL; // σε αυτο το σημείο θέλω να φτιάξω και ενα δεικτη στον //προηγούμενο κόμβο } else { if (data <= node->data) node->left = insert(node->left, data); else node->right = insert(node->right, data); return(node); // return the (unchanged) node pointer } } και επίσης μιλάμε για δεντρο όχι για λίστα
albNik Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 Κάτι σαν double linked tree. Κατά την άποψη μου δεν χρειάζεσαι node* parent στην struct. Θες να διασχίζεις το δεντρό προς τα πίσω ? ( από φύλο προς κορυφή)
imitheos Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 όχι προς Θεού γιατι να πιστεύω οτι μου την λες;; Λοιπόν... > typedef struct node{ struct node *rc; struct node *lc; struct node *parent; int a; }node; struct node* insert(struct node* node, int data) { if (node == NULL) { node = (struct node*) malloc( sizeof( struct node ) ); node->a = data; node->lc = NULL; node->rc = NULL; // σε αυτο το σημείο θέλω να φτιάξω και ενα δεικτη στον //προηγούμενο κόμβο } else { if (data <= node->data) node->left = insert(node->left, data); else node->right = insert(node->right, data); return(node); // return the (unchanged) node pointer } } και επίσης μιλάμε για δεντρο όχι για λίστα Κάτι σαν double linked tree. Κατά την άποψη μου δεν χρειάζεσαι node* parent στην struct. Θες να διασχίζεις το δεντρό προς τα πίσω ? ( από φύλο προς κορυφή) Συμφωνώ με τον albNik. Δεν καταλαβαίνω γιατί χρειάζεσαι τον parent. Δικό σου θέμα όμως οπότε πάω παρακάτω. Η συνάρτηση insert δεν παίζει ασχέτως με τον parent. Έχεις πεδία lc, rc και μετά καλείς την insert με node->left. Τι είναι το left ? > struct node { int val; struct node *left; struct node *right; struct node *parent; }; struct node *node_insert(struct node *node, int value, struct node *parent) { if (node == NULL) { node = malloc(sizeof(*node)); if (node == NULL) return NULL; node->val = value; node->left = node->right = NULL; node->parent = parent; } else { if (node->val < value) node->right = node_insert(node->right, value, node); else node->left = node_insert(node->left, value, node); } return node; } Κάτι τέτοιο σου κάνει ?
nik324 Δημοσ. 29 Νοεμβρίου 2012 Δημοσ. 29 Νοεμβρίου 2012 (επεξεργασμένο) Συμφωνώ με τον albNik. Δεν καταλαβαίνω γιατί χρειάζεσαι τον parent. Δικό σου θέμα όμως οπότε πάω παρακάτω. Η συνάρτηση insert δεν παίζει ασχέτως με τον parent. Έχεις πεδία lc, rc και μετά καλείς την insert με node->left. Τι είναι το left ? > struct node { int val; struct node *left; struct node *right; struct node *parent; }; struct node *node_insert(struct node *node, int value, struct node *parent) { if (node == NULL) { node = malloc(sizeof(*node)); if (node == NULL) return NULL; node->val = value; node->left = node->right = NULL; node->parent = parent; } else { if (node->val < value) node->right = node_insert(node->right, value, node); else node->left = node_insert(node->left, value, node); } return node; } Κάτι τέτοιο σου κάνει ? δεν μου κάνει! απλα ο parent pointer θα είναι βολικός στις διαγραφές.... Απλά αυτό που προσπαθώ να κάνω είναι για καθε κόμβο που εισάγω, να τον κάνω να δείχνει στον parent! Επεξ/σία 29 Νοεμβρίου 2012 από nik324
Star_Light Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 Καλησπέρα. Ειναι σωστό να πουμε οτι το \33 ή \033 ειναι ειναι μια numeric escape sequence σε οκταδική αναπαράσταση για τον ESC χαρακτήρα για μια συγκεκριμενη πλατφορμα παντοτε.
migf1 Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 To \033 είναι η οκταδική αναπαράσταση του ESC. Η δεκαδική του αναπαράσταση είναι το \27. Ισχύει σε όλες τις πλατφόρμες που υποστηρίζουν ASCII table.
Timonkaipumpa Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 δεν μου κάνει! απλα ο parent pointer θα είναι βολικός στις διαγραφές.... Απλά αυτό που προσπαθώ να κάνω είναι για καθε κόμβο που εισάγω, να τον κάνω να δείχνει στον parent! Άρα, θες να κάνεις ένα tree like structure που κάθε κόμβος να ξέρει και τα αδέρφια του; Εάν ναι, ο parent θα είναι μοναδικός ή αναλόγως το επίπεδο που θα είναι κάθε κόμβος (δηλαδή, θα έχεις ένα επίπεδο ή πολλά στο tree σου) ;
Star_Light Δημοσ. 2 Δεκεμβρίου 2012 Δημοσ. 2 Δεκεμβρίου 2012 To \033 είναι η οκταδική αναπαράσταση του ESC. Η δεκαδική του αναπαράσταση είναι το \27. Ισχύει σε όλες τις πλατφόρμες που υποστηρίζουν ASCII table. Nαι αλλα επειδη το ειδα και με 2 αλλες ονομασιες (numeric escape ... octal escape sequence) μπερδευτηκα. Το οτι ενα string literal καταλαμβάνει n+1 bytes αν n ειναι το μήκος του δεν ισχυει στην περιπτωση που ο char έχει πανω απο 1 byte μέγεθος. Εχει δει κανεις compiler που να καταλαμβανει πανω απο 1 byte o char ????
imitheos Δημοσ. 3 Δεκεμβρίου 2012 Δημοσ. 3 Δεκεμβρίου 2012 [γκρίνια] Τις τελευταίες ημέρες δέχτηκα πολλά μηνύματα από παραπάνω του ενός άτομα για βοήθεια σε C "για να μην απασχολείται το φόρουμ". Δεν με ενοχλούν τα προσωπικά μηνύματα αλλά το καλύτερο είναι η ερώτηση να γίνεται εδώ. Αν η ερώτηση είναι απλή και δεν δικαιολογεί ξεχωριστό νήμα, για αυτό έχουμε το παρόν νήμα. Μη φοβάστε δεν θα πάθει τίποτα το φόρουμ αν ρωτήσετε. Ίσα ίσα τα φόρα, όπως και οι καρχαρίες, πρέπει να κινούνται. Είναι σημαντικό να γίνονται ερωτήσεις εδώ και όχι με προσωπικά μηνύματα γιατί εκτός ότι εδώ μπορεί κάποιος άλλος να δώσει πιο σωστή απάντηση από εμένα, το νήμα σε αντίθεση με τα μηνύματα είναι προσβάσιμο σε όλους οπότε μπορεί στο μέλλον να βοηθηθεί κάποιος άλλος που έχει την ίδια απορία. Επίσης δεν χρειάζεται να μου μιλάτε στον πληθυντικό. Μπορεί να έχω πολλά γένια αλλά δεν είμαι ούτε μητροπολίτης ούτε καθηγητής πανεπιστημίου ούτε τίποτα. Μπορείτε (και επιβάλλεται) να μου μιλάτε στον ενικό Αυτά [/γκρίνια] 1
migf1 Δημοσ. 3 Δεκεμβρίου 2012 Δημοσ. 3 Δεκεμβρίου 2012 [γκρίνια] Τις τελευταίες ημέρες δέχτηκα πολλά μηνύματα από παραπάνω του ενός άτομα για βοήθεια σε C "για να μην απασχολείται το φόρουμ". Δεν με ενοχλούν τα προσωπικά μηνύματα αλλά το καλύτερο είναι η ερώτηση να γίνεται εδώ. Αν η ερώτηση είναι απλή και δεν δικαιολογεί ξεχωριστό νήμα, για αυτό έχουμε το παρόν νήμα. Μη φοβάστε δεν θα πάθει τίποτα το φόρουμ αν ρωτήσετε. Ίσα ίσα τα φόρα, όπως και οι καρχαρίες, πρέπει να κινούνται. Είναι σημαντικό να γίνονται ερωτήσεις εδώ και όχι με προσωπικά μηνύματα γιατί εκτός ότι εδώ μπορεί κάποιος άλλος να δώσει πιο σωστή απάντηση από εμένα, το νήμα σε αντίθεση με τα μηνύματα είναι προσβάσιμο σε όλους οπότε μπορεί στο μέλλον να βοηθηθεί κάποιος άλλος που έχει την ίδια απορία. Επίσης δεν χρειάζεται να μου μιλάτε στον πληθυντικό. Μπορεί να έχω πολλά γένια αλλά δεν είμαι ούτε μητροπολίτης ούτε καθηγητής πανεπιστημίου ούτε τίποτα. Μπορείτε (και επιβάλλεται) να μου μιλάτε στον ενικό Αυτά [/γκρίνια] Το ίδιο συμβαίνει και σε μένα. Συμφωνώ απόλυτα με τον imitheo, βάζετε τις ερωτήσεις σας στο φόρουμ. Είναι και για σας καλύτερα, αφού πιθανότατα θα πάρετε απάντηση πολύ νωρίτερα
Star_Light Δημοσ. 3 Δεκεμβρίου 2012 Δημοσ. 3 Δεκεμβρίου 2012 Με μενα δεν συμβαινει το ιδιο ..... ΑΛΛΑ..... συμφωνω εξισου
Προτεινόμενες αναρτήσεις