0875 - Stiva
De la Universitas MediaWiki
Cerința
Să se scrie un program care gestionează o stivă de numere întregi. Inițial stiva este vidă. Programul va citi de la tastatură o listă de operații, care pot fi:
- push X – adaugă valoarea întreagă X pe stivă;
- pop – elimină elementul din vârful stivei;
- top – afișează elementul din vârful stivei.
Programul va realiza asupra stivei operațiile citite, în ordine. Afișările se fac pe ecran, câte o valoare pe linie.
Date de intrare
Programul citește de la tastatură un număr n, apoi cele n operații,
Date de ieșire
Programul va afișa pe ecran numere rezultat ale operațiilor top, câte unul pe o linie.
Restricții și precizări
- stiva nu va conține la un moment dat mai mult de 1000 elemente
- elementele stivei vor fi cuprinse între -1.000.000 și 1.000.000
- dacă la un moment dat se aplică operația pop și stiva nu conține niciun element, operația nu are efect
- dacă la un moment dat se aplică operația top și stiva nu conține niciun element, operația nu are efect (nu se afișează nimic)
Exemplul 1:
- Intrare
12 push 5 push 4 top push 7 push -5 pop top pop top push 11 top pop
- Ieșire
Datele de intrare corespund restrictiilor impuse. 4 7 4 11
Exemplul 2:
- Intrare
100000
- Ieșire
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
class Stack:
def __init__(self):
self.stack = [] # Initializam stiva ca lista goala
def push(self, x):
if len(self.stack) < 1000 and -1000000 <= x <= 1000000: # Verificam daca stiva nu este plina si daca elementul este in intervalul specificat
self.stack.append(x) # Adaugam elementul la sfarsitul listei
def pop(self):
if len(self.stack) > 0: # Verificam daca stiva nu este goala
self.stack.pop() # Eliminam ultimul element din lista
def top(self):
if len(self.stack) > 0: # Verificam daca stiva nu este goala
print(self.stack[-1]) # Afisam ultimul element din lista
def verificare_restrictii(nr_n): # functia de verificare a datelor de intrare
if 1 <= nr_n <= 1000:
return True
else:
return False
if __name__ == '__main__':
try:
n = int(input("Introduceti numarul de operatii: ")) # Citim numarul de operatii
if verificare_restrictii(n): # verificam datele de intrare
print("Datele de intrare corespund restrictiilor impuse.")
s = Stack() # Cream o instanta a clasei Stack
for _ in range(n):
operation = input().split() # Citim operatia
if operation[0] == 'push': # Daca operatia este 'push'
s.push(int(operation[1])) # Adaugam numarul in stiva
elif operation[0] == 'pop': # Daca operatia este 'pop'
s.pop() # Eliminam numarul din stiva
elif operation[0] == 'top': # Daca operatia este 'top'
s.top() # Afisam numarul din varful stivei
else:
print("Datele de intrare nu corespund restrictiilor impuse.")
except ValueError:
print("Datele de intrare nu corespund restrictiilor impuse.")