Αποστολέας Θέμα: ΣΤΟΙΒΑ και ΟΥΡΑ με πραγματικούς ΚΟΜΒΟΥΣ  (Αναγνώστηκε 127 φορές)

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 367
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
ΣΤΟΙΒΑ και ΟΥΡΑ με πραγματικούς ΚΟΜΒΟΥΣ
« στις: 12 Ιούν 2019, 03:49:24 μμ »
Το πρόγραμμα που παρουσιάζω δείχνει πως μπορούμε με τη ΓΛΩΣΣΑ να φτιάξουμε πραγματικούς κόμβους για Ουρές και Στοίβες. Για το σκοπό αυτό έχουμε διαδικασίες που βοηθούν όπως:

Διαδικασία ΝΕΟ για να μας δώσει το νούμερο (δείκτη) ενός νέου κόμβου. Οι νέοι κόμβοι δίνονται από μια στοίβα με δείκτη το ελεύθερο. Αν αυτός ο δείκτης έχει τιμή μηδέν τότε δεν υπάρχει ελεύθερος κόμβος και δεν καλούμε τη διαδικασία (το ελέγχουμε πριν καλέσουμε τη ΝΕΟ).

Διαδικασία Ελεύθερη_Μνήμη. Μας επιστρέφει τον αριθμό των ελεύθερων κόμβων διατρέχοντας και μετρώντας ταυτόχρονα τους ελεύθερους κόμβους από το κόμβο που δείχνει η μεταβλητή Ελεύθερο.

Διαδικασία Δείξε. Ξεκινάει από ένα κόμβο, βάζοντας την τιμή του δείκτη σε μια βοηθητική μεταβλητή (για να μην πειράξουμε το δείκτη), και διατρέχουμε όλους τους κόμβους όσο η βοηθητική δεν είναι μηδέν.

Διαδικασία Χρήση. Εδώ διαβάζουμε ένα κόμβο και τον ελευθερώνουμε, δηλαδή τον επιστρέφουμε στην ελεύθερη μνήμη.

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

Παράθεση
Δημιουργία στοίβας 20 στοιχείων
Ώθηση 100
Ώθηση 101
Ώθηση 102
Ώθηση 103
Ώθηση 104
Ώθηση 105
Ώθηση 106
Ώθηση 107
Ώθηση 108
Ώθηση 109
Ώθηση 110
Ώθηση 111
Ώθηση 112
Ώθηση 113
Ώθηση 114
Ώθηση 115
Ώθηση 116
Ώθηση 117
Ώθηση 118
Ώθηση 119
Ελεύθερη Μνήμη 80 κόμβων
Δημιουργία ουράς 20 στοιχείων
Εισαγωγή 120
Εισαγωγή 121
Εισαγωγή 122
Εισαγωγή 123
Εισαγωγή 124
Εισαγωγή 125
Εισαγωγή 126
Εισαγωγή 127
Εισαγωγή 128
Εισαγωγή 129
Εισαγωγή 130
Εισαγωγή 131
Εισαγωγή 132
Εισαγωγή 133
Εισαγωγή 134
Εισαγωγή 135
Εισαγωγή 136
Εισαγωγή 137
Εισαγωγή 138
Εισαγωγή 139
Ελεύθερη Μνήμη 60 κόμβων
Διάβασμα Στοιβας χωρίς να πετάξουμε τα στοιχεία
119
118
117
116
115
114
113
112
111
110
109
108
107
106
105
104
103
102
101
100
Διαβασμα Ουράς χωρίς να πετάξουμε τα στοιχεία
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
Απώθηση 5 πρώτων από την στοίβα
119
118
117
116
115
Εξαγωγή 5 πρώτων από την Ουρά
120
121
122
123
124
Ελεύθερη Μνήμη 70 κόμβων
Ελεύθερη Μνήμη 85 κόμβων
Ελεύθερη Μνήμη 100 κόμβων


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

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



