snot Δημοσ. 5 Ιουλίου 2006 Δημοσ. 5 Ιουλίου 2006 έχουμε τον εξής κώδικα struct node { int data; struct node *link; } ; struct node *front, *rear; void main() { .... .... .... } void add(int y) { struct node *ptr; ptr=malloc(sizeof(struct node)); ptr->data=y; ptr->link=NULL; if(front ==NULL) { front = rear= ptr; } else { rear->link=ptr; rear=ptr; } } το rear->link=ptr; δεν θα έπρεπε να είναι του στυλ rear->link=ptr->link?? και αν όχι, τι ακριβώς γίνεται εκεί;
Sta Δημοσ. 5 Ιουλίου 2006 Δημοσ. 5 Ιουλίου 2006 Ο δείκτης head δείχνει στο πρώτο μέλος της συνδεδεμένης λίστας και ο rear στο τελευταίο. Κάνεις add στο τέλος της λίστας, οπότε πρέπει το link του (μέχρι πρότινος) τελευταίου node να δείχνει στο επόμενο και το επόμενο να γίνει τελευταίο (εκεί δηλαδή θα δείχνει πλέον ο δείκτης rear). Σχεδίασέ το με κουτάκια κ.τλ. και θα το καταλάβεις και καλύτερα.
anagnostopoulos Δημοσ. 5 Ιουλίου 2006 Δημοσ. 5 Ιουλίου 2006 Kalo tha htan sthn mallon na prostheseis kai to type casting. Dhladh: ptr=(struct node*)malloc(sizeof(struct node)); Oxi pws paizie kapoio idiaitero rolo. aplws plhroforiaka.
Sta Δημοσ. 5 Ιουλίου 2006 Δημοσ. 5 Ιουλίου 2006 Kalo tha htan sthn mallon na prostheseis kai to type casting. Dhladh: ptr=(struct node*)malloc(sizeof(struct node)); Oxi pws paizie kapoio idiaitero rolo. aplws plhroforiaka. Καλό θα ήταν να μην το προσθέσει, διότι http://www.iso-9899.info/wiki/Tips
snot Δημοσ. 5 Ιουλίου 2006 Μέλος Δημοσ. 5 Ιουλίου 2006 Ευχαριστώ για την βοήθεια, ο κώδικας είναι για την δημιουργία ενός queue όπως σωστά είπε ο Sta. Αυτό που δεν έχω καταλάβει είναι τι γίνεται εδώ rear->link=ptr; αφού ως noobas στην C περίμενα να δω κάτι του στυλ rear->link=ptr->link αφού και το ptr είναι pointer τύπου struct. Αν μπορεί κάποιος ας μου εξηγήσει αφού δεν το βρίσκω πουθενά και έχω σπάσει το κεφάλι μου...
Legionnaire Δημοσ. 5 Ιουλίου 2006 Δημοσ. 5 Ιουλίου 2006 Ευχαριστώ για την βοήθεια, ο κώδικας είναι για την δημιουργία ενός queue όπως σωστά είπε ο Sta. Αυτό που δεν έχω καταλάβει είναι τι γίνεται εδώ rear->link=ptr; αφού ως noobas στην C περίμενα να δω κάτι του στυλ rear->link=ptr->link αφού και το ptr είναι pointer τύπου struct. Αν μπορεί κάποιος ας μου εξηγήσει αφού δεν το βρίσκω πουθενά και έχω σπάσει το κεφάλι μου... Μα και το μέλος link του struct rear είναι και αυτό pointer τύπου struct node! Με άλλα λόγια λες ότι το link θα δείχνει στην διεύθυνση του ptr, που είναι μάλλον ο επόμενος σου κόμβος στην λίστα. Άν έκανες rear->link=ptr->link τότε το rear->link ΔΕΝ θα έδειχνε στο ptr αλλά εκεί που δείχνει το ptr->link. Ουσιαστικά θα "πηδούσες" τον κόμβο ptr. Παράδειγμα. struct node *A, *B, *C; B->link=C; A->link=B->link => A->link=C. Ελπίζω να το κατάλαβες αφού το έγραψα σούπερ-αναλυτικά.
snot Δημοσ. 6 Ιουλίου 2006 Μέλος Δημοσ. 6 Ιουλίου 2006 χίλια ευχαριστώ!! το rear->link=ptr; κάνει το rear να δείχνει στην διεύθυνση του ptr. το rear=ptr; που είναι ακριβώς από κάτω να υποθέσω πως ουσιαστικά δίνει την τιμή του ptr στο rear; δηλαδή rear->data=ptr->data;
Επισκέπτης Δημοσ. 6 Ιουλίου 2006 Δημοσ. 6 Ιουλίου 2006 koita, to rear=ptr; isodynamei me to rear=rear->link; dhladh, o deikths rear deixnei sthn idia thesh mnhmhs(dieythynsh) poy deixnei kai o ptr. kalytera na mh to thewreis ws rear->data=ptr->data; an kai sthn oysia ayto isxyei..alla san ekxwrish mias dieythynshs,me o,ti ayto synepagetai .. elpizw na hmoyn katanohtos..
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.