Inserarea elementelor

  Când ne referim la inserarea unui element în interiorul unui vector, trebuie să ne gândim în felul următor:

Inserarea unui element
  1. Dorim să introducem o valoare între elementele de pe poziția 3 și 4;
  2. Vom muta toate elementele începând cu poziția 4 „la dreapta” o poziție, pentru a crea un spațiu liber (dimensiunea tabloului trebuie să permită extinderea, altfel vom pierde valori de la sfârșit);
  3. Inserăm valoarea în spațiul eliberat și creștem variabila ce memorează totalul de valori.

Inserarea unei valori în poziția k

  • v este tabloul în care inserăm;
  • n este numărul de elemente al tabloului;
  • k este poziția în care inserăm;
  • x este valoarea pe care o introducem în poziția k.
int v[1001], n, k, x;
...
for (int i=n-1; i>=k; --i) v[i+1]=v[i]; /* eliberăm poziția k */
v[k]=x; // introducem valoarea în v[k]
n++; /* creștem numărul de elemente întrucât am introdus o valoare nouă */

  Eliberarea unei poziții se face cu ajutorul unui for, mutând toate elementele cu o poziție mai la dreapta (de la coadă la cap, deoarece invers am pune în toate căsuțele valoarea din v[k+1]).


Exemplu - problemă rezolvată

  Se citește un număr n, n∈(0,103], urmat de n elemente numere întregi ale unui vector v. Să se insereze media aritmetică între oricare două elemente alăturate și să se afișeze elementele separate printr-un spațiu.

#include <iostream>
using namespace std;
int n;
float v[2001];
int main (){
  int i,j;
  cin>>n;
  for(i=0; i<n; i++) cin>>v[i];
  for(i=1; i<n; i+=2){
    for(j=n-1; j>=i; j--)
      v[j+1]=v[j];
    v[i]=(v[i+1] + v[i-1])/2;
    n++;
  }
  for(i=0; i<n; i++)
    cout<<v[i]<<' ';
  return 0;
}
4
2 5 7 9
2 3.5 5 6 7 8 9
5
0 5 1 33 10
0 2.5 5 3 1 17 33 21.5 10

  Vom parcurge tabloul pe pozițiile impare (unde se vor insera mediile) și vom muta toate elementele următoare cu o poziție mai la dreapta (for-ul cu indicele j). În poziția proaspăt eliberată, marcată de variabila i, vom insera media aritmetică a vecinilor (v[i-1] și v[i+1]).
  Numărul de elemente n va crește la fiecare medie inserată.