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

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

Re: ΚΕΦΑΛΑΙΟ 6 - ΔΕΙΚΤΕΣ

Δημοσίευσηαπό Star_Light » 20 Ιούλ 2011, 18:21

ΝΑΙ αμε.... Qdata!
Γνώσεις ⇛ 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: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό Qdata » 20 Ιούλ 2011, 20:29

Ο διαχωρισμός έγινε. :)

Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

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

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

Qdata έγραψε:

Ο διαχωρισμός έγινε. :)


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

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

Δημοσίευσηαπό migf1 » 21 Ιούλ 2011, 21:42

Star_Light έγραψε:migf1 εγω τωρα κοιταω (πρακτικα παλι) το 3ο μερος... οπου να ναι το τελειωνω και αυτο και μπαινω στο 4ο.
Απλα ρε συ ειναι δυσκολα.... θελω να πω... θελει δουλεια. Καλα δεν το συζητω η βοηθεια σου ηταν μεγαλη
αμα τα διαβαζαμε οπως τα εχουν στο ιντερνετ οι περισσοτεροι δεν θα ειχαμε καμια τυχη (εγω ειδικα) . :P

Δεν είναι εύκολο όντως, αλλά η όλη ιστορία είναι να έχουν γίνει κτήμα σου οι βασικές αρχές που διέπουν τους δείκτες. Από εκεί πηγάζει η όποια μετέπειτα δυσκολία.

Αν είναι ξεκάθαρο το pass by reference και το pass by value των δεικτών μέσα στης συναρτήσεις (όχι των απλών μεταβλητών, αλλά των δεικτών... να είναι πλήρως κατανοητό δηλαδή το πως και γιατί δουλεύει) καθώς και η σύνταξη τους όταν συνδυάζονται με structs, τα υπόλοιπα είναι περισσότερο θέμα λογικής σκέψης, ανεξάρτητα από γλώσσα.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

migf1 έγραψε:
Star_Light έγραψε:migf1 εγω τωρα κοιταω (πρακτικα παλι) το 3ο μερος... οπου να ναι το τελειωνω και αυτο και μπαινω στο 4ο.
Απλα ρε συ ειναι δυσκολα.... θελω να πω... θελει δουλεια. Καλα δεν το συζητω η βοηθεια σου ηταν μεγαλη
αμα τα διαβαζαμε οπως τα εχουν στο ιντερνετ οι περισσοτεροι δεν θα ειχαμε καμια τυχη (εγω ειδικα) . :P

Δεν είναι εύκολο όντως, αλλά η όλη ιστορία είναι να έχουν γίνει κτήμα σου οι βασικές αρχές που διέπουν τους δείκτες. Από εκεί πηγάζει η όποια μετέπειτα δυσκολία.

Αν είναι ξεκάθαρο το pass by reference και το pass by value των δεικτών μέσα στης συναρτήσεις (όχι των απλών μεταβλητών, αλλά των δεικτών... να είναι πλήρως κατανοητό δηλαδή το πως και γιατί δουλεύει) καθώς και η σύνταξη τους όταν συνδυάζονται με structs, τα υπόλοιπα είναι περισσότερο θέμα λογικής σκέψης, ανεξάρτητα από γλώσσα.


Πιστευω πλεον στους δεικτες ειμαι πολυ οκ!!!!!
Γνώσεις ⇛ 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 » 22 Ιούλ 2011, 10:48

Star_Light έγραψε:Πιστευω πλεον στους δεικτες ειμαι πολυ οκ!!!!!

Ωραίος! Στον νήμα "Τα πάντα για τη C/C++" πόσταρα και τον κώδικα για τη διαγραφή κόμβου, που αν τον δοκιμάσει κανείς να τον κάνει μόνος του δεν είναι τετριμμένος (ήταν και SOS στα job-interviews :lol:).

Θα τον συμπεριλάβω αν είναι στον 7ο ή στο 8ο μέρος του tutorial. Παρεμπιπτόντως, έβαλα πίνακα περιεχομένων και τίτλους σε όλα τα μέρη του tutorial, ώστε να είναι ευκολότερη η εύρεση των πληροφοριών που περιέχουν.

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

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

Δημοσίευσηαπό Star_Light » 22 Ιούλ 2011, 14:35

migf1 έγραψε:
Ωραίος! Στον νήμα "Τα πάντα για τη C/C++" πόσταρα και τον κώδικα για τη διαγραφή κόμβου, που αν τον δοκιμάσει κανείς να τον κάνει μόνος του δεν είναι τετριμμένος (ήταν και SOS στα job-interviews :lol:).

Θα τον συμπεριλάβω αν είναι στον 7ο ή στο 8ο μέρος του tutorial. Παρεμπιπτόντως, έβαλα πίνακα περιεχομένων και τίτλους σε όλα τα μέρη του tutorial, ώστε να είναι ευκολότερη η εύρεση των πληροφοριών που περιέχουν.

Περιμένω και λύσεις για την άσκηση του 6ου μέρους, που ουσιαστικά λειτουργεί ως πρακτική εισαγωγή στα hash-tables. Αλλά αν δεν πρόκειται να ασχοληθεί κανείς, πείτε μου να ποστάρω τη λύση της.


