0876 - Coada

De la Universitas MediaWiki

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