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

προβλημα με δυναμικη λιστα στη C


swcratis

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

Δημοσ.

καλησπερα,εχω το εξης προβλημα.Θελω να φτιαξω 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::cry:

 

ευχαριστω!

Δημοσ.

θες να μου πεις που εχω λαθος στη C?Επειδη το προβλημα δεν ειναι τοσο ευκολο μπορει εγω να μη το εξηγω καλα.

Τεσπα ευχαριστω για τη βοηθεια.

Δημοσ.

Λίγο που δεν τα εξηγείς, λίγο που δεν έχουμε την αρχική εκφώνηση, λίγο που είναι ανακατωμένος ο κώδικας... δεν καταλαβαίνω τί θες ουσιαστικά να φτιάξεις.

 

Επίσης άλλο η δομή (structure) και άλλο η λίστα. Τη δομή την ορίζουμε, η λίστα είναι μια επινόηση.

Δημοσ.

ναι συμφωνω αλλο δομη αλλο λιστα.Δεν λεω οτι ξερω πολυ καλη C αλλα θελω βοηθεια.

ας προσπαθησω να το εξηγησω καλυτερα.Εχω 2 δομες.τη name1 και τη dynamic.Επειδη τα στοιχεια της λιστας με στοιχεια της δομης name1 ειναι σταθερα και δεν αλλαζουν φτιαχνω πινακα δομων τον m[3].Καθε στοιχειο ομως αυτου του πινακα θελω να να "συνδεεται" με μια δυναμικη λιστα διαφορετικη για καθε στοιχειο του m[3].Καθε στοιχειο της δυναμικης λιστας να ειναι τυπου της δομης dynamic.

Δηλαδη πρεπει πρωτα αφου ορισω τα structs (name1,dynamic) να δημιουργησω με μια συναρτηση createlist τη δυναμικη λιστα με στοιχεια της δομης dynamic?

Και ρωταω πως θα γινει να υπαρχει ενας δεικτης σε καθε στοιχειο του m[3] που να δειχνει στη δυναμικη του λιστα?

Δημοσ.

Αν κατάλαβα καλά, αυτό που θες είναι το πως θα κάνεις την αρχικοποίηση των μεταβλητών.

 

>
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 :P

Ελπίζω να βοήθησε λίγο.

Δημοσ.

Οι αριθμοί 1,2,3 τί νόημα έχουν να υπάρχουν, αφού λες πως δεν πρόκειται να μεταβληθούν?

Θα ισχύει πάντα m.a == i+1 άρα το μέλος int a; της name1{} είναι άχρηστο και δεν έχει καμία προγραμματιστική αξία.

Δημοσ.
Οι αριθμοί 1,2,3 τί νόημα έχουν να υπάρχουν, αφού λες πως δεν πρόκειται να μεταβληθούν?

Θα ισχύει πάντα m.a == i+1 άρα το μέλος int a; της name1{} είναι άχρηστο και δεν έχει καμία προγραμματιστική αξία.

 

ok δε το ηξερα.Απλα τα δεδομενα που θα εχει ο m[3] τα θελει το προγραμμα να ειναι στανταρ εκτος απο τη δυναμικη λιστα του καθενος που θα μπορει να αλλαζει.Δεν ειναι εκει το προβλημα.

Δημοσ.

Οι αριθμοί ΕΙΝΑΙ στάνταρ κι εξηγώ γιατί. Δε λέω πως είναι πρόβλημα να υπάρχουν, αλλά γενικώς δεν είναι ό,τι πιο όμορφο το hardcoding αν δεν υπάρχει σοβαρός λόγος.

 

Επίσης αυτό:

m.ann = (dynamic *) malloc(sizeof(struct dynamic));

...μπορεί να γραφτεί και πιο όμορφα:

m.ann = malloc(sizeof(dynamic));

αν και οι δείκτες δομών μέσα σε άλλη δομή δε μου πολυαρέσουν, αλλά anyway.

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

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

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