Pe scurt
Într-un tablou cu elemente pe poziții consecutive, inserarea deplasează spre dreapta elementele de la poziția aleasă, iar ștergerea le deplasează spre stânga pe cele de după ea. Dacă din inserăm 4 înainte de 5, rezultatul este . Trebuie să existe loc pentru elementul nou.
În detaliu
Într-un vector cu elemente memorate pe pozițiile , inserarea unei valori pe poziția cere deplasarea cu o poziție spre dreapta a elementelor de la până la , ca să se elibereze locul; apoi valoarea se scrie pe poziția , iar dimensiunea crește cu 1. Ștergerea elementului de pe poziția cere deplasarea cu o poziție spre stânga a elementelor de la până la , care acoperă elementul șters; apoi scade cu 1. Deplasarea la inserare se face de la dreapta la stânga, începând cu ultimul element, pentru ca nicio valoare încă necesară să nu fie suprascrisă; la ștergere se merge de la stânga la dreapta. Tabloul trebuie să aibă capacitate pentru elementul nou: dacă este deja egal cu capacitatea, inserarea nu este posibilă. Numărul de mutări este la inserare și la ștergere, deci, în cel mai defavorabil caz, timpul este proporțional cu .
Exemplul 1 — inserare. În vectorul (, capacitate 6) se inserează valoarea 4 pe poziția 1.
- Se mută 8 de la indicele 2 la 3: vectorul conține .
- Se mută 5 de la indicele 1 la 2: vectorul conține .
- Se scrie 4 pe poziția 1: .
- Dimensiunea devine .
int v[6] = {2, 5, 8};
int n = 3, poz = 1, valoare = 4;
for (int i = n; i > poz; --i)
v[i] = v[i - 1];
v[poz] = valoare;
++n;
Primele elemente sunt , cu două mutări. Dacă deplasarea ar începe de la stânga, v[2] = v[1] ar copia 5, apoi v[3] = v[2] ar copia tot 5, iar valoarea 8 s-ar pierde.
Exemplul 2 — ștergere. Din vectorul se șterge elementul de pe poziția 1. Se mută 5 de la indicele 2 la 1 și 8 de la indicele 3 la 2, iar dimensiunea scade la 3.
for (int i = poz; i < n - 1; ++i)
v[i] = v[i + 1];
--n;
Rezultatul este , după două mutări. Elementul de la indicele 3 nu este șters fizic; el rămâne în memorie, dar nu mai face parte din vector, pentru că este acum 3.
Exemplul 3 — la capete. Inserarea pe ultima poziție, , nu cere nicio mutare: valoarea se scrie direct în v[n]. Inserarea pe poziția 0 cere mutări, deci este cel mai costisitor caz. Ștergerea ultimului element nu cere nicio mutare, doar scăderea lui . Pentru a șterge toate aparițiile unei valori nu trebuie repetată ștergerea cu mutări de fiecare dată; se pot copia elementele păstrate în aceeași parcurgere, cu un al doilea indice.
Urmărește vectorul după fiecare mutare și actualizează dimensiunea la momentul potrivit. Cele mai frecvente erori sunt sensul greșit al deplasării și limitele ciclului: la inserare ciclul pornește de la (nu de la ), iar la ștergere se oprește la . Dacă enunțul indexează elementele de la 1, pozițiile și limitele se deplasează cu 1.
Exemplul 4 — urmărirea unei inserări. Ce se afișează în urma executării secvenței de mai jos?
int v[6] = {2, 5, 8}, n = 3;
for (int i = n; i > 1; --i)
v[i] = v[i - 1];
v[1] = 4;
n++;
for (int i = 0; i < n; ++i)
cout << v[i] << ' ';
- a)
2 4 5 8 - b)
2 4 8 8 - c)
2 5 4 8 - d)
4 2 5 8
Răspunsul corect este a). Ciclul pornește de la și merge descrescător până la : v[3] = v[2] = 8, apoi v[2] = v[1] = 5. Se scrie v[1] = 4, iar devine 4. Se afișează primele patru elemente: 2 4 5 8. Varianta b) ar rezulta dacă deplasarea s-ar face de la stânga la dreapta și ar propaga valoarea 5. Varianta d) corespunde inserării pe poziția 0.
Greșeli frecvente
- Greșit: la inserare se deplasează elementele începând cu cel de pe poziția dorită, spre dreapta.Corect: deplasarea începe cu ultimul element, ca să nu se suprascrie valori.
- Greșit: după ștergere, vectorul își micșorează automat capacitatea.Corect: se micșorează doar numărul de elemente utile .
- Greșit: inserarea unui element în vector costă mereu o singură operație.Corect: costă până la mutări.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original)
