Vấn đề
Viết chương trình C để chèn phần tử vào mảng tại thời gian chạy do người dùng nhập và hiển thị kết quả sau khi chèn. Nếu vị trí chèn lớn hơn kích thước mảng, hiển thị "Đầu vào không hợp lệ".
Giải pháp
Mảng dùng để chứa nhóm các phần tử chung dưới một tên.
Các thao tác trên mảng:
- Chèn
- Xóa
- Tìm kiếm
Thuật toán
Tham khảo thuật toán chèn phần tử mảng với con trỏ.
Bước 1: Khai báo và đọc số lượng phần tử.
Bước 2: Khai báo và đọc kích thước mảng tại runtime.
Bước 3: Nhập các phần tử mảng.
Bước 4: Khai báo biến con trỏ.
Bước 5: Cấp phát bộ nhớ động tại runtime.
Bước 6: Nhập vị trí cần chèn phần tử.
Bước 7: Chèn phần tử mới tại vị trí đó và dịch các phần tử bên phải sang phải một vị trí.
Ví dụ
Kích thước mảng: 5
Các phần tử: 1 2 3 4 5
Chèn phần tử mới: 9
Tại vị trí: 4
Kết quả:
Sau khi chèn các phần tử mảng: 1 2 3 9 4 5
Chương trình C
Chương trình C chèn phần tử mảng bằng con trỏ:
#include <stdio.h>
#include <stdlib.h>
void insert(int n1, int *a, int len, int ele){
int i;
printf("Cac phan tu mang sau khi chen:\n");
for(i = 0; i < len - 1; i++){
printf("%d\n", *(a + i));
}
printf("%d\n", ele);
for(i = len - 1; i < n1; i++){
printf("%d\n", *(a + i));
}
}
int main(){
int *a, n1, i, len, ele;
printf("Nhap kich thuoc mang: ");
scanf("%d", &n1);
a = (int*)malloc(n1 * sizeof(int));
printf("Nhap cac phan tu:\n");
for(i = 0; i < n1; i++){
scanf("%d", a + i);
}
printf("Nhap vi tri can chen phan tu:\n");
scanf("%d", &len);
if(len <= n1){
printf("Nhap phan tu moi can chen: ");
scanf("%d", &ele);
insert(n1, a, len, ele);
} else {
printf("Đầu vào không hợp lệ");
}
return 0;
}
Đầu ra
Kết quả khi chạy chương trình:
Nhap kich thuoc mang: 5 Nhap cac phan tu: 1 3 5 7 2 Nhap vi tri can chen: 5 Nhap phan tu moi can chen: 9 Cac phan tu mang sau khi chen: 1 3 5 7 9 2