Înapoi la blog
#bac#C++#structuri de date#informatică

C++ pentru Bacalaureat: cele mai importante structuri de date pe care trebuie să le știi

Vectori, matrice, struct, string, stivă și coadă în C++ pentru BAC Informatică: ce sunt, cum le folosești și când, explicate clar cu exemple de cod.

La Bacalaureatul de Informatică nu te ajută doar să știi sintaxa C++. Cheia e să știi unde pui datele și cum le organizezi ca să rezolvi problema cerută. Asta înseamnă structurile de date. Hai să le luăm pe rând pe cele care apar cel mai des în subiecte, cu exemple pe care le poți scrie chiar acum.

Vectorii (array): pâinea de zi cu zi a BAC-ului

Un vector (sau array) e o șiruire de elemente de același tip, păstrate unul după altul, fiecare cu un index. E structura pe care o vei folosi cel mai mult: numere de prelucrat, scoruri, frecvențe.

#include <iostream>
using namespace std;

int main() {
    int v[100], n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];

    int suma = 0;
    for (int i = 0; i < n; i++)
        suma += v[i];

    cout << "Suma este " << suma;
    return 0;
}

Reține trei lucruri esențiale pentru BAC:

  1. Indexarea pornește de la 0. Un vector de n elemente are indici de la 0 la n - 1.
  2. Declară vectorul suficient de mare (ex. v[100] sau cât spune enunțul), nu fix cât crezi că ai nevoie.
  3. Parcurgerea cu for e tiparul tău de bază: citire, prelucrare, afișare.

Folosești vector ori de câte ori ai o listă liniară de valori pe care le procesezi în ordine sau le accesezi după poziție.

Matricele: când datele au rânduri și coloane

O matrice e un tabel bidimensional, adică un vector de vectori. O folosești când datele se așază natural pe linii și coloane: tabele, hărți, table de joc.

int a[10][10], n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        cin >> a[i][j];

// suma elementelor de pe diagonala principală
int suma = 0;
for (int i = 0; i < n; i++)
    suma += a[i][i];

La BAC vezi des cerințe cu matrice: parcurgerea pe linii, pe coloane, pe diagonale, sau căutarea unui element. Trucul e să te gândești mereu: i îți spune linia, j îți spune coloana. Diagonala principală e acolo unde i == j, iar cea secundară unde i + j == n - 1.

String-urile: lucrul cu text

Un string e o secvență de caractere, adică text. În C++ ai două variante des întâlnite la BAC: șirul stil C (char s[...]) și clasa string. Pentru cei mai mulți elevi, string e mai comodă.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    getline(cin, s); // citește o linie întreagă, cu spații

    int vocale = 0;
    for (int i = 0; i < s.size(); i++) {
        char c = s[i];
        if (c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
            vocale++;
    }
    cout << "Vocale: " << vocale;
    return 0;
}

Funcții utile pe care merită să le ții minte: s.size() (lungimea), s[i] (caracterul de pe poziția i), s.substr(poz, lungime) (o bucată din șir) și s + t (concatenare). Atenție la un detaliu care prinde mulți elevi: dacă citești cu cin >> s se oprește la primul spațiu, așa că pentru o propoziție întreagă folosești getline.

Struct: când grupezi date care merg împreună

Un struct îți permite să grupezi mai multe informații despre același lucru într-un singur tip. În loc de trei vectori paraleli pentru numele, nota și clasa unui elev, ai un singur vector de structuri.

#include <iostream>
#include <string>
using namespace std;

struct Elev {
    string nume;
    int nota;
};

int main() {
    Elev clasa[30];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> clasa[i].nume >> clasa[i].nota;

    // afișează elevii cu nota cel puțin 9
    for (int i = 0; i < n; i++)
        if (clasa[i].nota >= 9)
            cout << clasa[i].nume << "\n";
    return 0;
}

Accesezi câmpurile cu punct: clasa[i].nume, clasa[i].nota. Folosești struct ori de câte ori o entitate are mai multe atribute legate între ele și vrei să le ții ordonate, nu împrăștiate în vectori separați.

Stivă și coadă: noțiuni de bază pe care e bine să le ai

Acestea apar mai rar la cerințe directe, dar conceptele te ajută enorm la gândire. Diferența esențială e ordinea în care scoți elementele.

Stiva (stack) funcționează LIFO: ultimul intrat, primul ieșit — ca un teanc de farfurii. Coada (queue) funcționează FIFO: primul intrat, primul ieșit — ca rândul la magazin.

StructurăRegulăAdaugiScoțiExemplu mental
StivăLIFOpush (sus)pop (de sus)teanc de farfurii
CoadăFIFOenqueue (la coadă)dequeue (din față)rând la casă

În C++ le ai gata făcute în biblioteca standard, dar le poți simula și cu un vector plus un index.

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

int main() {
    stack<int> st;
    st.push(1);
    st.push(2);
    st.push(3);
    cout << st.top(); // afișează 3 (ultimul intrat)
    st.pop();

    queue<int> q;
    q.push(1);
    q.push(2);
    q.push(3);
    cout << q.front(); // afișează 1 (primul intrat)
    q.pop();
    return 0;
}

Stiva e utilă când vrei să "te întorci" pe pași (ex. verificarea parantezelor), iar coada când procesezi lucrurile în ordinea sosirii. Chiar dacă nu apar des explicit în subiecte, ideile de LIFO și FIFO îți limpezesc multe probleme.

Cum decizi ce structură folosești

Nu trebuie să le memorezi mecanic. Pune-ți întrebarea potrivită:

  • Am o listă simplă de valori? → vector.
  • Datele au rânduri și coloane? → matrice.
  • Lucrez cu text? → string.
  • O entitate are mai multe atribute legate? → struct.
  • Contează ordinea de intrare/ieșire? → stivă sau coadă.

Cu cât rezolvi mai multe probleme, cu atât alegerea devine reflex. La BAC nu ești punctat că știi definiția, ci că alegi structura care face soluția simplă și corectă.

Concluzie

Structurile de date sunt cutiile în care îți pui informația. Vectorii și matricele acoperă majoritatea cerințelor de BAC, string-urile rezolvă problemele cu text, struct îți ține datele ordonate, iar stiva și coada îți dau intuiția potrivită pentru ordine. Important e să le exersezi pe probleme reale, nu doar să le citești.

La ByteSchool te pregătim pentru Bacalaureatul de Informatică pas cu pas, cu mentori care au trecut prin aceleași subiecte și lucrează azi în tech. Exersezi pe probleme de tip BAC, primești feedback la cod și înțelegi nu doar cum, ci și de ce alegi fiecare structură.