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); }