c. Cài đặt
4.2.4. Thêm một phần tử vào danh sách
Một vấn đề cần phải quan tâm khi thực hiện thêm phần tử vào danh sách đặc là kiểm tra xem danh sách có đầy hay không. Vì vậy, trong tất cả các hàm thêm phần tử, cần phải thực hiện kiểm tra danh sách đầy trƣớc khi thực hiện.
a. Thêm một phần tử vào đầu
Để thêm một phần tử x vào đầu danh sách đặc, chúng ta cần thực hiện dịch chuyển tất cả các phần tử sang phải một vị trí, tăng kích thƣớc của danh sách (tăng n), sau đó gán giá trị phần tử đầu bằng x.
0 Dịch sang phải 1 vị trí MAX-1 n-1 0 n-1 MAX-1 n n x 0 n-1 n MAX-1
Thêm phần tử x vào đầu
Hàm cài đặt nhƣ sau:
void AddFirst(LIST& myList, int x) {
if(IsFullList(myList))
cout<<"\nDanh sach day!"; else
{
myList.n++;//Tăng kích thƣớc danh sách /*Dịch chuyển các phần tử sang phải*/ for(int i=myList.n;i>0;i--)
myList.A[i]=myList.A[i-1];
myList.A[0]=x;//Gán giá trị phần tử đầu bằng x
} }
b. Thêm một phần tử vào cuối
Thao tác thêm một phần tử x vào cuối danh sách đặc đơn giản hơn so với thao tác thêm vào đầu. Chúng ta chỉ cần tăng kích thƣớc danh sách và gán x vào vị trí cuối.
Hàm cài đặt nhƣ sau:
void AddLast(LIST& myList, int x) {
cout<<"\nDanh sach day!"; else { myList.n++;//Tăng kích thƣớc danh sách myList.A[myList.n-1]=x;//Gán phần tử đầu bằng x } } c. Thêm một phần tử vào vị trí k
Theo tác thêm một phần tử x vào vị trí k là thao tác thêm tổng quát vào danh sách (vì nó có thể là thao tác thêm vào đầu, hay vào cuối danh sách tùy theo giá trị của k). Ngoài việc kiểm tra danh sách đầy hay chƣa, chúng ta cần kiểm tra vị trí k có hợp lệ hay không. Vị trí hợp lệ là vị trí nằm trong khoảng từ 0 đến n.
Các bƣớc cần thực hiện bao gồm: Dịch chuyển các phần tử từ vị trí k sang phải một vị trí (nếu 0≤k<n); tăng kích thƣớc mảng; sau đó gán giá trị vị trí k bằng x. Khi k=0, thao tác này là thao tác thêm một phần tử vào đầu danh sách. Khi k=n, thao tác này là thao tác thêm một phần tử vào cuối danh sách. 0 Dịch sang phải 1 vị trí MAX-1 n-1 0 n-1 MAX-1 n n x 0 n-1 n MAX-1 Thêm phần tử x vào vị trí k k k k Hàm cài đặt nhƣ sau:
void AddItem(LIST& myList, int x, int k) {
if(IsFullList(myList))
else
if(k<0 || k>myList.n)
cout<<"\nVi tri can them khong hop le!"; else
{
myList.n++;//Tăng kích thƣớc danh sách /*Dịch chuyển các phần tử từ k sang phải*/ for(int i=myList.n;i>k;i--)
myList.A[i]=myList.A[i-1];
myList.A[k]=x;//Gán phần tử vị trí k bằng x }
}