Vấn đề
Viết chương trình C để xóa một phần tử khỏi 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 xóa. Nếu phần tử cần xóa không có trong mảng, hiển thị "Đầu vào không hợp lệ".
Giải pháp
Mảng được 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 bao gồm:
- Chèn
- Xóa
- Tìm kiếm
Thuật toán
Tham khảo thuật toán xóa phần tử mảng với sự hỗ trợ của 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 thời gian chạy.
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 thời gian chạy.
Bước 6 - Nhập phần tử cần xóa.
Bước 7 - Sau khi xóa, các phần tử được dịch chuyển sang trái một vị trí.
Ví dụ
Kích thước mảng: 5
Các phần tử mảng:
1 2 3 4 5
Nhập vị trí phần tử cần xóa: 4
Kết quả:
Sau khi xóa các phần tử mảng: 1 2 3 5
Chương trình C
Chương trình C sau xóa phần tử mảng bằng con trỏ:
#include <stdio.h>
#include <stdlib.h>
void delete(int n, int *a, int pos);
int main(){
int *a, n, i, pos;
printf("Nhap kich thuoc mang: ");
scanf("%d", &n);
a = (int*)malloc(sizeof(int) * n);
printf("Nhap cac phan tu:\n");
for(i = 0; i < n; i++){
scanf("%d", (a + i));
}
printf("Nhap vi tri phan tu can xoa: ");
scanf("%d", &pos);
delete(n, a, pos);
return 0;
}
void delete(int n, int *a, int pos){
int i, j;
if(pos <= n){
for(i = pos - 1; i < n; i++){
j = i + 1;
*(a + i) = *(a + j);
}
printf("Cac phan tu mang sau khi xoa:\n");
for(i = 0; i < n - 1; i++){
printf("%d\n", (*(a + i)));
}
} else {
printf("Đầu vào không hợp lệ");
}
}
Đầu ra
Khi chương trình chạy, kết quả như sau:
Nhap kich thuoc mang: 5 Nhap cac phan tu: 12 34 56 67 78 Nhap vi tri phan tu can xoa: 4 Sau khi xoa cac phan tu mang: 12 34 56 78