Μάθημα : Προγραμματισμός Η/Υ

Κωδικός : T522234

T522234 - ΔΗΜΗΤΡΙΟΣ ΜΠΑΜΠΑΣ

Ενότητες μαθήματος

Στοίβα

Στοίβα είναι μια λίστα στην οποία οι εισαγωγές και οι διαγραφές  στοιχείων γίνονται από το ένα άκρο μόνο.
Σ’ αυτή το στοιχείο που προστέθηκε τελευταίο είναι και το πρώτο
που θα
εξαχθεί, έχουμε δηλαδή μια λειτουργία τύπου LIFO (Last In First Out), δηλαδή ο τελευταίος που εισέρχεται στη λίστα, είναι και ο πρώτος που θα εξαχθεί.
Οι λειτουργίες εισαγωγής και εξαγωγής είναι γνωστές ως ώθηση και απώθηση.
οι βασικές λειτουργίες που πρέπει να υποστηρίζει η υλοποίηση μιας στοίβας είναι:
Δημιουργία μιας κενής στοίβας.
Έλεγχος, αν η στοίβα είναι κενή.
Ώθηση ενός στοιχείου στη στοίβα.
Απώθηση ενός στοιχείου από τη στοίβα

Υλοποίηση Στοίβας σε Python

1 ος τρόπος
 2 ος τρόπος
def push(stoiva, stoixeio) :
         stoiva.append( stoixeio )
def pop(stoiva) :
        return stoiva.pop( )
def isEmpty(stoiva) :
          return len(stoiva) == 0
def createstoiva( ) :
         return [ ]
def push(stoiva, stoixeio) :
        stoiva.insert(0, stoixeio)
def pop(stoiva) :
         return stoiva.pop( 0 )
def isEmpty(stoiva) :
         return len(stoiva) == 0
def createstoiva( ) :
         return []


Στον 1ο τρόπο η ώθηση και απώθηση γίνεται στο τέλος της λίστας-στοίβας.
Στον 2ο τρόπο η ώθηση και απώθηση γίνεται στην αρχή της λίστας-στοίβας.

Παράδειγμα

#οι λειτουργίες της στοίβας
def push(stoiva, stoixeio) :
          stoiva.append( stoixeio )
def pop(stoiva) :
          return stoiva.pop( )
def isEmpty(stoiva) :
          return len(stoiva) == 0
def createstoiva( ) :
          return [ ]
parathyro=createstoiva()# =[] δημιουργία κενής στοίβας
parathyro=['https://www.in.gr/',
'https://www.in.gr/2022/04/04/greece/patra-roula-pispirigkou-allakse-tin-taytotita-tis-ligo-prin-pethanei-tzortzina/',
'https://www.google.com/',
'https://www.google.com/search?q=ertfilx',
'https://www.ertflix.gr/'] # η στοίβα παίρνει τιμές
for i in parathyro: #εμφάνιση της στοίβας
                 print i
print 'Εισαγωγή'
push (parathyro, raw_input('ti vlepeis ;')) #ώθηση, εισαγωγή στοιχείου
for i in parathyro:
                 print i
pop (parathyro) #απώθηση, εξαγωγή στοιχείου
print 'Εξαγωγή'
for i in parathyro:
                 print i
for i in range(len(parathyro)):
                 pop (parathyro) #απώθηση, εξαγωγή στοιχείου
print 'einai adeia ?', isEmpty(parathyro) #έλεγχος στοίβας
for i in parathyro:
                 print i

Δραστηριότητα 3
Να γράψετε ένα πρόγραμμα το οποίο θα διαβάζει μία λέξη και θα την εμφανίζει αντεστραμμένη, με τη χρήση μιας στοίβας

def push(stoiva, stoixeio) :
              stoiva.insert(0, stoixeio)
def pop(stoiva) :
              return stoiva.pop( 0 )
def isEmpty(stoiva) :
             return len(stoiva) == 0
def createstoiva( ) :
             return []
#κυρίως πρόγραμμα
stoiv=createstoiva()
lexi=raw_input('dose lexi ')
i=0
while i<len(lexi):
            push(stoiv, lexi[i])
            i+=1
print stoiv
new_lexi=''
while not isEmpty(stoiv):
           new_lexi+=pop(stoiv)
print new_lexi

Παραδειγμα Στοίβας
(γεμίζει και αδειάζει με 20 τυχαίους 5ψηφιους κωδικούς)

import random
#οι λειτουργίες της στοίβας
def push(stoiva, stoixeio) :
       stoiva.append( stoixeio )
def pop(stoiva) :
       return stoiva.pop( )
def isEmpty(stoiva) :
       return len(stoiva) == 0
def createstoiva( ) :
        return [ ]
#δημιουργια στοιβας
tyxaioi=createstoiva( )
print ' ΚΑΤΑΣΤΑΣΗ ΣΤΟΙΒΑΣ ΚΕΝΗ ', isEmpty(tyxaioi)
# στοίβα γεμίζει με 20 τυχαίους 5ψηφιους κωδικούς
for i in range(20):
         kodikos=str(random.randint(10000, 99999))
         print 'μπαινει στη λιστα ο κωδικός ',kodikos ,'στη θεση ',i
          push(tyxaioi,kodikos)

print ' ΚΑΤΑΣΤΑΣΗ ΣΤΟΙΒΑΣ ΚΕΝΗ ', isEmpty(tyxaioi)
print 'H ΣΤΟΙΒΑ ΑΔΕΙΑΖΕΙ'


# η στοιβα αδειάζει
for i in range(19,-1,-1):
        kodikos=pop(tyxaioi)
        print 'εφυγε από τη λιστα ο κωδικός ',kodikos ,'από τη θεση ',i
print ' ΚΑΤΑΣΤΑΣΗ ΣΤΟΙΒΑΣ ΚΕΝΗ ', isEmpty(tyxaioi)