Thêm/Xóa phần tử trên mảng một chiều

17
29453

Trong các bài viết trước chúng ta đã làm quen với các kiến thức về mảng một chiều. Các bạn có thể xem lại các bài viết này ở link bên dưới. Hôm nay chúng ta tiếp tục làm quen với thao tác, thêm, xóa phần tử trên mảng.

  1. Hướng dẫn Dev-C++ căn bản hoặc  Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012
  2. Lý thuyết Mảng một chiều
  3. Duyệt mảng một chiều
  4. Nhập xuất mảng một chiều

Hàm Thêm vào mảng một giá trị x tại vị trí vt (kiểm tra tính hợp lệ của vt)

  • Kiểm tra nếu k ∈[0, n] thì:
    • Dời các phần tử từ vị trí n-1 đến k lùi lại 1 vị trí.
    • Thêm x vào vị trí thứ k của mảng, tăng n thêm 1.
void ThemPhanTu(int a[], int &n, int x, int vt)
{
	if(vt>=0 && vt<=n)
	{
		for(int i=n; i>vt; i--)
			a[i] = a[i-1]; //Dịch các phần tử sang phải 1 vị trí
		a[vt]=x; //Thêm x vào vị trí vt
		n++; //Tăng số phần tử lên 1		
	}
	else
		printf("\nVi tri %d khong hop le.", vt);
}

Hàm Xóa khỏi mảng một giá trị x

Để xóa một phần tử trong mảng ta phải Kiểm tra nếu x có tồn tại trong mảng thì:

  • Dời các phần tử sau x tới 1 vị trí.
  • Giảm n bớt 1.
int TimPhanTu(int a[], int n, int x)
{
	for(int i=0; i<n; i++)
		if(a[i] == x)
			return i; //Tìm thấy x tại vị trí thứ i
	return -1; //Không tìm thấy x trong mảng
}
//=======================================================================
void XoaPhanTu(int a[], int &n, int x)
{
	int vt=TimPhanTu(a, n, x); //Tìm vị trí x trong mảng
	if(vt==-1)
		printf("\nKhong tim thay phan tu %d muon xoa.", x);
	else
	{
		for(int i=vt; i<=n-2; i++)
			a[i] = a[i+1]; //Dịch các phần tử sang trái 1 vị trí
		n--; //Giảm số phần tử bớt 1
	}			
}

 

17 COMMENTS

  1. [Hàm tìm phần t]:
    Nếu mà trong mảng có hai phần tử muốn tìm thì làm sao ạ?

    [Hàm xóa phần tử]
    Nếu trong mảng có hai phần tử giống nhau mà xóa thì như thế nào ạ?

    • #include “stdafx.h”
      #include
      using namespace std;
      int ktra(int a[], int n,int x)
      {
      for (int i = 0;i<n;i++)
      {
      if (a[i] == x)return i;
      }
      return -1;
      }
      void xoa(int a[], int &n, int x)
      {
      int m;
      int k = ktra(a, n, x);
      if(k!=-1)
      {
      for (int i = k;i> n >> x;
      k = n;
      for (int i = 0;i > a[i];
      }
      m = ktra(a, n, x);
      if (m == -1)cout << "Khong co trong mang.";
      else
      {
      for (int i = 0;i < k;i++)
      {
      xoa(a, n, x);
      }
      for (int i = 0;i < n;i++)
      {
      cout << a[i] << " ";
      }
      }
      system("pause");
      return 0;
      }
      Đây là code xóa phần tử x ( có bao nhiêu x xóa hết) trong mảng và xuất ra mảng mới.

This site uses Akismet to reduce spam. Learn how your comment data is processed.