▦
Structuri de date
Tablouri — vectori si matrice
Vectori unidimensionali, matrice, parcurgere, operatii frecvente la BAC.
Vectorul (tablou unidimensional)
int v[100]; // declara vector cu maxim 100 elemente
int v[100] = {}; // initializat cu 0
Indexare: elementele sunt v[0], v[1], …, v[n-1]
La BAC se foloseste adesea indexare de la 1:
v[1]..v[n]
Citire:
int n, v[1001];
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
Afisare:
for (int i = 1; i <= n; i++)
cout << v[i] << " ";
Operatii frecvente pe vectori
Suma elementelor:
int s = 0;
for (int i = 1; i <= n; i++) s += v[i];
Maximul:
int mx = v[1];
for (int i = 2; i <= n; i++)
if (v[i] > mx) mx = v[i];
Numararea elementelor pare:
int cnt = 0;
for (int i = 1; i <= n; i++)
if (v[i] % 2 == 0) cnt++;
Inversarea vectorului:
for (int i = 1; i <= n / 2; i++)
swap(v[i], v[n + 1 - i]);
Matricea (tablou bidimensional)
int a[101][101]; // matrice cu maxim 100x100
Citire:
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
Afisare:
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++)
cout << a[i][j] << " ";
cout << "\n";
}
Operatii pe matrice
Suma elementelor:
int s = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
s += a[i][j];
Diagonala principala (numai daca n == m):
for (int i = 1; i <= n; i++)
cout << a[i][i] << " ";
Diagonala secundara:
for (int i = 1; i <= n; i++)
cout << a[i][n + 1 - i] << " ";
Transpusa:
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
swap(a[i][j], a[j][i]);
Transmitere tablou la functie
void afiseaza(int v[], int n) {
for (int i = 1; i <= n; i++)
cout << v[i] << " ";
}
// matrice:
void afiseazaM(int a[][101], int n, int m) { ... }
La examen
- Declara vectorul suficient de mare (ex:
v[100001]pentru n pana la 100.000) - Nu uita sa citesti
ninainte de vector - La matrice patrata: diagonala principala are
i == j, secundara arei + j == n + 1 swap(a, b)schimba doua valori (din<algorithm>sau implementeaza manual)