1176 – FListă Ștergere: Difference between revisions
Benzar Ioan (talk | contribs) 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... |
Benzar Ioan (talk | contribs) 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>