ΠΡΟΓΡΑΜΜΑ κομβοι
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: κομ[100], τιμ[100], ελεύθερο, μπροστά, πίσω, κορυφή
  ΑΚΕΡΑΙΕΣ: ι, βοηθητική
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 99
    κομ[ι] <- ι + 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  κομ[100] <- 0
!δείκτης ελεύθερων
  ελεύθερο <- 1
  ΓΡΑΨΕ "Δημιουργία στοίβας 20 στοιχείων"
  κορυφή <- 0
  ΓΙΑ ι ΑΠΟ 100 ΜΕΧΡΙ 119
    ΑΝ ελεύθερο <> 0 ΤΟΤΕ
      βοηθητική <- κορυφή
      ΚΑΛΕΣΕ Νεο(κορυφή, ελεύθερο, κομ)
      κομ[κορυφή] <- βοηθητική
      ΓΡΑΨΕ "Ώθηση ", ι
      τιμ[κορυφή] <- ι
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Υπολογισμός Ελεύθερων Κόμβων
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
  ΓΡΑΨΕ "Δημιουργία ουράς 20 στοιχείων"
  πίσω <- ελεύθερο
  μπροστά <- 0
  ΓΙΑ ι ΑΠΟ 120 ΜΕΧΡΙ 139
    ΑΝ ελεύθερο <> 0 ΤΟΤΕ
      βοηθητική <- μπροστά
      ΚΑΛΕΣΕ Νεο(μπροστά, ελεύθερο, κομ)
      τιμ[μπροστά] <- ι
      ΓΡΑΨΕ "Εισαγωγή ", ι
      ΑΝ βοηθητική <> 0 ΤΟΤΕ
        κομ[βοηθητική] <- μπροστά
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Υπολογισμός Ελεύθερων Κόμβων
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
  ΓΡΑΨΕ "Διάβασμα Στοιβας χωρίς να πετάξουμε τα στοιχεία"
! εμφανίζετι από 119 έως 100 δηλαδή το τελευταίο που μπήκε βγαίνει πρώτο
  ΚΑΛΕΣΕ Δείξε(κορυφή, κομ, τιμ)
  ΓΡΑΨΕ "Διαβασμα Ουράς χωρίς να πετάξουμε τα στοιχεία"
! εμφανίζει από 120 έως 139 δηλαδή το πρώτο που μπήκε βγαίνει πρώτο
  ΚΑΛΕΣΕ Δείξε(πίσω, κομ, τιμ)
! Θα χρησιμοποιήσουμε τα 5 πρώτα από την στοίβα (θα τα πετάξουμε)
  ΓΡΑΨΕ "Απώθηση 5 πρώτων από την στοίβα"
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
    ΑΝ κορυφή <> 0 ΤΟΤΕ
      ΚΑΛΕΣΕ Χρήση(βοηθητική, κορυφή, ελεύθερο, κομ, τιμ)
      ΓΡΑΨΕ βοηθητική
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! θα χρησιμοποιήσουμε τα 5 πρώτα από την ουρά (θα τα πετάξουμε)
  ΓΡΑΨΕ "Εξαγωγή 5 πρώτων από την Ουρά"
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 5
    ΑΝ πίσω <> 0 ΤΟΤΕ
      ΚΑΛΕΣΕ Χρήση(βοηθητική, πίσω, ελεύθερο, κομ, τιμ)
      ΓΡΑΨΕ βοηθητική
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Υπολογισμός Ελεύθερων Κόμβων
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
! Άδειασμα Στοίβας
  ΟΣΟ κορυφή <> 0 ΕΠΑΝΑΛΑΒΕ
    ΚΑΛΕΣΕ Χρήση(βοηθητική, κορυφή, ελεύθερο, κομ, τιμ)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Υπολογισμός Ελεύθερων Κόμβων
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
! Άδειασμα Ουράς
  ΟΣΟ πίσω <> 0 ΕΠΑΝΑΛΑΒΕ
    ΚΑΛΕΣΕ Χρήση(βοηθητική, πίσω, ελεύθερο, κομ, τιμ)
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Υπολογισμός Ελεύθερων Κόμβων
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
ΔΙΑΔΙΚΑΣΙΑ Δείξε(πρώτο, μνημη, περιεχόμενο)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πρώτο, βοηθητική, μνημη[100], περιεχόμενο[100]
ΑΡΧΗ
  βοηθητική <- πρώτο
  ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ περιεχόμενο[βοηθητική]
    βοηθητική <- μνημη[βοηθητική]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Χρήση(επιστροφή, πρώτο, ελεύθ, μνημη, περιεχόμενο)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: επιστροφή, πρώτο, μνημη[100], περιεχόμενο[100]
  ΑΚΕΡΑΙΕΣ: βοηθητική, ελεύθ
