1. Pentru a declara o lista simplu inlantuita spre exemplu poti sa faci asa:
struct nod { int info; nod *urm; };
nod *prim;
Si pentru a declara o lista dublu inlantuira aproape la fel:
struct nod { int info; nod *prev, *urm; };
nod *prim;
Cam asa se declara in principiu, exact ca orice structura. Dar pot sa varieze in functie de cum vrei sa o implementezi.
2. Pentru o clasa de numere mari poti face asa:
class Mare{ //ordinea functiilor nu conteaza, conteaza in schimb in ce categorie le pui
private: int n, a[LMAX]; //pot fi accesate numai de elementele clasei (off topic: clasele prieten sunt ceva mai complicate)
//poti sa declari aici si functii
public: //pot fi accesate din exterior
Mare(); //constructor, optional, in general il declari
//restul functiilor
Mare operator+ (Mare x); // se declara ca orice functie, [type] [name] ([parameters]);
void afisare();
//si ce mai vrei
~Mare(); //destructor, optional, il folosesti mai mult la debug
};
Functiile le poti defini in clasa (si sunt definite inline) sau in afara, caz in care functia se apeleaza [type] [classname]::[name] ([parameters]) :
Mare::Mare() { n = 0; memset(a, 0, sizeof(a)); }
Mare Mare::operator+ (Mare x) {
Mare ret;
int t;
for (ret.n = 0; ret.n < this->n || ret.n < x.n || t; ++ret.n, t /=10) // Berinde(c)
ret.a[ret.n] = (t += this->a[ret.n] + x.a[ret.n]) % 10;
return ret;
}
// pentru a nu se crea confuzii pointerul "this" indica elementul care a apelat functia
void Mare::afisare() {
printf("%d\n", n); // nu e nici o confuzie, dar e in general mai bine sa folosesti pointerul "this"
//blablabla
}
//pentru a le folosi ai ceva de genul
Mare a, b, c;
a = b + c;
a.afisare();
//operatorul "=" este incarcat implicit, dar poti sa-l supraincarci si pe el daca vrei...
Poti afla forte multe pe de pe net, sunt un infinit de tutoriale pentru clasele din C++ si in general C++. Eu, cel putin, le-am invatat din cateva tutoriale de pe net. Google it.