Pagina informaticii

Teste de informatică pentru liceu, articole C#, C/C++, PHP

Liste liniare simplu înlănţuite

Rândul 1

Pentru funcţiile de mai jos considerăm că lista conţine în câmpul de informaţie valori întregi cuprinse între –1000 şi 1000.

1. Scrie funcţia Add, care primind ca parametri un pointer p la un nod al listei şi un întreg x, inserează după nodul p un nou nod ce va memora informaţia x.

2. Scrie funcţia AddEnd, care primind ca parametri un pointer la o listă şi un întreg x, inserează la sfârşitul listei un nod cu informaţia x. Funcţia AddEnd trebuie să apeleze funcţia Add.

3. Scrie funcţia DetMin, care primind ca parametru un pointer la o listă, returnează valoarea minimă memorată în listă.

4. Scrie funcţia NrApMin, care primind ca parametru un pointer la o listă, returnează numărul de apariţii ale valorii minime din listă.

5. Scrie funcţia CautaValoare, care primind ca parametri un pointer la o listă şi un întreg x, returnează adresa primului nod din listă care memorează informaţia x, sau NULL, dacă x nu apare în listă.

6. Utilizând funcţiile CautaValoare şi Add, scrieţi funcţia InserareValoare care primeşte ca parametri un pointer la o lista şi doi întregi y,z şi inserează după fiecare apariţie a valorii y un nou nod cu informaţia z.

7. Scrie funcţia CitesteConstruieste (parametrii îi alegi singur!) care citeşte din fişierul date.in un şir de numere întregi şi construieşte o listă care va memora valorile din şir. Lista va memora numerele în ordinea în care apar şi în fişier. Se va apela funcţia Add pentru adăugarea de noduri în listă.

8. Scrie funcţia Mix, care primind ca parametri doi pointeri s1 şi s2 la două liste cu acelaşi număr de noduri, inserează nodurile celei de-a doua liste printre nodurile primeia. După inserare, lista referită de s2 va fi vidă. De exemplu, dacă listele memorează valorile 1, 2, 3, 4 respectiv 10, 20, 30 ,40, atunci după inserare, lista s1 va fi 1, 10, 2, 20, 3, 30, 4, 40, iar lista s2 va fi vidă.

Notă: Subiectele 1 – 7 sunt notate cu 1 punct, subiectul 8 este notat cu 2 puncte. Se acordă un punct din oficiu.

 

Rândul 2

Pentru funcţiile de mai jos considerăm că lista conţine în câmpul de informaţie valori întregi cuprinse între –1000 şi 1000.

1. Scrie funcţia Creare, care primeşte ca parametri un pointer la o listă şi un întreg a, creează lista cu un singur nod a cărui adresă va fi memorat de pointer şi care reţine ca informaţie pe a.

2. Scrie funcţia Inserare, care primeşte ca parametri un pointer p la un nod al unei liste şi un întreg a şi inserează un nou nod după nodul referit de p care reţine informaţia a.

3. Scrie funcţia Lista, care primeşte ca parametri un pointer la o listă (iniţial vidă) şi un tablou de numere n întregi şi creează lista care memorează valorile din vector, apelând funcţiile Creare şi Inserare.

4. Scrie funcţia CautaDublura care primind ca parametru un pointer la o listă, returnează un pointer către un nod al listei cu proprietatea că informaţia din acel nod este egală cu informaţia nodului succesor. Dacă nu există două noduri consecutive cu aceeaşi informaţie, funcţia va returna NULL.

5. Scrie funcţia Sterge care primeşte ca parametru un pointer p la un nod al unei liste şi şterge nodul succesor lui p.

6. Scrie funcţia EliminareDubluri, care primeşte ca parametru un pointer la o listă şi caută oricare două noduri succesive din listă şi elimină al doilea nod din cele două. Funcţia va apela funcţiile CautaDublura şi Sterge definite anterior.

7. Scrie funcţia EliberareMemorie care primind ca parametru un pointer la o listă, şterge toate nodurile din listă. La final, pointerul va memora NULL.

8. Scrie funcţia Mix, care primind ca parametri doi pointeri s1 şi s2 la două liste cu acelaşi număr de noduri, inserează nodurile celei de-a doua liste printre nodurile primeia. După inserare, lista referită de s2 va fi vidă. De exemplu, dacă listele memorează valorile 1, 2, 3, 4 respectiv 10, 20, 30 ,40, atunci după inserare, lista s1 va fi 1, 10, 2, 20, 3, 30, 4, 40, iar lista s2 va fi vidă.

Notă: Subiectele 1 – 7 sunt notate cu 1 punct, subiectul 8 este notat cu 2 puncte. Se acordă un punct din oficiu.

Despre autor
Author

Dan Pracsiu deţinător www.dponline.ro
Profesor, Liceul Teoretic "Emil Racoviță" Vaslui
Membru în Comisia Naţională a Olimpiadelor de Informatică
Pasiuni: istoria, călătoriile, fotografia, muzica clasică

Scrie un comentariu
Nume:

Comentariu:

15 + 10 =