Xen một phần tử vào danh sách Bài toán:

Một phần của tài liệu Bài giảng môn Cấu Trúc Dữ Liệu và Thuật toán doc (Trang 26 - 27)

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;

Một phần của tài liệu Bài giảng môn Cấu Trúc Dữ Liệu và Thuật toán doc (Trang 26 - 27)