1176 – FListă Ștergere: Diferență între versiuni
De la Universitas 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...) |
Fără descriere a modificării |
||
Linia 14: | Linia 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 | ||
Linia 26: | Linia 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 | ||
Versiunea de la data 2 iunie 2024 18:22
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()