Μάθημα - Απλά Συνδεδεμένες Λίστες

...ασύγχρονα μαθήματα γλώσσας C

Re: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό Star_Light » 23 Ιούλ 2011, 00:55

σου ορκιζομαι οτι το εχω καταλαβει αλλα μου ξεφυγε ισως λογω κουρασης :/

σκεφτηκα κατι αλλο ομως το οποιο δεν δουλευει.

Βασικα δουλευει αλλα βγαζει 2 φορες τα αποτελεσματα που θελω ενω εγω τα θελω μια.

τροποποιησα τον κωδικα ως εξης :

Κώδικας: Επιλογή όλων

int main ()
{
int static id;
Customer *head ,*newnode;

head = NULL;
newnode=NULL;

for(id=1; id<3; id++)
{
list_prepend(&head,id);
list_prepend(&head,id);
}
list_print(head);
free(newnode);
free(head);

return 0;
}


σκοπος μου ειναι να μην καλω την συναρτηση με εναν στανταρ αριθμος αλλα με αριθμο που θα αρχικοποιει η for στο δευτερο ορισμα της.

η εξοδος ειναι 2 2 1 1 ενω ηθελα 2 1 θα το βρω το λαθος....
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό Star_Light » 23 Ιούλ 2011, 01:03

Και θελω να ρωτησω και το εξης ακομη που μου εκανε εντυπωση καπως....

εφοσον η list_destroy παιζει με pass by value πως κανει την δουλεια της ??? Πως τους διαγραφει τελικα τους κομβους.

ειχες πει επισης πως το if(!new) μεσα στην συναρτηση δεν δειχνει αν απετυχε το calloc() ... πως και ετσι????
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό migf1 » 23 Ιούλ 2011, 02:33

Star_Light έγραψε:σου ορκιζομαι οτι το εχω καταλαβει αλλα μου ξεφυγε ισως λογω κουρασης :/

σκεφτηκα κατι αλλο ομως το οποιο δεν δουλευει.

Βασικα δουλευει αλλα βγαζει 2 φορες τα αποτελεσματα που θελω ενω εγω τα θελω μια.

τροποποιησα τον κωδικα ως εξης :

Κώδικας: Επιλογή όλων

int main ()
{
int static id;
Customer *head ,*newnode;

head = NULL;
newnode=NULL;

for(id=1; id<3; id++)
{
list_prepend(&head,id);
list_prepend(&head,id);
}
list_print(head);
free(newnode);
free(head);

return 0;
}


σκοπος μου ειναι να μην καλω την συναρτηση με εναν στανταρ αριθμος αλλα με αριθμο που θα αρχικοποιει η for στο δευτερο ορισμα της.

η εξοδος ειναι 2 2 1 1 ενω ηθελα 2 1 θα το βρω το λαθος....

Μα αφού την καλείς 2 φορές την list_prepend() μέσα στο for-loop!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό migf1 » 23 Ιούλ 2011, 02:36

Star_Light έγραψε:Και θελω να ρωτησω και το εξης ακομη που μου εκανε εντυπωση καπως....

εφοσον η list_destroy παιζει με pass by value πως κανει την δουλεια της ??? Πως τους διαγραφει τελικα τους κομβους.

Τη δουλειά την κάνει η free() μέσα στην list_destroy() ή οποία free() καταστρέφει τους κόμβους στους οποίους δείχνει κάθε φορά ο δείκτης list μέσα στο loop

έγραψε:ειχες πει επισης πως το if(!new) μεσα στην συναρτηση δεν δειχνει αν απετυχε το calloc() ... πως και ετσι????

Αποκλείεται να έχω πει τέτοιο πράγμα!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό Star_Light » 23 Ιούλ 2011, 02:42

migf1 έγραψε:
Μα αφού την καλείς 2 φορές την list_prepend() μέσα στο for-loop!


Mα τι βλακας ειμαι εγω ρε :/ Κουτόπαιδο!!!

migf1 έγραψε:
Star_Light έγραψε:Και θελω να ρωτησω και το εξης ακομη που μου εκανε εντυπωση καπως....

εφοσον η list_destroy παιζει με pass by value πως κανει την δουλεια της ??? Πως τους διαγραφει τελικα τους κομβους.

1.Τη δουλειά την κάνει η free() μέσα στην list_destroy() ή οποία free() καταστρέφει τους κόμβους στους οποίους δείχνει κάθε φορά ο δείκτης list μέσα στο loop

έγραψε:ειχες πει επισης πως το if(!new) μεσα στην συναρτηση δεν δειχνει αν απετυχε το calloc() ... πως και ετσι????

2.Αποκλείεται να έχω πει τέτοιο πράγμα!


1. A ναι σωστα.

2. Ναι δικια μου βλακεια... κανε σαν να μην το διαβασες ποτε :P
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Προηγούμενη

Επιστροφή στο Μαθήματα C