Διαχείριση στοίβας μέσω πίνακα

Ξεκίνησε από karasainis, 21 Ιουλ 2011, 09:15:59 ΜΜ

« προηγούμενο - επόμενο »

karasainis

Παραθέτω ένα πρόβλημα με τη λύση του:
=====================================================================
Να γραφεί πρόγραμμα το οποίο διαχειρίζεται μία στοίβα μέσω ενός πίνακα ακεραίων 10 θέσεων. Συγκεκριμένα εμφανίζεται ένα επαναλαμβανόμενο μενού επιλογών της μορφής:
1. Push
2. Pop
3. Print
0. Exit
μέχρις ότου δοθεί ο αριθμός 0 όπου τότε τερματίζεται η εφαρμογή.
Για την 1η επιλογή ζητείται ένας ακέραιος αριθμός και εισάγεται στη στοίβα.
Για την 2η επιλογή γίνεται απώθηση του κορυφαίου στοιχείου της στοίβας.
Για την 3η επιλογή εκτυπώνεται η στοίβα με μορφή στοίβας (δηλ. από το κορυφαίο έως το πρώτο στοιχείο).
Για την 4η επιλογή (0) γίνεται τερματισμός του επαναλαμβανόμενου μενού.
Σε όλες τις περιπτώσεις να γίνεται έλεγχος αν έχουμε φτάσει στα όρια της στοίβας και να εμφανίζεται ανάλογο μήνυμα.

Λύση
=====================================================================

ΠΡΟΓΡΑΜΜΑ STACK
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: A[10], TOP, BOTTOM, CHOICE, NUMBER, I
ΑΡΧΗ
  TOP <-- 0
  BOTTOM <-- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ '1. PUSH, 2. POP, 3. PRINT, 0. EXIT  -->'
    ΔΙΑΒΑΣΕ CHOICE
   
    ΕΠΙΛΕΞΕ CHOICE
      ΠΕΡΙΠΤΩΣΗ 1
        ΓΡΑΨΕ 'ΔΩΣΕ ΕΝΑΝ ΑΚΕΡΑΙΟ ΑΡΙΘΜΟ ΓΙΑ PUSH:'
        ΔΙΑΒΑΣΕ NUMBER
        TOP <-- TOP+1
        ΑΝ TOP>10 ΤΟΤΕ
          ΓΡΑΨΕ 'Η ΣΤΟΙΒΑ ΕΙΝΑΙ ΓΕΜΑΤΗ!!!'
          TOP <-- TOP-1
        ΑΛΛΙΩΣ
          A[TOP] <-- NUMBER
        ΤΕΛΟΣ_ΑΝ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 2
        ΑΝ TOP=BOTTOM ΤΟΤΕ
          ΓΡΑΨΕ 'Η ΣΤΟΙΒΑ ΕΙΝΑΙ ΑΔΕΙΑ!!!'
        ΑΛΛΙΩΣ
          ΓΡΑΨΕ 'ΤΟ ΣΤΟΙΧΕΙΟ ', A[TOP], ' ΣΤΗ ΘΕΣΗ ', TOP, ' ΕΞΑΧΘΗΚΕ!!!'
          TOP <-- TOP-1
        ΤΕΛΟΣ_ΑΝ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 3
        ΓΡΑΨΕ '-----------------------------------------------------------------'
          ΓΙΑ I ΑΠΟ TOP ΜΕΧΡΙ 1 ΜΕ ΒΗΜΑ -1 ΕΠΑΝΑΛΑΒΕ
            ΓΡΑΨΕ A
          ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
        ΓΡΑΨΕ '-----------------------------------------------------------------'

      ΠΕΡΙΠΤΩΣΗ 0
        ΓΡΑΨΕ 'ΕΞΟΔΟΣ!!!'

      ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
        ΓΡΑΨΕ 'ΛΑΘΟΣ ΕΠΙΛΟΓΗ!!!       
    ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ CHOICE=0
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
 

dski

Σωστή και καλογραμμένη λύση. Δύο μόνο μικρές παρατηρήσεις:

1.Η μεταβλητή BOTTOM δε χρειάζεται (δεν αλλάζει ποτέ τιμή). Ο έλεγχος για άδεια στοίβα μπορεί να γίνει με τη συνθήκη TOP=0

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