1182 – FListă Interclasare3

From Bitnami MediaWiki
Revision as of 05:13, 29 March 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 natural, 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 inserare(nod * & p); care inserează înaintea fiecărui element par al unei liste pentru...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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 natural, 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 inserare(nod * & p);

care inserează înaintea fiecărui element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.

Restricții și precizări

  • lista va conține cel puțin un element
  • la ieșirea din apel p va conține adresa primului element al listei
  • rezolvarea se va face în python

Important

Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Rezolvare

<syntaxhighlight lang="python" line>

  1. 1182 FListaInserare3

class Node:

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

def inserare(p):

 prev = None
 current = p
 while current is not None:
   if current.info % 2 == 0:
     new_node = Node(current.info * 2)
     new_node.next = current
     if prev is not None:
       prev.next = new_node
     else:
       p = new_node  
     prev = new_node
     current = current.next
   else:
     prev = current
     current = current.next

def print_list(p):

 current = p
 while current is not None:
   print(current.info, end=" ")
   current = current.next
 print()

if __name__ == "__main__":

 values = [1, 2, 3, 4, 5]
 p = Node(values[0])  
 current = p
 for value in values[1:]:  
   current.next = Node(value)  
   current = current.next  
 print("Lista initiala:")
 print_list(p)
 inserare(p)
 print("Lista dupa inserare:")
 print_list(p)

</syntaxhighlight>