Θα ασχοληθουμε!!! Απλα χθες ειχα να ανεβασω το 1ο μαθημα στα δικτυα :D

στο μεταξυ δεν μου απαντησες σε αυτο.... δεν θα το ειδες ε???


migf1 έγραψε:Μια χαρά!

Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;


Βασικα εκανα αυτο που μου λες... αλλα βγαζει μονο το 2 :S

Οχι δηλαδη το 2 1 . (Οπως σε εσενα που πηγαινε 62 52)

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

/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
void list_prepend(Customer **head , int id);

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

head = NULL;
newnode=NULL;

/*{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
} */

list_prepend(&head,1);
list_print(head);

free(newnode);
free(head);

return 0;
}
void list_prepend(Customer **head , int id)
{
Customer *newnode= calloc(1,sizeof(Customer));
if(!newnode)
return;

newnode->id=2;
newnode->next=(*head);
(*head)=newnode;
return;
}


void list_print(Customer *head)
{
while(head)
{
printf("%d \n",head->id);
head=head->next;
}
putchar('\n');
return;
}


οσο για αυτο που ρωτησες ε ναι... τα διαβαζω προσεκτικα πρωτα και μετα προσπαθω να τα κανω εξασκηση...

ουτως η αλλως τον κωδικα τον εχω ετοιμο απο τοτε που πρωτοξεκινουσαμε με τις λιστες ;)
Γνώσεις ⇛ 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 » 22 Ιούλ 2011, 15:32

Star_Light έγραψε:
στο μεταξυ δεν μου απαντησες σε αυτο.... δεν θα το ειδες ε???

migf1 έγραψε:Μια χαρά!

Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;


Βασικα εκανα αυτο που μου λες... αλλα βγαζει μονο το 2 :S

Οχι δηλαδη το 2 1 . (Οπως σε εσενα που πηγαινε 62 52)

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

/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
void list_prepend(Customer **head , int id);

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

head = NULL;
newnode=NULL;

/*{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
} */

list_prepend(&head,1);
list_print(head);

free(newnode);
free(head);

return 0;
}
void list_prepend(Customer **head , int id)
{
Customer *newnode= calloc(1,sizeof(Customer));
if(!newnode)
return;

newnode->id=2;
newnode->next=(*head);
(*head)=newnode;
return;
}


void list_print(Customer *head)
{
while(head)
{
printf("%d \n",head->id);
head=head->next;
}
putchar('\n');
return;
}


Πάνω που νομίζω πως τα χεις καταλάβει, μου πετάς κάτι τέτοια και αναγκάζομαι να αναθεωρήσω :mrgreen:

Στον κώδικα αυτόν αφενός προσθέτεις μόνο έναν κόμβο στη λίστα σου, με τιμή 1 όταν καλείς την: list_prepend(&head, 1); στην main() μία και μόνη φορά, κι αφετέρου μέσα στο σώμα της list_prepend() αντί να βάζεις στο πεδίο id του νέου κόμβου το 2ο όρισμα της συνάρτησης (το 1 δηλαδή σε την περίπτωσή σου) πας και βάζεις πάντα το 2.

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

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

Δημοσίευσηαπό Star_Light » 22 Ιούλ 2011, 17:25

migf1 έγραψε:

Στον κώδικα αυτόν αφενός προσθέτεις μόνο έναν κόμβο στη λίστα σου, με τιμή 1 όταν καλείς την: list_prepend(&head, 1); στην main() μία και μόνη φορά, κι αφετέρου μέσα στο σώμα της list_prepend() αντί να βάζεις στο πεδίο id του νέου κόμβου το 2ο όρισμα της συνάρτησης (το 1 δηλαδή σε την περίπτωσή σου) πας και βάζεις πάντα το 2.

Οπότε απολύτως λογικά, ο κώδικάς σου προσθέτει στη λίστα μονάχα έναν κόμβο, που στο πεδίο id έχει την τιμή 2.


Κοιτα εγω ουσιαστικα ηθελα να προσθεσω το 2 σε μια ηδη υπαρχουσα λιστα στην οποια ο head δειχνει στο 1.
Καλοντας την συναρτηση list_prepend μια μονο φορα με ορισμα το 1... βαζεις μονο το 1.
Εγω ηθελα να βαλω και το 2.

Το calloc() μεσα στην συναρτηση που μου το παρατηρησες σε προηγουμενο ποστ το εκανα για να φτιαξω τον 2ο κομβο
και μεσω της συναρτησης list_prepend να το βαλω μπροστα απο τον 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: Μάθημα - Απλά Συνδεδεμένες Λίστες

Δημοσίευσηαπό migf1 » 22 Ιούλ 2011, 18:43

Μάλλον.. μπα! :lol:

Για να βάλεις 2 κόμβους στη λίστα, πρέπει να καλέσεις 2 φορές την list_prepend() στην main()...
Κώδικας: Επιλογή όλων

list_prepend( &head, 1 );
list_prepend( &head, 2 );

και προφανώς, στο σώμα της list_prepend() να αλλάξεις το:
Κώδικας: Επιλογή όλων
newnode->id=2;

σε:
Κώδικας: Επιλογή όλων
newnode->id=id;

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

ΠροηγούμενηΕπόμενο

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

cron