ΠΡΟΓΡΑΜΜΑ Μία_στατική_λίστα_με_συμπεριφορά_στοίβας
ΣΤΑΘΕΡΕΣ
  null = 0
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: C[10], PREVIOUS, X
  ΑΚΕΡΑΙΕΣ: MEMORY[10], HEAD, i, NEXT, ans
  ΛΟΓΙΚΕΣ: FOUND
ΑΡΧΗ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10                                     ! αρχικοποίηση μνήμης
    MEMORY[i] <- -1
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  HEAD <- null                                             ! αρχικοποίηση λίστας
  i <- 0
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ
    ΓΡΑΨΕ "1. ώθηση στη λίστα"
    ΓΡΑΨΕ "2. απώθηση από τη λίστα"
    ΓΡΑΨΕ "3. εκτύπωση λίστας"
    ΓΡΑΨΕ "4. έξοδος"
    ΔΙΑΒΑΣΕ ans
    ΕΠΙΛΕΞΕ ans

      ΠΕΡΙΠΤΩΣΗ 1
        ΑΝ i = 10 ΤΟΤΕ
          ΓΡΑΨΕ "μνήμη γεμάτη"
        ΑΛΛΙΩΣ
    ! διαβάζει επαναληπτικά μέχρι να να δωθεί μηδέν ή να γεμίσει η στατική μνήμη
          ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
            ΓΡΑΨΕ "τιμή για εισαγωγή:"
            ΔΙΑΒΑΣΕ X
            ΑΝ X <> "0" ΤΟΤΕ
              ΚΑΛΕΣΕ PUSH(C, MEMORY, HEAD, X) 
              i <- i + 1
            ΤΕΛΟΣ_ΑΝ
          ΜΕΧΡΙΣ_ΟΤΟΥ X = "0" Η i = 10
        ΤΕΛΟΣ_ΑΝ

      ΠΕΡΙΠΤΩΣΗ 2
        ΑΝ HEAD <> null ΤΟΤΕ
          ΚΑΛΕΣΕ POP(C, MEMORY, HEAD, X) 
          ΓΡΑΨΕ "Έγινε διαγραφή του:", X
          i <- i - 1
        ΑΛΛΙΩΣ
          ΓΡΑΨΕ "Η λίστα είναι κενή"
        ΤΕΛΟΣ_ΑΝ

      ΠΕΡΙΠΤΩΣΗ 3
        ΚΑΛΕΣΕ PRINT_LIST(C, MEMORY, HEAD) 

      ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
        ΓΡΑΨΕ "μη αποδεκτή επιλογή"
    ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ

  ΜΕΧΡΙΣ_ΟΤΟΥ ans = 4

  ΓΡΑΨΕ "--- Τέλος λειτουργίας ---"
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

ΔΙΑΔΙΚΑΣΙΑ PRINT_LIST(C, A, HEAD) 
ΣΤΑΘΕΡΕΣ
  null = 0
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: C[10], PREVIOUS
  ΑΚΕΡΑΙΕΣ: A[10], HEAD, NEXT, I
ΑΡΧΗ
  ΓΡΑΨΕ "--- εκτύπωση περιεχομένων λίστας ---"
  ΓΡΑΨΕ "HEAD-> "
  NEXT <- HEAD
  ΟΣΟ NEXT <> null ΕΠΑΝΑΛΑΒΕ
    I <- NEXT
    ΓΡΑΨΕ "|", C[I], "|-> "
    NEXT <- A[I] 
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ "NULL"
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 

ΔΙΑΔΙΚΑΣΙΑ PUSH(C, mem, HEAD, X) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: C[10], X
  ΑΚΕΡΑΙΕΣ: mem[10], HEAD, number, Seed
ΑΡΧΗ
! αρχικοποίηση γεννήτριας τυχαίων αριθμών
  Seed <- 55                          ! συνήθως στο κυρίως ως καθολική μεταβλητή
                     ! ή δηλωνεται στο κυρίως και περνάει ως παράμετρος στο PUSH
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΚΑΛΕΣΕ random(Seed, 1, 10, number) 
! πάρε τυχαία μια ελεύθερη θέση στον πίνακα της μνήμης
  ΜΕΧΡΙΣ_ΟΤΟΥ mem[number] = -1
  C[number] <- X
  mem[number] <- HEAD
  HEAD <- number
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ POP(C, A, HEAD, X) 
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: C[10], X
  ΑΚΕΡΑΙΕΣ: A[10], HEAD, number, Seed
ΑΡΧΗ
  number <- HEAD
  X <- C[number] 
  HEAD <- A[number] 
  A[number] <- -1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

ΔΙΑΔΙΚΑΣΙΑ random(Seed, Min, Max, Number) 
ΣΤΑΘΕΡΕΣ
  A = 314159269
  C = 453806245
  M = 2147483647
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Seed, Min, Max, Number
ΑΡΧΗ
  Seed <- A*Seed + C
  Seed <- Seed mod M
  Number <- Min + Α_Μ((Max + 1 - Min)*Seed/M) 
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 
!ArxeioEisodou
1
Αθήνα
Λαμία
Βόλος
Λάρισα
Κατερίνη
Θεσσαλονίκη
Σέρρες
0