1476 – Fsortare

From Bitnami MediaWiki
Revision as of 13:10, 13 May 2024 by Cristina94 (talk | contribs) (Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos: struct nod{ int info; nod *urm; }; în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei. ==Cerința== Să se scrie o funcție C++ cu următorul prototip: void sortareCrescator(nod *&prim) care sortează crescător elementele listei al cărei prim elemen...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunţ[edit | edit source]

Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:

   struct nod{
     int info;
     nod *urm;
   };

în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.

Cerința[edit | edit source]

Să se scrie o funcție C++ cu următorul prototip:

 void sortareCrescator(nod *&prim)

care sortează crescător elementele listei al cărei prim element are adresa memorată în prim.

Restricții și precizări[edit | edit source]

  • numele funcției va fi sortareCrescator
  • lista va conține cel puțin 3 elemente
  • rezolvarea se va face in python

Exemplu[edit | edit source]

Dacă lista este formată din valorile (5, 3, 9, 4, 2, 12), după apelul funcţiei ea va conţine elementele (2, 3, 4, 5, 9, 12).

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 1476 FSortare

class Node:

   def __init__(self, info):
       self.info = info
       self.next = None

def create_linked_list(values):

   head = None
   tail = None
   for value in values:
       new_node = Node(value)
       if head is None:
           head = new_node
           tail = new_node
       else:
           tail.next = new_node
           tail = new_node
   return head

def sortareCrescator(prim):

   # Funcție pentru inserarea unui nod într-o listă sortată
   def insert_sorted(head, new_node):
       if head is None or head.info >= new_node.info:
           new_node.next = head
           return new_node
       current = head
       while current.next is not None and current.next.info < new_node.info:
           current = current.next
       
       new_node.next = current.next
       current.next = new_node
       return head
   
   # Inițializăm lista sortată ca fiind lista vidă
   sorted_list = None
   current = prim
   
   # Parcurgem lista inițială și inserăm fiecare nod în lista sortată
   while current is not None:
       sorted_list = insert_sorted(sorted_list, Node(current.info))
       current = current.next
   
   # Copiem lista sortată înapoi în lista inițială
   current = prim
   sorted_current = sorted_list
   while sorted_current is not None:
       current.info = sorted_current.info
       current = current.next
       sorted_current = sorted_current.next
  1. Funcție pentru citirea datelor de intrare de la tastatură

def read_input():

   values = input("Introduceți valorile separate prin virgulă: ").split(',')
   return [int(value) for value in values if value.strip()]  # eliminăm spațiile și convertim în int
  1. Testăm funcția

def print_list(head):

   current = head
   while current is not None:
       print(current.info, end=" ")
       current = current.next
   print()
  1. Citim datele de intrare de la tastatură

values = read_input()

  1. Cream lista liniară simplu înlănțuită folosind funcția create_linked_list

l = create_linked_list(values)

print("Lista inițială:") print_list(l)

  1. Sortăm lista

sortareCrescator(l)

print("Lista sortată:") print_list(l)

</syntaxhighlight>