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:
- Se alocă dinamic un nod nou, în câmpul
infoal căruia se memoreazăx. Câmpulurmprimește valoareaNULL, fiindcă noul nod devine ultimul nod al listei. - Dacă lista este vidă, adică
pesteNULL, noul nod devine primul nod al listei, decipprimește adresa lui. - Dacă lista nu este vidă, noul nod se leagă după ultimul nod: câmpul
urmal nodului indicat deuprimește adresa noului nod. - În ambele cazuri,
uprimeș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.
S-a încheiat minutul de citit liber.
Ce cuprinde rezolvarea
- Tipul de date pentru nodurile listei
- Subprogramul adaug
- Construirea listei
- Programul
- 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.