1176 – FListă Ștergere
De la Universitas MediaWiki
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
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()