Pagina informaticii

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

Probleme cu liste simplu înlănţuite

1. Scrieţi funcţie InserareInLista care primeşte ca parametri un pointer la o l.s.i. şi doi întregi n şi x şi inserează după al n-lea nod al listei un nou nod ce memorează valoarea x. Dacă lista are mai puţin de n noduri, inserarea nu va fi realizată. Funcţia va returna 1 dacă inserarea s-a făcut cu succes şi 0 în caz contrar.

2. Scrieţi funcţia EliminaValoare, care primind ca parametri un pointer la o l.s.i. şi un întreg x, elimină din listă toate nodurile care memorează informaţia x. Atenţie, după eliminare lista poate rămâne vidă.

3. Scrieţi funcţia CreareInvers care primeşte ca parametri un pointer start1 la o l.s.i. care memorează numere întregi şi un pointer start2, crează o nouă listă a cărei adresă de început va fi memorată în start2 şi care va reţine informaţiile din lista iniţială, dar în ordine inversă. De exemplu, dacă lista iniţială memorează în noduri valorile 3, 45, -12, 0, 55, atunci noua listă va reţine valorile în ordinea 55, 0, -12, 45, 3.

4. Considerăm o listă care memorează în fiecare nod o cifră. Astfel poate fi reţinut un număr cu multe cifre. În primul nod este cifra cea mai semnificativă, iar în ultimul cifra unităţilor. Scrieţi funcţia ProdZero care primeşte ca parametru un pointer la o astfel de listă şi realizează înmulţirea cu 10 a numărului mare memorat în listă. Scrieţi apoi funcţia Div5 care realizează împărţirea la 5 a numărului obţinut cu funcţia ProdZero.

5. Scrieţi funcţia LexComp care primeşte ca parametri doi pointeri s1 şi s2 la două l.s.i. ce memorează numere naturale şi returnează –1 dacă prima listă este mai mică d.p.d.v. lexicografic decât a doua listă, 0 dacă listele sunt egale lexicografic, sau 1 dacă prima listă este mai mare lexicografic decât a doua listă. De exemplu, pentru s1 = 3, 70, 55, 2, 10  s2 = 3, 70, 40, 88, funcţia va returna 1, iar pentru s1 = 4,3,7,6  s2 = 4,3,7,6,4,9, funcţia va returna –1.

6. Scrieţi o funcţie Inserare, care primind ca parametri un pointer la o l.s.i. care memorează numere întregi în ordine crescătoare şi un întreg x, inserează în listă un nou nod cu informaţia x astfel încât lista să rămână ordonată crescător. Scrieţi apoi funcţia InsertSort, care primeşte ca parametru un tablou de n numere naturale, construieşte o listă (care iniţial e vidă) care va avea n noduri ce memorează valorile din tablou în ordine crescătoare. Funcţia va construi lista în n paşi. La primul pas va construi lista cu un nod, iar la fiecare din următorii n-1 paşi se va apela funcţia Inserare.

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 =