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...)
 
(Ștergerea conținutului paginii)
Etichetă: Golire
 
(Nu s-a afișat o versiune intermediară efectuată de același utilizator)
Linia 1: Linia 1:
== 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>

Versiunea curentă din 2 iunie 2024 23:36