swcratis Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 καλησπερα,εχω το εξης προβλημα.Θελω να φτιαξω 2 λιστες μια σταστικη και μια δυναμικη.Η στατικη λιστα εχει 3 στοιχεια αλλα καθε στοιχειο απο αυτα τα 3 εχει και μια δικη του δυναμικη λιστα.Εχω σκεφτει να βαλω στον ορισμο της δομης των στατικων στοιχειων εναν δεικτη ο οποιος θα δειχνει σε στοιχεια της δομης της δυναμικης λιστας.Το προβλημα μου ειναι οταν αρχικοποιω τις τιμες του στατικου πινακα δομων. Ο κωδικας για τη στατικη ειναι: > struct name1 { int a; char name[20]; struct dynamic *ann; //deiktis sth domh dynamic struct topic *next ; //gia to epomeno stoixeio tis statikis listas name1 }; struct name1 m[3]={ {1,"κωστας",m[0].ann=????????}, {2,"ειρηνη",m[1].ann=?????}, {3,"αντωνης",m[2].ann=???????} }; struct dynamic { int b; char something[10]; char some[30]; struct announcement *next; }; struct name1 *head; //deiktis gia na deixnei stin arxi tis statikis listas typedef struct name1 *ptr; //deiktis gia na prospelaunontai ta stoixeia tis statikis typedef struct dynamic *pk; //deiktis gia tin prospelasi tis dynamikis listas ptr head; //o ptr na deixnei stin arxi tis listas struct dynamic *header; //deiktis gia tin arxi tis litas me stoixeia dynamic pk header; Δηλαδη θα εχω μια στατικη λιστα τησ οποιας τα στοιχεια θα ανηκουν στη δομη name1 αλλα θελω το καθε στοιχειο της να δειχνει σε μια δικη του δυναμικη λιστα της οποιας στοιχεια θα ειναι της struct dynamic.Γι' αυτο εχω βαλει μεσα στη δομη struct name1 τον δεικτη struct dynamic *ann;.Αλλα πως θα γινει να αρχικοποιώ αυτον το δείκτη?Μηπως πρεπει να δωσω ενα ονομα στη δυναμικη λιστα και να βαζω τον δεικτη αυτον να δειχνει στο πρωτο της στοιχειο?? help!!!!!:cry: ευχαριστω!
PCharon Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 Συμφορουμίτη πρέπει να διαβάσεις λίγο ακομα σύνταξη για τη C. Τα έχεις κάνει μαντάρα...
swcratis Δημοσ. 22 Οκτωβρίου 2008 Μέλος Δημοσ. 22 Οκτωβρίου 2008 θες να μου πεις που εχω λαθος στη C?Επειδη το προβλημα δεν ειναι τοσο ευκολο μπορει εγω να μη το εξηγω καλα. Τεσπα ευχαριστω για τη βοηθεια.
PCharon Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 Λίγο που δεν τα εξηγείς, λίγο που δεν έχουμε την αρχική εκφώνηση, λίγο που είναι ανακατωμένος ο κώδικας... δεν καταλαβαίνω τί θες ουσιαστικά να φτιάξεις. Επίσης άλλο η δομή (structure) και άλλο η λίστα. Τη δομή την ορίζουμε, η λίστα είναι μια επινόηση.
swcratis Δημοσ. 22 Οκτωβρίου 2008 Μέλος Δημοσ. 22 Οκτωβρίου 2008 ναι συμφωνω αλλο δομη αλλο λιστα.Δεν λεω οτι ξερω πολυ καλη C αλλα θελω βοηθεια. ας προσπαθησω να το εξηγησω καλυτερα.Εχω 2 δομες.τη name1 και τη dynamic.Επειδη τα στοιχεια της λιστας με στοιχεια της δομης name1 ειναι σταθερα και δεν αλλαζουν φτιαχνω πινακα δομων τον m[3].Καθε στοιχειο ομως αυτου του πινακα θελω να να "συνδεεται" με μια δυναμικη λιστα διαφορετικη για καθε στοιχειο του m[3].Καθε στοιχειο της δυναμικης λιστας να ειναι τυπου της δομης dynamic. Δηλαδη πρεπει πρωτα αφου ορισω τα structs (name1,dynamic) να δημιουργησω με μια συναρτηση createlist τη δυναμικη λιστα με στοιχεια της δομης dynamic? Και ρωταω πως θα γινει να υπαρχει ενας δεικτης σε καθε στοιχειο του m[3] που να δειχνει στη δυναμικη του λιστα?
Billman Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 Αν κατάλαβα καλά, αυτό που θες είναι το πως θα κάνεις την αρχικοποίηση των μεταβλητών. > struct name1 m[3]={ {1,"κωστας",m[0].ann=????????}, {2,"ειρηνη",m[1].ann=?????}, {3,"αντωνης",m[2].ann=???????} }; Πέρα από NULL/0, δεν μπορείς να κάνεις και πολλά. Όταν διαχειρίζεσαι το ann, βάλε έλεγχο να βλέπεις αν είναι NULL ή όχι, έτσι ώστε να φτιάχνεις το πρώτο αντικείμενο όταν είναι απαραίτητο. > struct name1 m[3]={ {1,"κωστας",NULL,NULL}, {2,"ειρηνη",NULL,NULL}, {3,"αντωνης",NULL,NULL} }; for (i = 0; i < 3; ++i) if (m[i].ann == NULL) m[i].ann = (dynamic *) malloc(sizeof(struct dynamic)); Κάτι αντίστοιχο υποθέτω χρειάζεται και για το member topic. Ή κάπως έτσι, έχω σκουριάσει στην C Ελπίζω να βοήθησε λίγο.
swcratis Δημοσ. 22 Οκτωβρίου 2008 Μέλος Δημοσ. 22 Οκτωβρίου 2008 Eυχαριστω για το χρονο σου.Θα το δοκιμασω!
PCharon Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 Οι αριθμοί 1,2,3 τί νόημα έχουν να υπάρχουν, αφού λες πως δεν πρόκειται να μεταβληθούν? Θα ισχύει πάντα m.a == i+1 άρα το μέλος int a; της name1{} είναι άχρηστο και δεν έχει καμία προγραμματιστική αξία.
swcratis Δημοσ. 22 Οκτωβρίου 2008 Μέλος Δημοσ. 22 Οκτωβρίου 2008 Οι αριθμοί 1,2,3 τί νόημα έχουν να υπάρχουν, αφού λες πως δεν πρόκειται να μεταβληθούν?Θα ισχύει πάντα m.a == i+1 άρα το μέλος int a; της name1{} είναι άχρηστο και δεν έχει καμία προγραμματιστική αξία. ok δε το ηξερα.Απλα τα δεδομενα που θα εχει ο m[3] τα θελει το προγραμμα να ειναι στανταρ εκτος απο τη δυναμικη λιστα του καθενος που θα μπορει να αλλαζει.Δεν ειναι εκει το προβλημα.
PCharon Δημοσ. 22 Οκτωβρίου 2008 Δημοσ. 22 Οκτωβρίου 2008 Οι αριθμοί ΕΙΝΑΙ στάνταρ κι εξηγώ γιατί. Δε λέω πως είναι πρόβλημα να υπάρχουν, αλλά γενικώς δεν είναι ό,τι πιο όμορφο το hardcoding αν δεν υπάρχει σοβαρός λόγος. Επίσης αυτό: m.ann = (dynamic *) malloc(sizeof(struct dynamic)); ...μπορεί να γραφτεί και πιο όμορφα: m.ann = malloc(sizeof(dynamic)); αν και οι δείκτες δομών μέσα σε άλλη δομή δε μου πολυαρέσουν, αλλά anyway.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.