migf1 Δημοσ. 4 Ιουνίου 2012 Δημοσ. 4 Ιουνίου 2012 Yeap! Και για να κάνουμε λίγο πιο πλήρη κι ασφαλή τον κώδικα της push() ... > bool Push(DStack **DS, int value, float coefficient, const char *token) { DStack *NewItem = NULL; /* sanity check */ if ( !DS || !token ) return false; if ( NULL == (NewItem = malloc(sizeof(DStack)) ) return false; // Values NewItem->_Node.value = value; NewItem->_Node.coefficient = coefficient; NewItem->_Node.token = (char *)token; // Link NewItem->Next = *DS; *DS = NewItem; return true; }
migf1 Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Τίποτα, syntactic candy είναι (προσωπικά δεν το χρησιμοποιώ, απλά άφησα τον κώδικα όπως τον είχε ο downloadpercent)
defacer Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Καλά όλα τα παραπάνω, αλλά ας μη ξεχνάμε ότι άλλο πράγμα το stack σαν container και άλλο το πώς υλοποιείται. Θα μπορούσες κάλλιστα να έχεις τα στοιχεία σε πίνακα και απλώς να περιορίζεις τον τρόπο με τον οποίο ο χρήστης του stack μπορεί να τα προσπελάσει (ακριβώς δηλαδή αυτό που κάνεις και τώρα, μόνο που αντί για πίνακα έχεις linked list, και ακόμα γι' αυτό το λόγο στη C++ o std::stack δεν είναι container αλλά container adapter). Θα ήταν κι αυτό μια κάπως ενδιαφέρουσα άσκηση. Τέλος, για να κρατήσεις τα μεγαλύτερα πλεονεκτήματα και του stack και του list θα μπορούσες να χρησιμοποιήσεις ένα deque (επίσης μια καλή άσκηση).
Re4cTiV3 Δημοσ. 5 Ιουνίου 2012 Μέλος Δημοσ. 5 Ιουνίου 2012 Βασικά αυτό ήταν ένα θέμα παλιό που είχε βάλει και το ξεκίνησα. Ασκήσεις πάνω σε δομές θα ξεκινήσω το καλοκαίρι στον ελεύθερο χρόνο.Αν προγραμματίζεις για δομές δεδομένων, πιστεύω μαθαίνεις και καλύτερα την γλώσσα που γράφεις, οπότε δυο σε ένα Δεν κατάλαβα τι λες σχετικά με τον πίνακα, να σου πω την αλήθεια Θα ψάξω κανένα site με data structure exercises.ξέρετε κανένα;
Downloadpercent Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 το _ δεν σημαίνει κάτι συγκεκριμένο απλά δεν ήξερα πως να το ονομάσω και δεν μπορούσα να βάλω Node Node thanks migf, Παιδιά δεν έχω ασχοληθεί και πολύ με όλα αυτά, σας είδα να χρησιμοποιείται Node *back Αυτή είναι η σωστή ορολογία? γιατί στο ιντερνετ βλέπω μόνο Next-Front (με λίγα λόγια μπροστά)
defacer Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Δεν κατάλαβα τι λες σχετικά με τον πίνακα, να σου πω την αλήθεια Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκεί. Το πιο απλό πράγμα δηλαδή που κάνεις και όταν χρειάζεσαι πίνακα με δυναμικό μέγεθος.
migf1 Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 ... Παιδιά δεν έχω ασχοληθεί και πολύ με όλα αυτά, σας είδα να χρησιμοποιείται Node *back Αυτή είναι η σωστή ορολογία? γιατί στο ιντερνετ βλέπω μόνο Next-Front (με λίγα λόγια μπροστά) Οι πιο κοινές ονομασίες είναι 'prev" και 'next' αλλά δεν υπάρχει περιορισμός στο τι ονόματα θα χρησιμοποιήσει κανείς. Εγώ π.χ. στις στοίβες χρησιμοποιώ 'down' (το βρίσκω πιο εύστοχο ). EDIT: Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκεί. Το πιο απλό πράγμα δηλαδή που κάνεις και όταν χρειάζεσαι πίνακα με δυναμικό μέγεθος. H Wikipedia δίνει και κώδικα: http://en.wikipedia...._type%29#Array. Όλη η σελίδα της Wikipedia για τις στοίβες είναι λίαν κατατοπιστική.
Re4cTiV3 Δημοσ. 5 Ιουνίου 2012 Μέλος Δημοσ. 5 Ιουνίου 2012 Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα. Αποστολή από το GT-I9000 με τη χρήση Insomnia App
migf1 Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα. Αποστολή από το GT-I9000 με τη χρήση Insomnia App Και με την linked-list κάνεις κάθε 3 και λίγο malloc() & free(). Τα πάντα εξαρτώνται από τις ανάγκες του εκάστοτε πρότζεκτ (ο πίνακας είναι σίγουρα πολύ πιο γρήγορος, αλλά και πολύ πιο μνημοβόρος).
Re4cTiV3 Δημοσ. 5 Ιουνίου 2012 Μέλος Δημοσ. 5 Ιουνίου 2012 Ναι όμως δεν είναι σε συνεχόμενες θέσεις, οπότε κινδυνεύεις να χάσεις και τα άλλα στοιχεία με το realloc.
migf1 Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Ναι όμως δεν είναι σε συνεχόμενες θέσεις, οπότε κινδυνεύεις να χάσεις και τα άλλα στοιχεία με το realloc. Σε συνεχόμενες θέσεις είναι, αυτό είναι το βασικό πλεονέκτημα (όλων) των πινάκων
defacer Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα. Τα πάντα είναι σωστά αν μπορείς να το αποδείξεις μαθηματικά.
migf1 Δημοσ. 5 Ιουνίου 2012 Δημοσ. 5 Ιουνίου 2012 Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκει.... Η realloc() (τουλάχιστον σε C) εγγυάται την αντιγραφή των προηγούμενων περιεχομένων του πίνακα αν αναγκαστεί να τον μετακινήσει σε άλλη περιοχή μνήμης. Οπότε δεν χρειάζεται (και 2η) αντιγραφή.
Re4cTiV3 Δημοσ. 5 Ιουνίου 2012 Μέλος Δημοσ. 5 Ιουνίου 2012 Αν δεν βρεί όμως διαθέσιμη συνεχόμενη μνήμη; Οι λίστες έχουν το καλό, οτι θα πάρουν από όπου να ναι και εκτός αυτού μπορούν στην μια περίπτωση να αποθηκεύσουν έναν int και μετά κάποιο string. Τα πάντα είναι σωστά αν μπορείς να το αποδείξεις μαθηματικά. +1 αλλά "ξέρεις καλά" μαθηματικά;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα