Προς το περιεχόμενο

βοήθεια σε pointers και structures σε γλώσσα C


snot

Προτεινόμενες αναρτήσεις

Δημοσ.

έχουμε τον εξής κώδικα

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?? και αν όχι, τι ακριβώς γίνεται εκεί;

Δημοσ.

Ο δείκτης head δείχνει στο πρώτο μέλος της συνδεδεμένης λίστας και ο rear στο τελευταίο. Κάνεις add στο τέλος της λίστας, οπότε πρέπει το link του (μέχρι πρότινος) τελευταίου node να δείχνει στο επόμενο και το επόμενο να γίνει τελευταίο (εκεί δηλαδή θα δείχνει πλέον ο δείκτης rear). Σχεδίασέ το με κουτάκια κ.τλ. και θα το καταλάβεις και καλύτερα.

Δημοσ.

Ευχαριστώ για την βοήθεια, ο κώδικας είναι για την δημιουργία ενός queue όπως σωστά είπε ο Sta. Αυτό που δεν έχω καταλάβει είναι τι γίνεται εδώ rear->link=ptr; αφού ως noobas στην C περίμενα να δω κάτι του στυλ rear->link=ptr->link αφού και το ptr είναι pointer τύπου struct. Αν μπορεί κάποιος ας μου εξηγήσει αφού δεν το βρίσκω πουθενά και έχω σπάσει το κεφάλι μου...

Δημοσ.
Ευχαριστώ για την βοήθεια, ο κώδικας είναι για την δημιουργία ενός 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.

 

Ελπίζω να το κατάλαβες αφού το έγραψα σούπερ-αναλυτικά.

Δημοσ.

χίλια ευχαριστώ!! το rear->link=ptr; κάνει το rear να δείχνει στην διεύθυνση του ptr. το rear=ptr; που είναι ακριβώς από κάτω να υποθέσω πως ουσιαστικά δίνει την τιμή του ptr στο rear; δηλαδή rear->data=ptr->data;

Επισκέπτης
Δημοσ.

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..

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...