1176 – FListă Ștergere
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>