0876 - Coada

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 coadă de numere întregi. Inițial coada este vidă. Programul va citi de la tastatură o listă de operații, care pot fi:

  • push X – adaugă valoarea întreagă X în coadă;
  • pop – elimină elementul din coadă;
  • front – afișează elementul de la începutul cozii.

Programul va realiza asupra cozii 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 numerele rezultat ale operațiilor front, câte unul pe o linie.

Restricții și precizări

  • coada nu va conține la un moment dat mai mult de 1000 elemente
  • elementele cozii vor fi cuprinse între -1.000.000 și 1.000.000
  • dacă la un moment dat se aplică operația pop și coada nu conține niciun element, operația nu are efect
  • dacă la un moment dat se aplică operația front și coada nu conține niciun element, operația nu are efect (nu se afișează nimic)

Exemplul 1:

Intrare
12
push 5
push 4
front 
push 7 
push -5
pop
front
pop
front
push 11
front
pop
Ieșire
Datele de intrare corespund restrictiilor impuse.
5
4
7
7

Exemplul 2:

Intrare
0
Ieșire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare

# Definim clasa Queue
class Queue:
    def __init__(self):
        self.queue = []  # Initializam coada ca o lista goala

    # Metoda pentru adaugarea unui element in coada
    def push(self, x):
        if len(self.queue) < 1000 and -1000000 <= x <= 1000000:  # Verificam daca coada nu este plina si daca elementul este in intervalul specificat
            self.queue.append(x)  # Adaugam elementul la sfarsitul cozii

    # Metoda pentru eliminarea unui element din coada
    def pop(self):
        if self.queue:  # Verificam daca coada nu este goala
            self.queue.pop(0)  # Eliminam primul element din coada

    # Metoda pentru a obtine primul element din coada
    def front(self):
        if self.queue:  # Verificam daca coada nu este goala
            print(self.queue[0])  # Afisam primul element


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:
        # Cream o instanta a clasei Queue
        queue = Queue()

        # Citim numarul de operatii
        n = int(input("Introduceti numarul de operatii: "))

        if verificare_restrictii(n):  # verificam datele de intrare
            print("Datele de intrare corespund restrictiilor impuse.")
            # Executam operatiile
            for _ in range(n):
                operation = input("Introduceti operatia: ").split()  # Citim operatia
                if operation[0] == 'push':  # Daca operatia este 'push', adaugam elementul in coada
                    queue.push(int(operation[1]))
                elif operation[0] == 'pop':  # Daca operatia este 'pop', eliminam elementul din coada
                    queue.pop()
                elif operation[0] == 'front':  # Daca operatia este 'front', afisam primul element din coada
                    queue.front()
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator
    except ValueError:
        print("Datele de intrare nu corespund restrictiilor impuse.")
    except IndexError:
        print("Datele de intrare nu corespund restrictiilor impuse.")