1.Cách thêm một phần tử vào cuối danh sách

Tôi sẽ sử dụng lại danh sách mảng gồm các giá trị: 1,2,3,4,5,6,7,8,9,10,11 (hình minh họa bên dưới)

Tuy nhiên lần này vấn đề là tôi cần chèn một số X vào cuối danh sách trên nghĩa là số X này được đứng sau số 11 (xem hình minh họa bên dưới)

Vì chèn X vào cuối danh sách nên ta không cần thực hiện bước dịch chuyển các phần tử có trong danh sách. Để thực hiện chèn X vào cuối danh sách tôi chỉ cần hai bước đơn giản:

  • Bước đầu tiên: thêm trực tiếp X vào vị trí trống cuối cùng trong danh sách:

  • Bước thứ hai: Tăng số lượng phần tử trong danh sách lên 1 đơn vị

2.Hàm thêm một phần tử vào cuối danh sách

2.1 Xây dựng hàm chèn cuối

Hàm void ChenCuoi(DSKe &ds, int x) duới đây nhận tham chiếu đầu vào là DSKe &ds và số nguyên int x (chính là phần tử cần chèn vào cuối danh sách).

void ChenCuoi(DSKe &ds, int x){
   //neu day thi khong duoc phep chen
   if (KiemTraDay(ds)==1){
      return;
   }
   //truy cap vao phan tu cuoi cung cua danh sach va chen X vao
   ds.A[ds.n]=x;
   //tang phan tu trong danh sach len
   ds.n += 1;
}

Chú ý:

  • Hàm ChenCuoi() cũng nhận tham chiếu DSKe &ds bởi vì ta mong muốn rằng sự thay đổi của danh sách khi phần tử được chèn vào cuối sẽ làm thay đổi lại các phần tử có trong danh sách ban đầu.
  • Ở phần chèn đầu ta có ds.A[0] chính là phần tử đầu tiên trong danh sách thì ở phần chèn cuối ds.A[ds.n] lại là phần tử cuối cùng trong danh sách!

2.2 Chương trình hoàn chỉnh sử dụng hàm chèn cuối vào danh sách

Chương trình dưới đây nêu ra đầy đủ các hàm (hay các nội dung cần thiết) để thực hiện việc chèn một giá trị vào cuối danh sách kề sử dụng mảng:

#include <stdio.h>
#define MAX 100 //dinh nghia so luong phan tu cua mang co the luu tru
typedef struct DSKe{
   //mang int a voi kich thuoc MAX = 100
   int A[MAX];
   //quan ly so luong N phan tu
   int n;
}DSKe;

//khai bao ham khoi tao
void KhoiTao(DSKe &ds){
   //ban dau danh sach la rong (n = 0)
   ds.n = 0;
}

int KiemTraRong(DSKe ds){
   //neu ds.n == 0 thi rong
   if (ds.n==0){
      return 1;
   }  
   return 0;
}

int KiemTraDay(DSKe ds){
   //neu ds.n == MAX thi da day
   if (ds.n == MAX){
      return 1;
   }
   return 0;
}

void ChenCuoi(DSKe &ds, int x){
   //neu day thi khong duoc phep chen
   if (KiemTraDay(ds)==1){
      return;
   }
   //truy cap vao phan tu cuoi cung cua danh sach va chen X vao
   ds.A[ds.n]=x;
   //tang phan tu trong danh sach len
   ds.n += 1;
}

int main(){
   //khai bien ds co kieu DSKe
   DSKe ds;
   //dua ds vao ham khoitao
   KhoiTao(ds);
   //khai bao bien x can chen cuoi co gia tri bang 12
   int x = 12;
   //Chen x vao cuoi danh sach
   ChenCuoi(ds,x);
}