Sunteți pe pagina 1din 5

Proiect Liste

Enunț:
Scrieți declarările necesare pentru definirea unei LLSI, știind că un element al listei memoreaza
un număr natural de cul mult 4 cifre.
Scrieți un subprogram care efectuează concatenarea a două astefel de liste după următorul
procedeu: se adauga lista cu cele mai puține elemente in continuarea listei cu cele mai multe
elemente. Subprogramul primește prin doi parametri adresele de început ale celor două liste și
returnează printr-un al treilea parametru adresa de început a listei obținute prin concatenarea
celor doua liste.Dacă cele doua liste ai același număr de elemente, atunci la sfârșitul listei
trimisă prin primul parametru se va adauga cea de-a doua listă.

Exemplu:
Lista 1 : 75 -4
Lista 2 : 0 -11 31 82 15
Lista 3

0 -11 31 82 15 75
-4

Mod de rezolvare:
1. Creăm cele două liste.
2. Determinam numărul de elemente al fiecărei liste.
3. Adăugăm la listei cu mai multe elemente lista cu mai puține elemente și refacem
legăturile dintre ele.
#include <fstream>
#include <iostream> {
using namespace std; for(pnod *c = p; c; c = c->urm)
cout<<c->info<<' ';
struct pnod cout<<endl;
{ }
int info;
pnod *urm;
}; int nrelem(pnod *p)
{
int nr = 0;
void creare(pnod *&p, pnod *&u, pnod *c = p;
char numefis[]) while(c)
{ {
ifstream f(numefis); nr++;
int x; c=c->urm;
f>>x; }
p = new pnod; return nr;
p->info = x; }
p->urm = 0;
u = p;
void mut1(pnod *p1, pnod *&p3,
while(f>>x) pnod *&u3)
{ {
pnod *c = new pnod; for(pnod *c = p1; c; c=c->urm)
c->info = x; if(p3 == NULL)
c->urm = 0; {
u->urm = c; p3 = new pnod;
u = c; p3->info = c->info;
} p3->urm = NULL;
} u3 = p3;
}
void listare(pnod *p) else
{ mut2(p1, u3);
pnod * d = new pnod; }
d->info = c->info; }
d->urm = NULL;
u3->urm = d; int main()
u3 = d; {
} pnod *p1 = 0, *u1 = 0;
} creare(p1, u1, "list1.in");
cout<<"prima lista este:";
listare(p1);
void mut2(pnod *p2, pnod *&u3)
{
for(pnod *c = p2; c; c=c->urm) pnod *p2 = 0, *u2 = 0;
{ creare(p2, u2, "list2.in");
pnod * d = new pnod; cout<<"a doua lista:";
d->info = c->info; listare(p2);
d->urm = NULL;
u3->urm = d;
u3 = d; cout<<"lista 1 are:
} "<<nrelem(p1)<<" valori ";
} cout<<endl<<"lista 2 are:
"<<nrelem(p2)<<" valori "<<endl;
pnod *p3 = NULL, *u3 = NULL;
void prelucrare(pnod *p1, pnod *p2,
pnod *&p3, pnod *&u3) prelucrare(p1, p2, p3, u3);
{ cout<<"lista noua: ";
int x = nrelem(p1), y = nrelem(p2); listare(p3);
if(x <= y)
{
mut1(p1, p3, u3); return 0;
mut2(p2, u3); }
}
else
{
mut1(p2, p3, u3);
funcțiile mut1 și mut2 , după caz, prima
listă în continuarea celei de-a doua sau
invers.

Funcția nrelem: Funcția creare:


Primește printr-un parametru primul Primește ce parametri adresele primului
element al listei, apoi parcurge lista și creste element și ultimului element, și numele
valoare lui nr(numarul de elemente) cu 1 fișierului din care se citesc valori pentru
pentru fiecare element. crearea listei.

Funcția mut1: Funcția listare:


Primește prin parametri adresa primului Afișează pe ecran conținutul listei primite ca
element al unei liste și adresele începutului parametru.
si finalului listei obținute prin concatenare.
Funcția efectuează prima mutare pentru
efectuarea concatenării și anume din lista
primită ca parametru ia fiecare element pe
rând și il pune in lista nouă, creând un prim
element și apoi pe celelalte în continuarea
sa.

Funcția mut2:
Primește ca parametri adresa primului
element al unei liste și adresa ultimului
element al listei nou create.
Funcția efectuează cea de-a doua mutare și
anume adaugă în continuarea listei parțial
create prin funcția mut1, pe rând, fiecare
element din lista primită ca parametru.

Funcția prelucrare:
Primește ca parametri adresele de început
ale pimei liste și a celei de-a doua,, cât și
adresele primlui și ultimului element ale
listei noi.
Funcția determină care dintre liste are mai
multe elemente prin apeluri ale funcției
nrelem, apoi adaugă apelând pe rând Apostol Andrei
Clsasa a XI-a B

S-ar putea să vă placă și