ΑΡΧΗ
  ΑΝ πρώτο <> 0 ΤΟΤΕ
    επιστροφή <- περιεχόμενο[πρώτο]
    βοηθητική <- πρώτο
    πρώτο <- μνημη[πρώτο]
    μνημη[βοηθητική] <- ελεύθ
      ! επιστροφή του ελεύθερου κόμβου στη στοίβα των ελεύθερων.
    ελεύθ <- βοηθητική
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Νεο(επιστροφή, ελ, μνήμη)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: επιστροφή, ελ, μνήμη[100]
ΑΡΧΗ
  επιστροφή <- ελ
  ελ <- μνήμη[ελ]
  μνήμη[επιστροφή] <- 0
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Ελεύθερη_Μνήμη(ελ, μνήμη)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: βοηθητική, ελ, μνήμη[100], ι
ΑΡΧΗ
  βοηθητική <- ελ
  ι <- 0
  ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
    ι <- ι + 1
    βοηθητική <- μνήμη[βοηθητική]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Ελεύθερη Μνήμη ", ι, " κόμβων"
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ



bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 367
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Απ: ΣΤΟΙΒΑ και ΟΥΡΑ με πραγματικούς ΚΟΜΒΟΥΣ
« Απάντηση #1 στις: 12 Ιούν 2019, 05:53:35 μμ »
Είχα δώσει τον αλγόριθμο Dijkstra με χρήση πίνακα, ΚορυφέςΧΑκμές. Έτσι κάθε κορυφή είχε το μέγιστο των ακμών που θα βάζαμε στο γράφο.
Τώρα με τη χρήση της παραπάνω δομής μπορούμε να αλλάξουμε το πρόγραμμα και να έχουμε δυναμική χρήση κόμβων. Για κάθε ακμή θέλουμε δυο κόμβους, ο ένας έχει το νούμερο της κορυφής ως προορισμός και ο άλλος έχει το κόστος. Για κάθε κορυφή χρησιμοποιούμε μια στοίβα και βάζουμε ανάποδα τα στοιχεία, για να τα διαβάζουμε με την ορθή φορά! Δεν μας ενδιαφέρει το pop (απώθηση) της στοίβας. Μας ενδιαφέρει να διατρέχουμε τη στοίβα, και να διαβάζουμε δυο κόμβους κάθε φορά.
Έχω αφήσει με λατινικούς χαρακτήρες τις μεταβλητές που χρησιμοποιούνταν στο αρχικό πρόγραμμα. Ο πίνακας Edges[] δεν υπάρχει πια, και αντί αυτού χρησιμοποιούμε το cost το οποίο το τροφοδοτούμε από τη δυναμική δομή.

Αυτό το πρόγραμμα αποδεικνύει ότι με τη ΓΛΩΣΣΑ μπορούμε να φτιάξουμε δυναμικές δομές, όπως γράφους.

Ελεύθερη Μνήμη 82 κόμβων
a->b 7
a->c 9
a->f 14
b->c 10
b->d 15
c->d 11
c->f 2
d->e 6
e->f 9
Υπολογισμός βαρών
a 0
b 7
c 9
d 20
e 26
f 11
Διαδρομή από a μέχρι e:acde
Ελεύθερη Μνήμη 100 κόμβων



