//Họ và tên :Trần Văn Linh
//MSV:581597
//Lớp:K58QLTT
---------------------------------------------------------------------------------
A.Giải thuật thêm một nút vào danh sách liên đơn
Bài này mình sẽ giới thiệu 3 trường hợp bổ sung trong danh sách liên kết đơn.
Mình sẽ dùng 2 biến con trỏ F, R là nút đầu tiên, nút cuối cùng của danh sách.
Lưu ý : new <=AVAIL và P=>AVAIL để biểu thị việc cấp phát và thu hồi bộ nhớ.
TH1. Giải thuật bổ sung vào nút đầu tiên
- Vào :Phần tử dữ liệu x
- Ra: Không có
procedure Insert(F,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
Link(new):=F;
F:=new;
3,{Kết thúc}
Return.
TH2. Giải thuật bổ sung vào sau nút M
-Vào :M,X
-Ra: Không có
procedure Insert(F,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
F:=new;
else
begin
Link(new):=Link(M);
Link(M):=new;
end
3,{Kết thúc}
Return.
TH3. Giải thuật bổ sung vào nút cuối cùng
procedure Insert(F,R,M,X)
1,{Tạo nút mới}
new <=AVAIL;
infor(new):=X;
Link(new):=null;
2,{Bổ sung}
{Trường hợp danh sách rỗng}
if F=null then
begin
F:=new;
R:=new;
else
begin
Link(R):=new;
R:=new;
end
3,{Kết thúc}
Return.
B. Giải thuật tiềm kiếm một nút trong danh sách liên đơn khi biết trường thông tin.
Vào :F,thông tin nút cần tìm kiếm
Ra: Nút cần tìm kiếm
Function Search(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm kiếm}
P:=F;
while P#null Do
begin
if infor(P)=X
begin
Q:=P;{nút tìm thấy}
return;{Dừng vòng lặp,thay cho lệnh break trong C}
end;
P=Link(P);
end
3,{Kiểm tra xem có tồn tại nút cần tìm không?}
if Q=null
begin
write('Không tồn tại nút cần tìm kiếm.!');
return;{Kết thúc}
end
else
Search:=Q;{Trả về nút được tìm thấy}
4,{Kết thúc}
Return.
C. Giải thuật xóa một nút có trường thông tin là x trong danh sách liên kết đơn.
Vào:F,X
Ra: Không có
Procedure Delete(F,X)
1{Kiểm tra danh sách rỗng}
if F=null
begin
write('Danh sách rỗng');
return;{kết thúc}
end
2,{Tìm nút cần xóa}
P:=F;
while P# null Do
begin
if infor(P)=X then
return;{Dừng vòng lặp,thay cho lệnh break trong C}
Q:=P;
P:=Link(P);{nút cần xóa}
end
3,{xóa bỏ}
if P # null
begin
if P=F then
F=Link(F);
else
begin
Link(Q):=Link(P);
end
P=>AVAIL;{Thu hồi bộ nhớ}
end
4,{Kết thúc}
Return.
Sunday, May 15, 2016
Home »
Danh sách liên kết đơn .
» Giải thuật thêm,xóa ,tim kiếm một nút vào danh sách liên kết đơn
a ơi cho e hỏi là em viết 1 hàm tìm kiếm 1 phần tử có giá trị = x, và 1 hàm xóa đi nút chứa phần tử đó, thì có cách nào rút ngắn hàm xóa mà ko cần tìm nút ko ạ( hàm tìm kiếm có kiểu trả về là int)
ReplyDelete