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

Κώδικας C για ταξινόμηση απλά συνδεδεμένης λίστας με αλλαγή των pointers


nikolaos_

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

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

Λάθος. Το χαμηλό επίπεδο υπάρχει και στα σύγχρονα και μάλιστα σε πλαίσια πρακτικής χρησιμότητας.

 

Η C++ αρκεί με το παραπάνω.

Εγώ όταν διάβαζα τις λίστες και τα δέντρα, σε C++ τα διάβαζα.

Πολύ καλύτερα μελετώνται στην C++ παρά στην C, είναι εύλογο γιατί.

Όταν έβλεπα C έφευγα τρέχοντας.

 

Η φιλική μου συμβουλή είναι να μάθεις C++ κατευθείαν. Ούτε καν να ασχοληθείς με την C (πέραν από τις συντακτικές τους διαφορές που ακόμα τις ψάχνω...)

Νομίζω πως ο Stroustrup έχει άλλη γνώμη...
  • Απαντ. 48
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Για τον OP, γιατί δεν αποθηκεύεις τους pointers σε ένα απλό array και να καλέσεις την qsort (που είναι στη βιβλιοθήκη της C) με την κατάλληλη function;

 

Και τα data για τη σύγκριση των nodes που θα πάνε;;

 

Δυστυχώς η δουλειά έχει σκαλώσει ακριβώς σε αυτό το σημείο και μάλλον θα το κάνω μόνος.

Δημοσ.
Και τα data για τη σύγκριση των nodes που θα πάνε;;

 

Δυστυχώς η δουλειά έχει σκαλώσει ακριβώς σε αυτό το σημείο και μάλλον θα το κάνω μόνος.

 

Τι εννοείς; Απλά χρειάζεται να υλοποιήσεις τη δικιά σου vector data structure (που αν κρατάς τα δεδομένα σαν pointer δε θα είναι πολύ χειρότερη από μία λίστα).

 

Απλά χρειάζεται να υλοποιήσεις τον comparator για την qsort.

Δημοσ.

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

Το να του λέτε να αλλάξει το πρόγραμμά του (που μάλλον δεν είναι απλό όπως δείχνει τo post του) ΔΕΝ απαντά στο ερώτημά του.

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

Αν δεν θέλει να πάρει το βιβλίο ας παιδευτεί.

 

Τέλος, περί της C, είπα απλώς την προσωπική μου άποψη άποψη ως ερασιτέχνης και επιμένω τουλάχιστον από αυτήν την σκοπιά.

Επαληθεύομαι διαρκώς στην πράξη, να όπως και τώρα.

Η STL έχει έτοιμη κλάση vector που παίρνει ότι δεδομένα της βάλεις (template). Και έχει έτοιμα ballanced δυαδικά δέντρα που ταξινομούν

τους κόμβους αυτόματα κατά την προσθήκη τους. Το πρόβλημα θα ήταν πολύ απλούστερο εκεί.

Aλλά στην C δεν υπάρχει τίποτε, πρέπει να ξαναεφεύρεις τον τροχό (και μάλιστα πιο δύσκολα...)

 

Ο Strustroup μπορεί να λέει ότι θέλει αλλά είναι πολύ κακός σύμβουλος για αρχάριους και ερασιτέχνες.

Δημοσ.
Huh?? Ιδίως ο Stroustrup είναι ο πρώτος που λέει μακριά από την C (που είναι extreme άποψη, αλλά καταλαβαίνω απόλυτα γιατί το λέει). http://www2.research.att.com/~bs/bs_faq.html#difference
Βασικά κάτω κάτω στο λινκ που έδωσα λέει ότι κάνει πλάκα...
Δημοσ.
Είναι σα να μου λες να μάθω παρωχημένα και απαρχαιωμένα πράγματα για να κατανοήσω τα πιο προχωρημένα.

Λάθος. Το χαμηλό επίπεδο υπάρχει και στα σύγχρονα και μάλιστα σε πλαίσια πρακτικής χρησιμότητας.

 

Η C++ αρκεί με το παραπάνω.

Εγώ όταν διάβαζα τις λίστες και τα δέντρα, σε C++ τα διάβαζα.

Πολύ καλύτερα μελετώνται στην C++ παρά στην C, είναι εύλογο γιατί.

Όταν έβλεπα C έφευγα τρέχοντας.

 

Η φιλική μου συμβουλή είναι να μάθεις C++ κατευθείαν. Ούτε καν να ασχοληθείς με την C (πέραν από τις συντακτικές τους διαφορές που ακόμα τις ψάχνω...)

 

Εννοεί τα δέντρα, όχι την C ή C++...

Καλό είναι να τα μαθαίνεις για να βλέπεις τρόπους σκέψεις και λύσεις. Αν θα σου χρειαστούν είναι άλλο θέμα που στηρίζεται στο τι κάνεις.

Προσωπικά έμαθα δομές δεδομένων σε C αλλά μετά πολύ εύκολα πάς σε C++.

Δημοσ.

@thanos713: ναι, τώρα το είδα :)

 

@V.I.Smirnov: από το να κάτσει να υλοποιήσει κάποιον αλγόριθμο για ταξινόμηση λίστας, δέντρων, δασών και θάμνων, σημαίνει ότι θα αλλάξει το πρόγραμμά του. Εφόσον θα δουλέψει που θα δουλέψει, γιατί δε μελετά και την εναλλακτική να αλλάξει την δομή του, να κάνει μια πιο φιλική προς το περιβάλλον και να χρησιμοποιήσει και ότι διαθέτει η C;

 

