Liste liniare simplu inlantuite

 

Urmatorul program ofera o modalitate de creare si afisare a unei liste liniare simplu inlantuite care prelucreaza numere intregi:

 

#include<iostream.h>

#include<conio.h>

 

struct nod

  {int info;

   nod *next;};

 

nod *p,*u ;         // acceseaza primul respective ultimul nod

int n;                  //numarul de noduri

 

void cre_ad()     //functia de creare si adaugare  a unui nou element

{nod *c;

 if(!p)                   //daca lista este vida (p==0) se aloca primul nod

    {p=new nod;

     cout<<"valoare primului nod ";

     cin>>p->info;

     u=p;            //la creare primul si ultimul nod vor fi identici

     }

 else                             //altfel se adauga un nou element la sfarsit

     { c=new nod;          //se aloca un nou nod

       cout<<"informatia utila :";

       cin>>c->info;        //se completeaza campul informatie utila

       u->next=c;            //se adauga dupa ultimul nod

       u=c;                      //se stabileste noul nod c ca fiind ultimul

       }

u->next=0;                   //campul adresa urmatoare a ultimului nod este 0

     }

 

void afis()  //functia de afisare parcurge elementele cu afisare

{nod *c;

 c=p;                //se porneste de la primul nod din lista

 while(c)           //cat timp c retine o adresa nenula

   {cout<<c->info<<" ";//se afiseza campul informatie utila

    c=c->next;}             //se avanseaza la urmatoarea adresa, la urmatorul nod

cout<<endl;

}

 

 

void main()

{clrscr();

int b;

 cout<<"n=";

 cin>>n;

 

 for(int i=1;i<=n;i++)

     cre_ad( );

cout<<endl;

afis();

getch();

}

 

Probleme propuse (creare si parcurgere):

 

1.      Sa se creeze o LLSI care prelucreaza n numere intregi

a.      Sa se afiseze continutul listei

b.      Sa se mai adauge 2 elemente in lista si sa se afiseze

c.       Sa se mai adauge m elemente in lista si sa se afiseze

d.      Sa se numere cate numere prime sunt in lista

e.      Sa se determine suma (produsul) elementelor din lista

f.        Sa se determine daca lista este ordonata crescator

g.      Sa se determine minimul (maximul) listei

h.      Sa se mai creeze o lista care se va adauga la sfarsitul listei (concatenare). Sa se afiseze lista noua astfel generata

i.        Se vor dubla elementele pentru care suma cifrelor este mai mica decat 10

2.      Sa se creeze o LLSI care prelucreaza n numere intregi citite din fisier

a.      Sa se afiseze continutul listei

b.      Se vor genera doua liste:una cu elementele pare si alta cu elementele impare

 

3.      Sa se formeze o lista care contine elementele unei matrici

4.      Sa se formeze o lista care contine elementele unui vector

5.      O matrice rara este o matrice cu multe valori nule. Sa se construiasca matricea pornind de la o lista liniara. Matricea are m linii si n coloane. Fiecare componenta va retine valoarea, linia si coloana.

6.      Sa se determine suma a doua matrici rare retinute in doua liste. Suma va fi retinuta tot intr-o lista. Se va afisa rezultatul si ca matrice. Matricile au m linii si n coloane.

7.      Sa se memoreze n liste. Sa se afiseze cea de a x lista

8.      Sa se genereze o lista care va retine numere intregi si dupa fiecare numar suma cifrelor sale

9.      Sa se defineasca un subprogram recursiv de parcurgere a unei liste simple

10.  Sa se determine daca doua liste de intregi au elemente commune

11.  O lista contine titlul si autorul unei carti, precum si editura. Sa se afiseze acele carti din lista editate la editura Niculescu

12.  Data fiind o lista cu elemente numere intregi, sa se formeze o a doua lista care contine elementele distincte din lista data, impreuna cu frecventa lor de aparitie.

13.  Intr-o lista simplu inlantuita se pastreaza coeficientii nenuli ai unui polinom P(X), impreuna cu gradul monomului respectiv. Sa se calculeze valoarea polinomului P(X) pentru o valoare data a lui X.

14.  Suma si produsul a doua polinoame memorate in liste.

15.  Doua multimi sunt memorate in doua liste distincte. Sa se construiasca o a treia lista care sa retina intersectia celor doua multimi si o a patra, pentru reuniune.

16.  Fiind data o lista de numere intregi sa se genereze o noua lista care va contine elementele nenule in aceeasi ordine si zerourile la sfarsit

17.  Sa se creeze o lista care prelucreaza numere complexe. Lista se citeste din fisier pe fiecare linie fiind scrise doua valori reprezentand partea reala si respective cea zecimala

a.      Sa se afiseze continutul listei

b.      Sa se determine numarul complex cu modulul cel mai mare

c.       Sa se determine suma (produsul) elementelor din lista

18.  Sa se modifice o lista de intregi interschimband informatiile din lista astfel: prima cu a doua, a treia cu a patra valoare etc

19.  Fie o lista simpla care retine intregi. Se va genera o noua lista simpla care va retine elementele in ordine inversa

20.  Sa se determine daca doua liste de intregi sunt identice ca si continut.

21.  21. Sa se memoreze intr-o lista cuvintele dintr-un fisier text. Sa se determine de cate ori apare un cuvant citit. Sa se afiseze pentru fiecare cuvant frecventa de aparitie

22.  22.Sa se afiseze adresa celui de al k element dintr-o lista simpla de intregi. Daca nu exista un astfel de element se va afisa 0.

23.   

24.   

25.  Test

1. Fie o lista de numere intregi distincte. Primele doua valori (cele mai mari) se vor insera la inceputul listei. Ex: daca lista retine initial 1 ,3,5, 4,9,25, 14,32 ,11 atunci se va obtine:   25, 32, 1, 3, 5,  4,9,25, 14,32 ,11

 

 

2. Sa se afiseze elementele (elementul) din mijlocul unei liste de intregi

 

 

3. Sa se modifice de k ori o lista astfel incat de fiecare data ultima valoare va fi inserata in fata. Sa se afiseze de fiecare data. Ex daca lista initiala este:

1, 2, 3, 4, 5, 6, 7, 8, 9 si k=3

se obtine

9, 1, 2, 3, 4, 5, 6, 7, 8

8, 9, 1, 2, 3, 4, 5, 6, 7

7, 8, 9, 1, 2, 3, 4, 5, 6,

 

4.Fie o lista de intregi. Sa se genereze o noua lista care sa retina valorile nenule din lista in aceeasi ordine si zerourile la sfarsit.

 

 

5. Se citeste un numar natural foarte mare, cifra cu cifra. Numarul are n cifre, n<30.

a.     Sa se stocheze cifrele numarului intr-o lista.                          

b.     Sa se afiseze cifrele care apar de un numar maxim de ori.           

Exemplu : Daca n=13 si numarul are cifrele : 4  7  5  8  8  4  3  8  2  1  4  0  9

a.     Lista va contine elementele 4  7  5  8  8  4  3  8  2  1  4  0  9

b.     Cifrele care apar de un numar maxim de ori sunt 4 si 8

.

 

 

26.   Sa se determine media aritmetica a secventelor de numere impare cuprinse intre numere pare

 

Aplicatie LLSI - proiect

 

Se vor prelucra datele unor elemente dintr-o aplicatie practica  la alegere.(De exemplu: informatii despre carti, studenti, produse alimentare, produse farmaceutice, elevi, animale de case de la un pet magazin  etc). Implementati primele operatii necesare prelucrarilor: