Bài toán:
Cho một danh sách L, một giá trị x (cùng kiểu với kiểu dữ liệu của các phần tử trong danh sách) và một vị trí p bất kỳ trong danh sách. Hãy chèn x vào vị trí p trong danh sách L.
Phân tích cách chèn
Khi xen 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 báo lỗi.
- Ngược lại ta tiếp tục xét:
+ Nếu p không hợp lệ (p>count+1 hoặc p<1 ) thì chương trình con báo lỗi; ( vì: 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.count+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.
+ Nếu vị trí p hợp lệ thì 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
Giải thuật chèn:
Procedure InsertList(X: Item, P: byte , Var L: List) Var i: integer;
Begin
if (L.count =MaxLength) then Writeln(‘Danh sach day’)
else
if ((P<1) or (P>L.count+1)) then Writeln (‘Vi tri khong hop le’)
Else
begin
{Dời các phần tử từ vị trí p đến cuối danh sách (Count) sang phải 1 vị trí}
For i:=L. count+1 to P+1 do
L.Elements[i]: =L.Elements[i-1]; {Đưa x vào vị trí p}
L.Elements[P]=X;
{Tăng độ dài danh sách lên 1} L.count:= L.Count +1; end
End;