Sari la conținut
EduCamp
Titularizare2021Problemă15 puncte

Subiectul al II-lea, cerința 1

Lista cu parități alternante

Subprogramul care adaugă un nod la sfârșitul unei liste simplu înlănțuite, cu adresele primului și ultimului nod transmise prin referință, și construirea listei 1, n, 3, n−2, … în care numerele impare cresc, iar cele pare descresc.

Tipul de date pentru nodurile listei

Fiecare nod are două câmpuri: info, numărul memorat, și urm, adresa nodului următor. Ultimul nod are în câmpul urm adresa nulă, NULL.

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

Subprogramul adaug

Subprogramul modifică adresele primului și ultimului nod, iar programul apelant trebuie să primească valorile noi. De aceea p și u se transmit prin referință, iar x se transmite prin valoare.

Etapele adăugării sunt următoarele:

  1. Se alocă dinamic un nod nou, în câmpul info al căruia se memorează x. Câmpul urm primește valoarea NULL, fiindcă noul nod devine ultimul nod al listei.
  2. Dacă lista este vidă, adică p este NULL, noul nod devine primul nod al listei, deci p primește adresa lui.
  3. Dacă lista nu este vidă, noul nod se leagă după ultimul nod: câmpul urm al nodului indicat de u primește adresa noului nod.
  4. În ambele cazuri, u primește adresa noului nod.
void adaug(nod*& p, nod*& u, int x) {
    nod* nou = new nod;
    nou->info = x;
    nou->urm = NULL;

    if (p == NULL)
        p = nou;
    else
        u->urm = nou;
    u = nou;
}

Adresa ultimului nod este cunoscută, deci adăugarea nu cere parcurgerea listei și se face într-un număr constant de operații, oricâte noduri ar avea lista.

Construirea listei

Numerele impare din intervalul [1,n] sunt 1, 3, 5, …, n − 1, iar cele pare sunt 2, 4, 6, …, n, fiindcă n este par. Fiecare categorie are n/2 elemente. Numerele impare trebuie adăugate în ordine crescătoare, cele pare în ordine descrescătoare, iar paritățile trebuie să alterneze.

Lista se construiește deci în n/2 pași. La pasul i, cu i de la 1 la n/2, se adaugă:

  • numărul impar 2i − 1, adică al i-lea număr impar în ordine crescătoare;
  • numărul par n − 2i + 2, adică al i-lea număr par în ordine descrescătoare.

Se obține lista 1, n, 3, n − 2, 5, n − 4, …, n − 1, 2, care începe cu un număr impar. Pentru n = 6 lista este 1 6 3 4 5 2, adică prima dintre variantele date în exemplu.

Rezolvarea se poate citi pe educamp.ro, la adresa de mai sus.

Ce cuprinde rezolvarea

  1. Tipul de date pentru nodurile listei
  2. Subprogramul adaug
  3. Construirea listei
  4. Programul
  5. Verificarea pe exemplul din enunț

Vezi rezolvarea ca și cursant

Cel puțin o cerință din fiecare an este disponibilă gratuit și integral. Pentru a citi toate celelalte rezolvări ale disciplinei, te înscrii la cursul de pregătire.

Prima săptămână este gratuită, fără plată și fără card. Dacă vrei să vezi mai întâi cum este scrisă o rezolvare, poți reveni la prima cerință a anului.

100 RON / lună, pentru o disciplină

Ce cuprinde:

  • Două întâlniri de câte două ore, în fiecare lună
  • Tot suportul de curs publicat până acum la disciplina aleasă
  • Capitole noi în fiecare săptămână, cuprinse în luna plătită, fără costuri suplimentare
  • Material organizat după structura programei de examen
  • Acces de pe orice dispozitiv, folosind același cont
  • Prima săptămână gratuită, fără card și fără reînnoire automată

Ai întrebări sau o problemă? Scrie-mi pe WhatsApp, la 0745 874 576.

Începe săptămâna gratuită Cum plătești Login

Actualizat: 23 septembrie 2026