1176 – FListă Ștergere: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Să se implementeze o listă simplu înlănțuită care permite efectuarea operațiilor de inserare și ștergere a unui element specificat. Operațiile trebuie să fie implementate utilizând structuri de date dinamice în Python. == Date de intrare == Programul citește de la tastatură: Un număr întreg n reprezentând numărul de operațiuni. O listă de n operațiuni, fiecare operațiune fiind de forma "INSERT X" (unde X este un număr întreg) sau "DELE...
 
No edit summary
Line 14: Line 14:
== Exemplu 1 ==
== Exemplu 1 ==
;Intrare
;Intrare
5
5<br>
INSERT 3
INSERT 3<br>
INSERT 5
INSERT 5<br>
DELETE 3
DELETE 3<br>
INSERT 10
INSERT 10<br>
INSERT 7
INSERT 7


Line 26: Line 26:
== Exemplu 2 ==
== Exemplu 2 ==
;Intrare
;Intrare
4
4<br>
INSERT 1
INSERT 1<br>
INSERT 2
INSERT 2<br>
DELETE 2
DELETE 2<br>
DELETE 1
DELETE 1



Revision as of 18:22, 2 June 2024

Cerința

Să se implementeze o listă simplu înlănțuită care permite efectuarea operațiilor de inserare și ștergere a unui element specificat. Operațiile trebuie să fie implementate utilizând structuri de date dinamice în Python.

Date de intrare

Programul citește de la tastatură:

Un număr întreg n reprezentând numărul de operațiuni. O listă de n operațiuni, fiecare operațiune fiind de forma "INSERT X" (unde X este un număr întreg) sau "DELETE X" (unde X este un număr întreg).

Date de ieșire

Pe ecran se va afișa lista rezultată după efectuarea tuturor operațiunilor.

Restricții și precizări

  • 1 ⩽ n ⩽ 100
  • 'x' este întotdeauna un număr intreg.

Exemplu 1

Intrare

5
INSERT 3
INSERT 5
DELETE 3
INSERT 10
INSERT 7

Iesire

[5, 10, 7]

Exemplu 2

Intrare

4
INSERT 1
INSERT 2
DELETE 2
DELETE 1

Iesire

[]

Rezolvare

<syntaxhighlight lang="python" line> class Nod:

   def __init__(self, data=None):
       self.data = data
       self.next = None

class ListaSimpluInlantuita:

   def __init__(self):
       self.head = None
   def insert(self, data):
       new_node = Nod(data)
       new_node.next = self.head
       self.head = new_node
   def delete(self, data):
       temp = self.head
       if temp is not None:
           if temp.data == data:
               self.head = temp.next
               temp = None
               return
       while temp is not None:
           if temp.data == data:
               break
           prev = temp
           temp = temp.next
       if temp == None:
           return
       prev.next = temp.next
       temp = None
   def afiseaza_lista(self):
       result = []
       temp = self.head
       while temp:
           result.append(temp.data)
           temp = temp.next
       return result

def citeste_date():

   try:
       n = int(input("Introduceți numărul de operațiuni (n): "))
       operatiuni = []
       for _ in range(n):
           operatiune = input().strip()
           operatiuni.append(operatiune)
       return n, operatiuni
   except ValueError:
       return None, None

def valideaza_date(n, operatiuni):

   if not (1 <= n <= 100):
       return False
   for operatiune in operatiuni:
       if not (operatiune.startswith("INSERT ") or operatiune.startswith("DELETE ")):
           return False
       if operatiune.startswith("INSERT ") and len(operatiune.split()) != 2:
           return False
       if operatiune.startswith("DELETE ") and len(operatiune.split()) != 2:
           return False
       if not operatiune.split()[1].isdigit() and (operatiune.split()[1][0] != '-' or not operatiune.split()[1][1:].isdigit()):
           return False
   return True

def proceseaza_operatiuni(n, operatiuni):

   lista = ListaSimpluInlantuita()
   for operatiune in operatiuni:
       if operatiune.startswith("INSERT "):
           _, val = operatiune.split()
           lista.insert(int(val))
       elif operatiune.startswith("DELETE "):
           _, val = operatiune.split()
           lista.delete(int(val))
   return lista.afiseaza_lista()

def main():

   n, operatiuni = citeste_date()
   
   if n is None or operatiuni is None or not valideaza_date(n, operatiuni):
       print("Datele de intrare nu corespund restricțiilor impuse.")
       return
   
   print("Datele de intrare corespund restricțiilor impuse.")
   rezultat = proceseaza_operatiuni(n, operatiuni)
   print(rezultat)

if __name__ == "__main__":

   main()

</syntaxhighlight>