Κώδικας: [Επιλογή]
ΠΡΟΓΡΑΜΜΑ Dijkstra_algorithm_2
ΣΤΑΘΕΡΕΣ
  max_number = 1000000
  start = 1
  end = 5
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: κομ[100], τιμ[100], ελεύθερο, μπροστά, πίσω, κορυφή
  ΑΚΕΡΑΙΕΣ: ι, βοηθητική, ΛίσταΑκμών[6], κ
  ΧΑΡΑΚΤΗΡΕΣ: κορυφές[6]
  ΑΚΕΡΑΙΕΣ: d[6], p[6], s[6], i, k, s_heap, u, min_s_val, cost
ΑΡΧΗ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 99
    κομ[ι] <- ι + 1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  κομ[100] <- 0
!δείκτης ελεύθερων
  ελεύθερο <- 1
! μέχρι εδώ έχουμε κατασκευάσει τους ελεύθερους κόμβους
  κορυφές[1] <- 'a'
  κορυφές[2] <- 'b'
  κορυφές[3] <- 'c'
  κορυφές[4] <- 'd'
  κορυφές[5] <- 'e'
  κορυφές[6] <- 'f'
  ΛίσταΑκμών[1] <- 0
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[1], 6, 14, ελεύθερο, κομ, τιμ)
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[1], 3, 9, ελεύθερο, κομ, τιμ)
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[1], 2, 7, ελεύθερο, κομ, τιμ)
  ΛίσταΑκμών[2] <- 0
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[2], 4, 15, ελεύθερο, κομ, τιμ)
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[2], 3, 10, ελεύθερο, κομ, τιμ)
  ΛίσταΑκμών[3] <- 0
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[3], 6, 2, ελεύθερο, κομ, τιμ)
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[3], 4, 11, ελεύθερο, κομ, τιμ)
  ΛίσταΑκμών[4] <- 0
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[4], 5, 6, ελεύθερο, κομ, τιμ)
  ΛίσταΑκμών[5] <- 0
  ΚΑΛΕΣΕ Βάλε_Ακμή(ΛίσταΑκμών[5], 6, 9, ελεύθερο, κομ, τιμ)
  ΛίσταΑκμών[6] <- 0
! έχουμε 18 κόμβους, επειδή ένας γράφει το νούμερο της κορυφής και το άλλο το κόστος.
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
! Εμφάνιση των ακμών και του κόστους
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 6
    βοηθητική <- ΛίσταΑκμών[ι]
!    ΚΑΛΕΣΕ Δείξε(βοηθητική, κομ, τιμ)
    ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
      κ <- τιμ[βοηθητική]
      βοηθητική <- κομ[βοηθητική]
      ΓΡΑΨΕ κορυφές[ι], "->", κορυφές[κ], " ", τιμ[βοηθητική]
      βοηθητική <- κομ[βοηθητική]
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
! Αλγόριθμος Dijkstra                                                               !
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6
    d[i] <- max_number
    p[i] <- -1
    s[i] <- i
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  s_heap <- 6
  d[start] <- 0
  ΟΣΟ s_heap > 0 ΕΠΑΝΑΛΑΒΕ             ! ΒΡΕΣ ΤΟ ΜΙΚΡΟΤΕΡΟ ΒΑΡΟΣ
    min_s_val <- max_number
    ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6
      ΑΝ s[i] > 0 ΤΟΤΕ
        ΑΝ min_s_val >= d[i] ΤΟΤΕ
          min_s_val <- d[i]
          u <- i
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    s[u] <- 0
    s_heap <- s_heap - 1
    βοηθητική <- ΛίσταΑκμών[u]
    ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
      k <- τιμ[βοηθητική]
      βοηθητική <- κομ[βοηθητική]
      cost <- τιμ[βοηθητική]
      βοηθητική <- κομ[βοηθητική]
      ΑΝ d[k] > cost + d[u] ΤΟΤΕ
        d[k] <- cost + d[u]
        p[k] <- u
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Υπολογισμός βαρών"
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 6
    ΓΡΑΨΕ κορυφές[i], " ", d[i]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  i <- end
  ΓΡΑΨΕ "Διαδρομή από ", κορυφές[start], " μέχρι ", κορυφές[end], ": "
  ΑΝ d[i] = max_number ΤΟΤΕ
    ΓΡΑΨΕ "Δεν υπάρχει"
  ΑΛΛΙΩΣ
    k <- 6
    ΟΣΟ i > 0 ΕΠΑΝΑΛΑΒΕ
      s[k] <- i
      i <- p[i]
      k <- k - 1
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΙΑ k ΑΠΟ k + 1 ΜΕΧΡΙ 6
      ΓΡΑΨΕ κορυφές[s[k]], " "
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΑΝ
  ΓΡΑΨΕ
