Ο διαχωρισμός έγινε.
Qdata έγραψε:Ο διαχωρισμός έγινε.
Star_Light έγραψε:migf1 εγω τωρα κοιταω (πρακτικα παλι) το 3ο μερος... οπου να ναι το τελειωνω και αυτο και μπαινω στο 4ο.
Απλα ρε συ ειναι δυσκολα.... θελω να πω... θελει δουλεια. Καλα δεν το συζητω η βοηθεια σου ηταν μεγαλη
αμα τα διαβαζαμε οπως τα εχουν στο ιντερνετ οι περισσοτεροι δεν θα ειχαμε καμια τυχη (εγω ειδικα) .
migf1 έγραψε:Star_Light έγραψε:migf1 εγω τωρα κοιταω (πρακτικα παλι) το 3ο μερος... οπου να ναι το τελειωνω και αυτο και μπαινω στο 4ο.
Απλα ρε συ ειναι δυσκολα.... θελω να πω... θελει δουλεια. Καλα δεν το συζητω η βοηθεια σου ηταν μεγαλη
αμα τα διαβαζαμε οπως τα εχουν στο ιντερνετ οι περισσοτεροι δεν θα ειχαμε καμια τυχη (εγω ειδικα) .
Δεν είναι εύκολο όντως, αλλά η όλη ιστορία είναι να έχουν γίνει κτήμα σου οι βασικές αρχές που διέπουν τους δείκτες. Από εκεί πηγάζει η όποια μετέπειτα δυσκολία.
Αν είναι ξεκάθαρο το pass by reference και το pass by value των δεικτών μέσα στης συναρτήσεις (όχι των απλών μεταβλητών, αλλά των δεικτών... να είναι πλήρως κατανοητό δηλαδή το πως και γιατί δουλεύει) καθώς και η σύνταξη τους όταν συνδυάζονται με structs, τα υπόλοιπα είναι περισσότερο θέμα λογικής σκέψης, ανεξάρτητα από γλώσσα.
Star_Light έγραψε:Πιστευω πλεον στους δεικτες ειμαι πολυ οκ!!!!!
migf1 έγραψε:
Ωραίος! Στον νήμα "Τα πάντα για τη C/C++" πόσταρα και τον κώδικα για τη διαγραφή κόμβου, που αν τον δοκιμάσει κανείς να τον κάνει μόνος του δεν είναι τετριμμένος (ήταν και SOS στα job-interviews).
Θα τον συμπεριλάβω αν είναι στον 7ο ή στο 8ο μέρος του tutorial. Παρεμπιπτόντως, έβαλα πίνακα περιεχομένων και τίτλους σε όλα τα μέρη του tutorial, ώστε να είναι ευκολότερη η εύρεση των πληροφοριών που περιέχουν.
Περιμένω και λύσεις για την άσκηση του 6ου μέρους, που ουσιαστικά λειτουργεί ως πρακτική εισαγωγή στα hash-tables. Αλλά αν δεν πρόκειται να ασχοληθεί κανείς, πείτε μου να ποστάρω τη λύση της.
migf1 έγραψε:Μια χαρά!
Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;
/*==========================================================
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;
}
Star_Light έγραψε:
στο μεταξυ δεν μου απαντησες σε αυτο.... δεν θα το ειδες ε???migf1 έγραψε:Μια χαρά!
Το head δεν χρειάζεται να το κάνεις calloc( ) στην main γιατί η list_prepend() είναι φτιαγμένη να κάνει calloc() μέσα της, οπότε αρκεί απευθείας ένα list_prepend( &list, 1) για να δημιουργηθεί ο 1ος κόμβος της λίστας με την τιμή 1. Υποθέτω το έκανες έτσι απλά για δοκιμαστικούς λόγους, ε;
Βασικα εκανα αυτο που μου λες... αλλα βγαζει μονο το 2 :S
Οχι δηλαδη το 2 1 . (Οπως σε εσενα που πηγαινε 62 52)Spoiler: show
migf1 έγραψε:
Στον κώδικα αυτόν αφενός προσθέτεις μόνο έναν κόμβο στη λίστα σου, με τιμή 1 όταν καλείς την: list_prepend(&head, 1); στην main() μία και μόνη φορά, κι αφετέρου μέσα στο σώμα της list_prepend() αντί να βάζεις στο πεδίο id του νέου κόμβου το 2ο όρισμα της συνάρτησης (το 1 δηλαδή σε την περίπτωσή σου) πας και βάζεις πάντα το 2.
Οπότε απολύτως λογικά, ο κώδικάς σου προσθέτει στη λίστα μονάχα έναν κόμβο, που στο πεδίο id έχει την τιμή 2.
list_prepend( &head, 1 );
list_prepend( &head, 2 );
newnode->id=2;
newnode->id=id;