Khi chèn phần tử có nội dung x vào tại vị trí p của danh sách L thì sẽ xuất hiện các khả năng sau:
- Mảng đầy: mọi phần tử của mảng đều chứa phần tử của danh sách, tức là phần tử cuối cùng của danh sách nằm ở vị trí cuối cùng trong mảng. Nói cách khác, độ dài của danh sách bằng chỉ số tối đa của mảng; Khi đó không còn chỗ cho phần tử mới, vì vậy việc xen là không thể thực hiện được, chương trình con gặp lỗi.
- Ngược lại ta tiếp tục xét:
Nếu p không hợp lệ (p>last+1 hoặc p<1 ) thì chương trình con gặp lỗi; (Vị trí xen p<1 thì khi đó p không phải là một vị trí phần tử trong trong danh sách đặc. Nếu vị trí p>L.last+1 thì khi xen sẽ làm cho danh sách L không còn là một danh sách đặc nữa vì nó có một vị trí trong mảng mà chưa có nội dung.)
Nếu vị trí p hợp lệ thì chúng ta tiến hành xen theo các bước sau: + Dời các phần tử từ vị trí p đến cuối danh sách ra sau 1 vị trí. + Độ dài danh sách tăng 1.
+ Đưa phần tử mới vào vị trí p
Chương trình con chèn phần tử x vào vị trí p của danh sách L có thể viết như sau:
Procedure Insert_List(X : Kieuphantu, P : Position); Var Q : Position;
Begin
if (Last=MaxLength) then Write("Danh sach day"); else if ((P < 1) or (P > Last))
Write("Vi tri khong hop le"); Else
begin
{Dời các phần tử từ vị trí p đến cuối danh sách sang phải 1 vị trí} For Q:=Last downto P do
Elements[Q]:=Elements[Q-1]; {Đưa X vào vị trí P}
Elements[P]=X;
{Tăng độ dài danh sách lên 1 } Last:=Last + 1;
End; End;