Chèn một phần tử x vào vị trí k trong mảng trong C++

chen phan tu vao mang 1

Chèn phần tử vào mảng là một bài toán rất hay. Bài viết này mình sẽ chia sẻ cho bạn đọc code chèn phần tử vào vị trí k trong mảng C/C++.

1.Giới thiệu bài toán

Bài toán số 17 luyện tập lập trình mình chia sẻ cho các bạn dưới đây có đề bài như sau:

Viết hàm chèn một phần tử x vào vị trí k trong mảng 1 chiều a có n phần tử.

Hoặc có thể bạn sẽ gặp bài toán chèn vào sau hay trước vị trí k trong mảng. Cách giải bài toán đó không khác gì đề bài trên.

Đánh giá: Một bài toán ở mức vận dụng trung bình và cực kì hay. Bạn sẽ nhận được rất nhiều thứ khi tự mình hoàn thành bài tập này.

2.Giải quyết bài toán

Một câu hỏi ở mức vận dụng cơ bản đòi hỏi bạn nắm chắc kiến thức của ngôn ngữ đặc biệt là vòng lặp for.

Câu hỏi này không quá khó về mặt toán học, chỉ cần tư duy một xíu là giải được nhé!

2.1 Hàm chèn phần tử x vào vị trí k cho trước

Nếu như bạn đang làm bài toán chèn x vào trước vị trí k thì nó giống với việc bạn giảm k đi một đơn vị sau đó chèn.

Ngược lại bạn chèn x vào sau vị trí k thì đơn giản, tăng k lên một đơn vị sau đó chèn.

Ý tưởng giải bài toán:

  • Khi thêm một phần tử điều đầu tiên là chúng ta cần phải tăng tổng số phần tử của mảng lên.
  • Dùng vòng for duyệt từ cuối mảng tới vị trí k (>k). Phần tử đứng sau gán bằng phần tử đứng trước tức là a[i]=a[i-1]
  • Gán a[k]=x

Với ý tưởng giải của mình bên trên mình có hàm chèn x vào vị trí k như sau:

void InsertX(int a[], int &n, int x, int k){
	n++;
	
	for(int i=n-1;i>k;i--)
		a[i]=a[i-1];	
	
	a[k]=x;
}

hàm này sử dụng được cho cả hai ngôn ngữ C và C++.

Tương tự mình sẽ viết hàm chèn x vào trước k và sau nhé!

Chèn trước:

void InsertX(int a[], int &n, int x, int k){
	n++;
	
	for(int i=n-1;i>k-1;i--)
		a[i]=a[i-1];	
	
	a[k-1]=x;
}

Chèn sau:

void InsertX(int a[], int &n, int x, int k){
	n++;
	
	for(int i=n-1;i>k+1;i--)
		a[i]=a[i-1];	
	
	a[k+1]=x;
}

Bạn dựa vào gợi ý về ý tưởng làm bài của mình có thể dùng vào nhiều trường hợp khác nhau.

2.2 Chương chình chèn phần tử x vào vị trí k

Để hoàn thành chương trình, bạn lắp thêm cấu trúc nhập xuất mảng (làm việc với mảng). Viết thêm phần nhập x và k là có chương trình hoàn thiện

Code C++:

#include<bits/stdc++.h>
using namespace std;
void nhap(int a[], int &amp;n){
	do{
		cout<<("Nhap n: ");
		cin>>n;
	}
	while(n<2||n>99);
	for(int i=0; i<n; i++){
		cout<<"a["<<i<<"]: ";
		cin>>a[i];
	}
}

void xuat(int a[], int n){
	for(int i=0;i<n;i++){
		cout<<"  "<<a[i];
	}
}

void InsertX(int a[], int &amp;n, int x, int k){
	n++;
	
	for(int i=n-1;i>k;i--)
		a[i]=a[i-1];	
	
	a[k]=x;
}

int main(){
	int a[100];
	int n, x,k;
	nhap(a,n);
	cout<<"\nNhap phan tu can chen: ";
	cin>>x;
	cout<<"Nhap vi tri can chen: ";
	cin>>k;
	InsertX(a,n,x,k);
	cout<<"Mang sau khi chen: "<<endl;
	xuat(a,n);
	return 0;
}

Kết quả khi chạy chương trình trên:

chen phan tu vao mang 2

Trong ví dụ, mình đã chèn số 3 vào vị trí 2. Số 4 đã bị đẩy về phía sau.

Bài viết đến đây là hết, cảm ơn bạn đã quan tâm bài viết. Đừng bỏ lỡ bài viết tiếp theo nhé!

Xem tiếp bài 18: Đếm số phần tử khác nhau trong mảng

Xem lại bài 16: Đếm số lần xuất hiện của phần tử trong mảng.

Tải về đề cương 67 bài tập lập trình C/C++

LEAVE A REPLY

Please enter your comment!
Please enter your name here