Trong mảng một chiều, ta có thể thực hiện thao tác thêm phần tử vào mảng qua 3 cách đó là: 1) Thêm vào đầu mảng; 2) Thêm vào cuối mảng; 3)Thêm vào giữa mảng.

1.Cách thêm phần tử vào mảng

Giả sử, mảng một chiều ban đầu của tôi là một mảng int a[10] có các phần tử là: 11,22,33,44,55,66,77,88,99,10; Nghĩa là mảng trên có 10 phần tử có kiểu số nguyên.

int main(){
    //khai bao mang a co 10 phan tu
    int a[10] = {11,22,33,44,55,66,77,88,99,10};
}

Tôi sẽ biểu diễn mảng trên theo hình minh họa dưới đây:

Giả sử tôi cần thêm một phần tử là số 111 vào trong mảng và đặt nó nằm vị trí index = 7, nghĩa là phần tử này sau khi được thêm vào mảng sẽ nằm ở giữa phần tử 77 và 88. Xem hình bên dưới:

Như vậy, tôi cần thực hiện lùi tất cả các số phía sau nơi được thêm(bao gồm cả vị trí thêm) về phía sau 1 index sau đó tăng kích thước của mảng lên 1 đơn vị. Xem hình dưới để dễ hình dung hơn việc thêm một phần tử vào mảng:

Tóm tắt các bước thêm phần tử vào trong mảng một chiều

  • Nhập vào vị trí index và phần tử cần thêm vào mảng
  • Kiểm tra mảng đã đầy chưa, nếu đã đầy thì không thể thêm phần tử
  • Nếu địa chỉ bằng 0 thì thêm vào đầu, nếu địa chỉ bằng N thì thêm vào cuối (N ở đây là số lượng phần tử)
  • Dịch chuyển mảng từ vị trí cần thêm về bên trái 1 đơn vị
  • Sau khi đã dịch chuyển đến vị trí cần thêm, thực hiện thêm phần tử đó vào
  • Tăng kích thước mảng lên 1 đơn vị

2.Chương trình thêm phần tử vào trong mảng

Dựa vào các bước thêm phần tử vào mảng đã được nêu ở phần trên, chương trình dưới đây được viết trực tiếp trong hàm main và thực hiện thao tác thêm một phần tử vào trong mảng. Với mảng ban đầu là int a[10] = {11,22,33,44,55,66,77,88,99,10} và phần tử cần thêm vào là 111 tại vị trí index = 7

#include <stdio.h>
int main(){
    //khai bao kich thuoc mang n = 10
    int n = 10;
    //khai bao mang gom n phan tu
    int a[n] = {11,22,33,44,55,66,77,88,99,10};
    //phan tu can them vao mang
    int PhanTu = 111;
    //vi tri can them
    int index = 7;
    //neu index <= 0 thi gan index = 0 de them vao dau mang
    if(index <= 0){
        index = 0;
    }
    //neu index >= n thi gan index = n de them vao cuoi mang
    if(index >= n){
        index = n;
    }
    //dich chuyen cac phan tu 
    for(int i = n; i > index; i--){
        //dich chuyen phan tu sang ben trai
        a[i] = a[i-1];
    }
    //them phan tu 111 vao vi tri index 7
    a[index] = PhanTu;
    //tang kich thuoc mang len 1 don vi
    n++;
}

Cách trên được viết trực tiếp ở hàm main, tuy nhiên ta hoàn toàn có thể xây dựng một hàm thêm phần tử và gọi lại chúng ở trong hàm main. Hàm void ThemPhanTu(int a[], int index, int PhanTu, int &n) dưới đây nhận các tham số là: int a[] là mảng cần thêm phần tử, int index là địa chỉ cần thêm, int PhanTu là giá trị cần thêm vào mảng và int &n là tham chiếu đến biến n số lượng phần tử của mảng để khi thực hiện thêm phần tử ta sẽ tăng biến n lên 1 đơn vị.

#include <stdio.h>
void ThemPhanTu(int a[], int index, int PhanTu, int &n){
    //neu index <= 0 thi gan index = 0 de them vao dau mang
    if(index <= 0){
        index = 0;
    }
    //neu index >= 10 thi gan index = 10 de them vao cuoi mang
    if(index >= n){
        index = n;
    }
    //dich chuyen cac phan tu 
    for(int i = n; i > index; i--){
        //dich chuyen phan tu sang ben trai
        a[i] = a[i-1];
    }
    //them phan tu 111 vao vi tri index 7
    a[index] = PhanTu;
    //tang kich thuoc mang len 1 don vi
    n++;
}
int main(){
    //khai bao kich thuoc mang n = 10
    int n = 10;
    //khai bao mang 
    int a[n] = {11,22,33,44,55,66,77,88,99,10};
    //phan tu can them vao mang
    int PhanTu = 111;
    //vi tri can them
    int index = 7;
    //goi ham them phan tu truyen vao mang a,vi tri index can them, phan tu can them va  va so luong phan tu n cua mang
    ThemPhanTu(a,index, PhanTu, n);
}

3.Nhập xuất và thêm phần tử vào trong mảng

Thay vì khai báo số lượng n = 10, index = 7 và phần tử = 111 ta có thể cho người dùng nhập các giá trị trên từ bàn phím. Để thực hiện được việc đó ta cần sự có mặt của các hàm Nhap(), Xuat(). Các hàm này đã được tôi nêu ra ở bài trước, nếu bạn quên vui lòng đọc lại!

#include <stdio.h>
void Nhap(int a[], int n){
    //dung vong lap for duyet tu vi tri index thu 0 cho den vi tri n - 1 
    for(int i = 0; i <= n - 1; i++){
        //nhap gia tri va gan vao tung phan tu a[i] cua mang
        printf("NHAP A[%d]: ",i);
        scanf("%d",&a[i]);
    }
}

void Xuat(int a[], int n){
    printf("\nCAC PHAN TU CO TRONG MANG\n");
    for(int i = 0; i <= n - 1; i++){
        //xuat cac phan tu a[i] co trong mang ra man hinh
        printf("A[%d] = %d \n" ,i,a[i]);
    }
}
void ThemPhanTu(int a[], int index, int PhanTu, int &n){
    //neu index <= 0 thi gan index = 0 de them vao dau mang
    if(index <= 0){
        index = 0;
    }
    //neu index >= 10 thi gan index = 10 de them vao cuoi mang
    if(index >= n){
        index = n;
    }
    //dich chuyen cac phan tu 
    for(int i = n; i > index; i--){
        //dich chuyen phan tu sang ben trai
        a[i] = a[i-1];
    }
    //them phan tu 111 vao vi tri index 7
    a[index] = PhanTu;
    //tang kich thuoc mang len 1 don vi
    n++;
}
int main(){
    //khai bao kich thuoc mang n 
    int n;
    //nhap vao n
    printf("NHAP N: ");
    scanf("%d",&n);
    //khai bao mang gom n phan tu
    int a[n];
    //goi ham nhap cac phan tu
    Nhap(a,n);
    //goi ham xuat
    Xuat(a,n);
    //nhap vao phan tu can them
    int PhanTu;
    printf("NHAP PHAN TU CAN THEM: ");
    scanf("%d",&PhanTu);
    //nhap vao vi tri can them
    int index;
    printf("NHAP VI TRI CAN THEM: ");
    scanf("%d",&index);
    //goi ham them phan tu truyen vao mang a,vi tri index can them, phan tu can them va  va so luong phan tu n cua mang
    ThemPhanTu(a,index, PhanTu, n);
    //goi ham xuat sau khi them phan tu
    Xuat(a,n);
}