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