C Πρόβλημα με δυο λίστες στο ίδιο πρόγραμμα

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
edessakis
Δημοσιεύσεις: 8
Εγγραφή: 01 Φεβ 2008 12:33

C Πρόβλημα με δυο λίστες στο ίδιο πρόγραμμα

Δημοσίευση από edessakis » 28 Απρ 2009 00:37

Γεια χαρά παιδιά

Έχω μια εργασία όπου θα πρέπει να χρησιμοποιήσω δυο ίδιες λίστες στο ίδιο πρόγραμμα.
Πιθανότατα έχω μπερδέψει κάποια πράγματα στη θεωρία των λιστών και δεν μπορώ να τα ξεκαθαρίσω.
Ας πούμε δηλώνοντας:

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

struct list{
      int data;
      struct list * next;
};
τι ακριβώς δηλώνω; Μια λίστα με το όνομα list ή μια δομή την οποία μπορώ να χρησιμοποιήσω
αναθέτοντάς την σε δυο ξεχωριστές λίστες π.χ. list_1 & list_2.
Κι αν συμβαίνει αυτό ποιός είναι ο κώδικας της ανάθεσης;
Αν πάλι δεν συμβαίνει τι κάνω; Δηλώνω τις δυο λίστες ως εξής:

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

struct list_1{
      int data;
      struct list_1 * next;
};

struct list_2{
      int data;
      struct list_2 * next;
};
και τις προσπελαύνω με δυο διαφορετικούς δείκτες head π.χ. head1 & head2;

Αυτό είναι κυρίως το μπέρδεμά μου.
Ευχαριστώ.

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

C Πρόβλημα με δυο λίστες στο ίδιο πρόγραμμα

Δημοσίευση από Erevis » 28 Απρ 2009 01:45

όταν δηλώνεις ενα struct δημιουργείται ένας νέος τύπος δεδομένων που είναι επαναχρησιμοποιήσημος, όπως πχ ένας integer

πχ:

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

struct point
{
    int x;
    int y;
};

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

δηλαδή:

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

int main(void)
{
     point shmeio1,shmeio2;
     
     shmeio1.x = 5;
     shmeio1.y = 10;
     shmeio2.x = 12;
     shmeio2.y = 7;
}
Έτσι κι στην περίπτωσή σου, θές ένα struct που να αντιπροσωπεύει ένα κόμβο μιας λίστας...
με τον όρο head συνήθως εννοούμε τον pointer που δείχνει στον πρώτο κόμβο της.

Όταν δηλώσεις δηλαδή δύο pointers του τύπου node(κόμβος), και μετά τους βάλεις να δείχνουν σε δεσμευμένους από το heap κόμβους (μέσω της malloc) τότε θα έχεις τον πρώτο κόμβο κάθε λίστας...

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

C Πρόβλημα με δυο λίστες στο ίδιο πρόγραμμα

Δημοσίευση από virxen75 » 28 Απρ 2009 12:51

δηλώνεις μία δομή που προσομειάζει το σκεπτικό υλοποίησης μιας λίστας

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

επειδή και το επόμενο στοιχείο της λίστας θα έχει την ίδια δομή
βάζεις στην δήλωση της struct list "αναδρομική κλήση" μέσα της για να δηλώσεις δείκτη
σε επόμενο στοιχείο της ίδιας δομής.

όσον αφορά τις 2 λίστες αφού είναι ίδιες χρειάζεσαι ένα μόνο struct list το αρχικό δηλαδή
που αναφέρεις.Απλά στην main σου θα ορίσεις 2 μεταβλητές τύπου struct list
την head1 και την head2 που θα είναι οι κεφαλές-αρχές των λιστών σου με βάση τις
οποίες θα χειρίζεσαι τις λίστες σου.
Ομοίως τις current1 ,current2 (struct list) με τις οποίες θα δημιουργείς
νέο κόμβο για να τον εισάγεις σε κάθε λίστα.


δες και αυτό.
Συνημμένα
Κεφ 7 - ΛΙΣΤΕΣ.zip
(354.61 KiB) Μεταφορτώθηκε 2068 φορές

edessakis
Δημοσιεύσεις: 8
Εγγραφή: 01 Φεβ 2008 12:33

C Πρόβλημα με δυο λίστες στο ίδιο πρόγραμμα

Δημοσίευση από edessakis » 28 Απρ 2009 15:44

Παιδιά ευχαριστώ πολύ και τους δυο για την πολύτιμη βοήθειά σας.
Μετά από όσα μου δώσατε ξεπέταξα όλη την υποεργασία μέσα σε 3 ώρες.
Είναι παράξενο το πόσο εύκολα φαίνονται μερικά πράγματα όταν ξεκαθαρίσουν στο μυαλό σου.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης