0875 - Stiva

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.")