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

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

Δημοσ.

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;
}

  • Απαντ. 38
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.

Τίποτα, syntactic candy είναι (προσωπικά δεν το χρησιμοποιώ, απλά άφησα τον κώδικα όπως τον είχε ο downloadpercent)

Δημοσ.

Καλά όλα τα παραπάνω, αλλά ας μη ξεχνάμε ότι άλλο πράγμα το stack σαν container και άλλο το πώς υλοποιείται. Θα μπορούσες κάλλιστα να έχεις τα στοιχεία σε πίνακα και απλώς να περιορίζεις τον τρόπο με τον οποίο ο χρήστης του stack μπορεί να τα προσπελάσει (ακριβώς δηλαδή αυτό που κάνεις και τώρα, μόνο που αντί για πίνακα έχεις linked list, και ακόμα γι' αυτό το λόγο στη C++ o std::stack δεν είναι container αλλά container adapter). Θα ήταν κι αυτό μια κάπως ενδιαφέρουσα άσκηση.

 

Τέλος, για να κρατήσεις τα μεγαλύτερα πλεονεκτήματα και του stack και του list θα μπορούσες να χρησιμοποιήσεις ένα deque (επίσης μια καλή άσκηση).

Δημοσ.

Βασικά αυτό ήταν ένα θέμα παλιό που είχε βάλει και το ξεκίνησα. :)

 

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

 

Δεν κατάλαβα τι λες σχετικά με τον πίνακα, να σου πω την αλήθεια :P

 

Θα ψάξω κανένα site με data structure exercises.ξέρετε κανένα;

Δημοσ.

το _ δεν σημαίνει κάτι συγκεκριμένο απλά δεν ήξερα πως να το ονομάσω και δεν μπορούσα να βάλω Node Node

 

thanks migf,

 

Παιδιά δεν έχω ασχοληθεί και πολύ με όλα αυτά, σας είδα να χρησιμοποιείται Node *back

Αυτή είναι η σωστή ορολογία? γιατί στο ιντερνετ βλέπω μόνο Next-Front (με λίγα λόγια μπροστά)

Δημοσ.

Δεν κατάλαβα τι λες σχετικά με τον πίνακα, να σου πω την αλήθεια :P

 

Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκεί. Το πιο απλό πράγμα δηλαδή που κάνεις και όταν χρειάζεσαι πίνακα με δυναμικό μέγεθος.

Δημοσ.

...

Παιδιά δεν έχω ασχοληθεί και πολύ με όλα αυτά, σας είδα να χρησιμοποιείται Node *back

Αυτή είναι η σωστή ορολογία? γιατί στο ιντερνετ βλέπω μόνο Next-Front (με λίγα λόγια μπροστά)

Οι πιο κοινές ονομασίες είναι 'prev" και 'next' αλλά δεν υπάρχει περιορισμός στο τι ονόματα θα χρησιμοποιήσει κανείς. Εγώ π.χ. στις στοίβες χρησιμοποιώ 'down' (το βρίσκω πιο εύστοχο ).

 

EDIT:

 

Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκεί. Το πιο απλό πράγμα δηλαδή που κάνεις και όταν χρειάζεσαι πίνακα με δυναμικό μέγεθος.

H Wikipedia δίνει και κώδικα: http://en.wikipedia...._type%29#Array. Όλη η σελίδα της Wikipedia για τις στοίβες είναι λίαν κατατοπιστική.

Δημοσ.

Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα.

 

Αποστολή από το GT-I9000 με τη χρήση Insomnia App

Δημοσ.

Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα.

 

Αποστολή από το GT-I9000 με τη χρήση Insomnia App

Και με την linked-list κάνεις κάθε 3 και λίγο malloc() & free(). Τα πάντα εξαρτώνται από τις ανάγκες του εκάστοτε πρότζεκτ (ο πίνακας είναι σίγουρα πολύ πιο γρήγορος, αλλά και πολύ πιο μνημοβόρος).

Δημοσ.

Ναι όμως δεν είναι σε συνεχόμενες θέσεις, οπότε κινδυνεύεις να χάσεις και τα άλλα στοιχεία με το realloc.

Δημοσ.

Ναι όμως δεν είναι σε συνεχόμενες θέσεις, οπότε κινδυνεύεις να χάσεις και τα άλλα στοιχεία με το realloc.

 

Σε συνεχόμενες θέσεις είναι, αυτό είναι το βασικό πλεονέκτημα (όλων) των πινάκων ;)

Δημοσ.

Ναι αλλα νομιζω δεν ειναι σωστο να παιζεις φυσαρμονικα με εναν πινακα.

 

Τα πάντα είναι σωστά αν μπορείς να το αποδείξεις μαθηματικά.

Δημοσ.

Αντί να κρατάς linked list με περιεχόμενα, κρατάς πίνακα. Όταν ο πίνακας δε χωράει άλλο, κάνεις reallocate σε μεγαλύτερο και αντιγράφεις τα περιεχόμενα εκει....

Η realloc() (τουλάχιστον σε C) εγγυάται την αντιγραφή των προηγούμενων περιεχομένων του πίνακα αν αναγκαστεί να τον μετακινήσει σε άλλη περιοχή μνήμης. Οπότε δεν χρειάζεται (και 2η) αντιγραφή.

Δημοσ.

Αν δεν βρεί όμως διαθέσιμη συνεχόμενη μνήμη; Οι λίστες έχουν το καλό, οτι θα πάρουν από όπου να ναι και εκτός αυτού μπορούν στην μια περίπτωση να αποθηκεύσουν έναν int και μετά κάποιο string.

 

 

Τα πάντα είναι σωστά αν μπορείς να το αποδείξεις μαθηματικά.

 

+1 αλλά "ξέρεις καλά" μαθηματικά; :P

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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