|
|
(One intermediate revision by the same user not shown) |
Line 1: |
Line 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>
| |