Όσο για το C vs C++ το προσπερνώ, ένας καλός προγραμματιστής πρέπει να είναι ικανός με αρκετά programming paradigms και γλώσσες, όχι μόνον σε μία-δύο.

Δημοσ.

Ε, έτσι είναι επειδή στην ουσία υλοποιώ C μέσα σε C++ και ο κυριότερος λόγος γι' αυτό είναι να δείξω, μέσω της άσκησης, ότι ξέρω να ανακαλύπτω τον τροχό. Αυτός ο τροχός έχει τώρα ένα γρανάζι που λέγεται sorting single-linked list και σε αυτό έχω σκαλώσει.

 

Αν μέχρι αύριο δε το έχω πετύχει μόνος, ας είναι και ένας εντελώς αναποτελεσματικός ο αλγόριθμος ταξινόμησης, αφού 5-10 στοιχεία θα ταξινομούνται κάθε φορά που χρειάζεται ταξινόμηση (τα 10000 είπα το απέφυγα), θα αναζητήσω το βιβλίο που αναφέρθηκε.

Δημοσ.

@dop

 

Παραφράζεις αυτά που γράφω.

 

Για το C vs C++ έγραψα ότι

"είπα απλώς την προσωπική μου άποψη άποψη ως ερασιτέχνης και επιμένω τουλάχιστον από αυτήν την σκοπιά."

Δεν μίλησα για έναν επαγγελματία που είναι ή πρέπει να φιλοδοξεί να γίνει γκουρού.

Είναι ευνόητο ότι ένας γκουρού ξέρει και C.

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

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

Το παράδειγμα είναι πάλι εδώ : στην C++ υπάρχουν πολύ περισσότερες επιλογές είτε στην STL είτε στην βιβλιογραφία,

και πολύ καλύτεροι τρόποι καταρχήν να φτιαχτεί το πρόγραμμα.

 

Εγώ είπα τι να κάνει σε αυτό που ζήτησε για να μην παιδευτεί.

Σε ότι αφορά τις αλλαγές του προγράμματος, είναι προφανές ότι η C++ προσφέρει πολύ περισσότερες δυνατότητες και

πρέπει να προτιμάται ειδικά από όσους θέλουν καταρχήν να κάνουν τη δουλειά τους.

Tαξινόμηση λιστών μπορεί να γίνει και αν οι λίστες είναι πρωτογενώς φτιαγμένες (δηλ. όχι έτοιμες) με κλάσεις.

Δεν βλέπω κανένα ουσιαστικό λόγο τέτοια προγράμματα να γράφονται σε C κι όχι σε C++.

 

-

Δημοσ.
Δεν είναι και ο μόνος...

 

Δεν είναι δικό μου σφάλμα.

Εγώ συνήθως σκέπτομαι πριν γράψω και προσπαθώ να εκφράζομαι με σαφήνεια και ακριβολογία, σε αντίθεση με πολλούς άλλους.

Για μένα το παρόν θέμα έκλεισε και δεν θα ξαναγράψω.

Δημοσ.
Δεν είναι δικό μου σφάλμα.

Εγώ συνήθως σκέπτομαι πριν γράψω και προσπαθώ να εκφράζομαι με σαφήνεια και ακριβολογία, σε αντίθεση με πολλούς άλλους.

Για μένα το παρόν θέμα έκλεισε και δεν θα ξαναγράψω.

Όταν υπάρχει επικοινωνία ποτέ δεν φταίει ένας από τους 2...
Δημοσ.

Εγω ακομα δεν μπορώ να καταλαβω.. ενα πράγμα γίνεται με πολλούς τρόπους.. υπάρχουν αρκετά εργαλεία στη γλώσσα.. πώς γίνεται να ξέρουμε απο πρίν ποιός ειναι ο πιο οικονομικός απο πλευράς μνήμης?.. Οσο λιγότερη μνήμη τόσο καλύτερος ο κώδικας.. δηλαδη δοκιμάζεις και στην πορεία το αλλάζεις? υπάρχει κάποια ατυπη ιεράρχιση? Υπάρχει κανα βιβλίο που να τα εξηγεί αυτα?

Δημοσ.
Εγω ακομα δεν μπορώ να καταλαβω.. ενα πράγμα γίνεται με πολλούς τρόπους.. υπάρχουν αρκετά εργαλεία στη γλώσσα.. πώς γίνεται να ξέρουμε απο πρίν ποιός ειναι ο πιο οικονομικός απο πλευράς μνήμης?.. Οσο λιγότερη μνήμη τόσο καλύτερος ο κώδικας.. δηλαδη δοκιμάζεις και στην πορεία το αλλάζεις? υπάρχει κάποια ατυπη ιεράρχιση? Υπάρχει κανα βιβλίο που να τα εξηγεί αυτα?

 

Υπάρχουν τα βιβλία για δομές δεδομένων (data structures) που τα εξηγούν όλα αυτά. Τώρα για το ποιά μέδοδο θα ακολουθήσεις είναι καθαρά στο τι σε βολεύει για αυτό που θέλεις να κάνεις. Στα βιβλία εξηγούν την χρήση του καθενός.

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

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

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