! ΑΔΕΙΑΣΜΑ ΚΟΜΒΩΝ
  ΓΙΑ ι ΑΠΟ 1 ΜΕΧΡΙ 6
    ΟΣΟ ΛίσταΑκμών[ι] <> 0 ΕΠΑΝΑΛΑΒΕ
      ΚΑΛΕΣΕ Χρήση(βοηθητική, ΛίσταΑκμών[ι], ελεύθερο, κομ, τιμ)
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΚΑΛΕΣΕ Ελεύθερη_Μνήμη(ελεύθερο, κομ)
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ



ΔΙΑΔΙΚΑΣΙΑ Βάλε_Ακμή(πρώτο, σε_ακμή, κόστος, ελ, μνημη, περιεχόμενο)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πρώτο, βοηθητική, μνημη[100], περιεχόμενο[100]
  ΑΚΕΡΑΙΕΣ: σε_ακμή, κόστος, ελ
ΑΡΧΗ
  βοηθητική <- πρώτο
  ΚΑΛΕΣΕ Νεο(πρώτο, ελ, μνημη)
  μνημη[πρώτο] <- βοηθητική
  περιεχόμενο[πρώτο] <- κόστος
  βοηθητική <- πρώτο
  ΚΑΛΕΣΕ Νεο(πρώτο, ελ, μνημη)
  μνημη[πρώτο] <- βοηθητική
  περιεχόμενο[πρώτο] <- σε_ακμή

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Δείξε(πρώτο, μνημη, περιεχόμενο)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πρώτο, βοηθητική, μνημη[100], περιεχόμενο[100]
ΑΡΧΗ
  βοηθητική <- πρώτο
  ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
    ΓΡΑΨΕ περιεχόμενο[βοηθητική]
    βοηθητική <- μνημη[βοηθητική]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Χρήση(επιστροφή, πρώτο, ελεύθ, μνημη, περιεχόμενο)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: επιστροφή, πρώτο, μνημη[100], περιεχόμενο[100]
  ΑΚΕΡΑΙΕΣ: βοηθητική, ελεύθ
ΑΡΧΗ
  ΑΝ πρώτο <> 0 ΤΟΤΕ
    επιστροφή <- περιεχόμενο[πρώτο]
    βοηθητική <- πρώτο
    πρώτο <- μνημη[πρώτο]
    μνημη[βοηθητική] <- ελεύθ
      ! επιστροφή του ελεύθερου κόμβου στη στοίβα των ελεύθερων.
    ελεύθ <- βοηθητική
  ΤΕΛΟΣ_ΑΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Νεο(επιστροφή, ελ, μνήμη)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: επιστροφή, ελ, μνήμη[100]
ΑΡΧΗ
  επιστροφή <- ελ
  ελ <- μνήμη[ελ]
  μνήμη[επιστροφή] <- 0
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ
ΔΙΑΔΙΚΑΣΙΑ Ελεύθερη_Μνήμη(ελ, μνήμη)
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: βοηθητική, ελ, μνήμη[100], ι
ΑΡΧΗ
  βοηθητική <- ελ
  ι <- 0
  ΟΣΟ βοηθητική <> 0 ΕΠΑΝΑΛΑΒΕ
    ι <- ι + 1
    βοηθητική <- μνήμη[βοηθητική]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "Ελεύθερη Μνήμη ", ι, " κόμβων"
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